Здравствуйте, Sinclair, Вы писали:
S>Перепроверь на новой версии — там не будет векторизованных операций, но интересно посмотреть скалярную статистику на твоих железках.
не вешается
https://paste.c-net.org/GunnedPointing
но еще остались NullReferenceException-ы
Здравствуйте, Sinclair, Вы писали:
Пропустил ответ.
MA>> Я не знаю, но в том асме, что я видел — куча short-forward бранчей. Это то что почти все процессоры понимают, но я х.з.
S>Ну да — собственно каждый if или ?: — это short-forward branch.
Так и есть, но для циклов это может быть несколько наивно, т.к. в циклах можно нехило выиграть за счёт оптимального "code layout". К примеру, не помню в каком версии дотнета уже это добавили, но бранч с throw автоматом считается маловероятным (unlikely) и код для него отправляется в самый самый низ метода. Но, конечно когда у тебя цикл на 40Кб кода тут по моему уже пофигу...
(Add: я понимаю, что тут вообще зависимость от данных которые по-честному могут быть любыми, так что такого рода оптимизации как бы и не имеют смысла, но кто знает...)
S>Ага. Можешь ещё выложить статистику по C4 бенчмарку?
Первый тест не знаю почему имеет чуть лучшие цифры, пересобрал потом всё на чистую и повторил два раза.
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.388 (2004/?/20H1)
Intel Core i7-4770 CPU 3.40GHz (Haswell), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=5.0.100-preview.6.20318.15
[Host] : .NET Core 3.1.6 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.31603), X64 RyuJIT
DefaultJob : .NET Core 3.1.6 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.31603), X64 RyuJIT
| Method | FileName | Mean | Error | StdDev | Ratio | RatioSD | BranchInstructions/Op | BranchMispredictions/Op |
|------------------- |----------- |----------:|---------:|---------:|------:|--------:|----------------------:|------------------------:|
| NaturalC4 | p00743.bmp | 211.81 ms | 0.435 ms | 0.340 ms | 2.36 | 0.02 | 164,655,559 | 454,239 |
| UnsafeC4 | p00743.bmp | 89.84 ms | 0.838 ms | 0.784 ms | 1.00 | 0.00 | 22,160,318 | 89,828 |
| LinqC4 | p00743.bmp | 87.73 ms | 0.333 ms | 0.312 ms | 0.98 | 0.01 | 25,311,413 | 157,601 |
| LinqC4VectorCached | p00743.bmp | 44.92 ms | 0.696 ms | 0.651 ms | 0.50 | 0.01 | 9,687,699 | 51,875 |
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.388 (2004/?/20H1)
Intel Core i7-4770 CPU 3.40GHz (Haswell), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=5.0.100-preview.6.20318.15
[Host] : .NET Core 3.1.6 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.31603), X64 RyuJIT
DefaultJob : .NET Core 3.1.6 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.31603), X64 RyuJIT
| Method | FileName | Mean | Error | StdDev | Ratio | RatioSD |
|------------------- |----------- |----------:|---------:|---------:|------:|--------:|
| NaturalC4 | p00743.bmp | 222.25 ms | 1.920 ms | 1.702 ms | 2.21 | 0.03 |
| UnsafeC4 | p00743.bmp | 100.75 ms | 1.391 ms | 1.301 ms | 1.00 | 0.00 |
| LinqC4 | p00743.bmp | 99.11 ms | 0.449 ms | 0.398 ms | 0.98 | 0.01 |
| LinqC4VectorCached | p00743.bmp | 55.95 ms | 1.084 ms | 1.014 ms | 0.56 | 0.01 |
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.388 (2004/?/20H1)
Intel Core i7-4770 CPU 3.40GHz (Haswell), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=5.0.100-preview.6.20318.15
[Host] : .NET Core 3.1.6 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.31603), X64 RyuJIT
DefaultJob : .NET Core 3.1.6 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.31603), X64 RyuJIT
| Method | FileName | Mean | Error | StdDev | Ratio | RatioSD |
|------------------- |----------- |----------:|---------:|---------:|------:|--------:|
| NaturalC4 | p00743.bmp | 221.45 ms | 1.154 ms | 1.023 ms | 2.21 | 0.03 |
| UnsafeC4 | p00743.bmp | 100.28 ms | 1.354 ms | 1.201 ms | 1.00 | 0.00 |
| LinqC4 | p00743.bmp | 98.88 ms | 1.926 ms | 1.708 ms | 0.99 | 0.02 |
| LinqC4VectorCached | p00743.bmp | 56.09 ms | 0.936 ms | 0.876 ms | 0.56 | 0.01 |