Здравствуйте, Sinclair, Вы писали:
S>Интересно опять же, что если брать чистое время исполнения, то классический unsafe код исполняется у тебя сильно шустрее, чем у меня.
S>Относительные времена Vector/Scalar примерно совпадают; что означает, что используется тот же instruction set.
S>Пока что ещё есть куда крутить оптимизацию — например, фаза предынтегрирования пока что не векторизуется из-за накладок при доступе к r[0, -1].
S>Ещё там не очень оптимально сделан тернарный оператор; но я пока что даже в disassembly ему не смотрел — там нужно прямо очень приседать; обычные способы для динамического кода не работают.
Да я тоже обратил внимание на разницу... но не знаю в чём дело. i7-6600U просто поскромнее, думаю вот и вся разница... Стало интересно, и вот взял ещё ноут с DDR4 памятью и соответственно другим процессором (на i7-4770 была DDR3 память, но в который раз убеждаюсь — это вообще без разницы

):
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.329 (2004/?/20H1)
Intel Core i5-7300HQ CPU 2.50GHz (Kaby Lake), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 3.1.5 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.27001), X64 RyuJIT
DefaultJob : .NET Core 3.1.5 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.27001), X64 RyuJIT
| Method | WHalf | FileName | Mean | Error | StdDev | Ratio | RatioSD |
|------------------------ |------ |----------- |-----------:|---------:|---------:|------:|--------:|
| SafeSauvola | 5 | p00743.bmp | 1,369.5 ms | 26.42 ms | 25.94 ms | 1.89 | 0.03 |
| UnsafeSauvolaScalar | 5 | p00743.bmp | 727.7 ms | 13.48 ms | 11.26 ms | 1.00 | 0.00 |
| LinqSauvolaVector | 5 | p00743.bmp | 1,283.9 ms | 8.68 ms | 8.12 ms | 1.77 | 0.02 |
| LinqSauvolaScalar | 5 | p00743.bmp | 1,284.4 ms | 8.86 ms | 7.86 ms | 1.76 | 0.03 |
| CachedLinqSauvolaVector | 5 | p00743.bmp | 681.5 ms | 9.41 ms | 7.86 ms | 0.94 | 0.02 |
| CachedLinqSauvolaScalar | 5 | p00743.bmp | 789.0 ms | 8.12 ms | 6.78 ms | 1.08 | 0.02 |
По тесту видно, что кто-то его давненько не обновлял, но абсолютные цифры похожи на десктоп.