Информация об изменениях

Сообщение Re[5]: 2D-Linq и оптимизация цифровых фильтров - 4 от 04.08.2020 16:38

Изменено 04.08.2020 17:09 Mystic Artifact

Re[5]: 2D-Linq и оптимизация цифровых фильтров - 4
Здравствуйте, Sinclair, Вы писали:

MA>> По тесту видно, что кто-то его давненько не обновлял, но абсолютные цифры похожи на десктоп.

S>Кстати, странно, что CachedLinqSauvolaScalar проигрывает честной unsafe версии. Может, у меня там что-то отвалилось?..
S>Там же порождается вполне себе сопоставимый код.
S>В прошлый раз когда я на такое налетел, обнаружилась разница между JIT-ом динамического и статического кода.
S>Но её я заборол улучшением оптимизации. Попробуй прогнать тест с WHalf = 4, а?
S>И, если не затруднит, скинь сборку Linq2d.GetQuery, которая записывается в папочку Dynamic в выхлопе проекта.

Если ты говоришь, что там попрождается сопоставимый код — то на самом деле не совсем понятно откуда у тебя возникает 30-40% прироста...

Конечно, пожалуйста:

WHalf = 4

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 | WHalf |   FileName |       Mean |    Error |   StdDev | Ratio | RatioSD |
|------------------------ |------ |----------- |-----------:|---------:|---------:|------:|--------:|
|             SafeSauvola |     4 | p00743.bmp | 1,299.4 ms | 18.59 ms | 16.48 ms |  1.82 |    0.02 |
|     UnsafeSauvolaScalar |     4 | p00743.bmp |   714.8 ms |  4.33 ms |  4.05 ms |  1.00 |    0.00 |
|       LinqSauvolaVector |     4 | p00743.bmp | 1,017.6 ms | 11.79 ms |  9.20 ms |  1.42 |    0.01 |
|       LinqSauvolaScalar |     4 | p00743.bmp | 1,138.0 ms |  5.30 ms |  4.69 ms |  1.59 |    0.01 |
| CachedLinqSauvolaVector |     4 | p00743.bmp |   695.6 ms |  5.89 ms |  5.22 ms |  0.97 |    0.01 |
| CachedLinqSauvolaScalar |     4 | p00743.bmp |   828.5 ms |  7.10 ms |  6.64 ms |  1.16 |    0.01 |


---

Вернул WHalf = 5, всё пересобрал. Запустил linq2d.benchmarks --keepFiles, и из него уже выковырял файлы.

  результаты тоже нормальные
Кстати, смешно, но он мне несколько раз подряд для CachedLinqSauvolaVector показывал результат хуже чем у CachedLinqSauvolaScalar, где-то 850ms, хотя при warmup — 700ms, и это произошло, как только я сказал ему keepFiles. Уж не знаю, что за магия случилось. Потом всё очистил, пересобрал и стало всё нормально.

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 | WHalf |   FileName |       Mean |   Error |  StdDev | Ratio |
|------------------------ |------ |----------- |-----------:|--------:|--------:|------:|
|             SafeSauvola |     5 | p00743.bmp | 1,286.4 ms | 8.26 ms | 7.72 ms |  1.80 |
|     UnsafeSauvolaScalar |     5 | p00743.bmp |   715.6 ms | 4.55 ms | 4.26 ms |  1.00 |
|       LinqSauvolaVector |     5 | p00743.bmp | 1,153.0 ms | 5.63 ms | 5.26 ms |  1.61 |
|       LinqSauvolaScalar |     5 | p00743.bmp | 1,282.5 ms | 4.84 ms | 4.53 ms |  1.79 |
| CachedLinqSauvolaVector |     5 | p00743.bmp |   690.4 ms | 6.19 ms | 5.49 ms |  0.97 |
| CachedLinqSauvolaScalar |     5 | p00743.bmp |   824.2 ms | 6.39 ms | 5.66 ms |  1.15 |


И вот от этого запуска содержимое каталога Dynamic.
Ну и там только Linq2d.GetDetect.dll и Linq2d.GetIntegral.dll — никакого Linq2d.GetQuery там не лежит...
Re[5]: 2D-Linq и оптимизация цифровых фильтров - 4
Здравствуйте, Sinclair, Вы писали:

MA>> По тесту видно, что кто-то его давненько не обновлял, но абсолютные цифры похожи на десктоп.

S>Кстати, странно, что CachedLinqSauvolaScalar проигрывает честной unsafe версии. Может, у меня там что-то отвалилось?..
S>Там же порождается вполне себе сопоставимый код.
S>В прошлый раз когда я на такое налетел, обнаружилась разница между JIT-ом динамического и статического кода.
S>Но её я заборол улучшением оптимизации. Попробуй прогнать тест с WHalf = 4, а?
S>И, если не затруднит, скинь сборку Linq2d.GetQuery, которая записывается в папочку Dynamic в выхлопе проекта.

Если ты говоришь, что там попрождается сопоставимый код — то на самом деле не совсем понятно откуда у тебя возникает 30-40% прироста...

Конечно, пожалуйста:

WHalf = 4

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 | WHalf |   FileName |       Mean |    Error |   StdDev | Ratio | RatioSD |
|------------------------ |------ |----------- |-----------:|---------:|---------:|------:|--------:|
|             SafeSauvola |     4 | p00743.bmp | 1,299.4 ms | 18.59 ms | 16.48 ms |  1.82 |    0.02 |
|     UnsafeSauvolaScalar |     4 | p00743.bmp |   714.8 ms |  4.33 ms |  4.05 ms |  1.00 |    0.00 |
|       LinqSauvolaVector |     4 | p00743.bmp | 1,017.6 ms | 11.79 ms |  9.20 ms |  1.42 |    0.01 |
|       LinqSauvolaScalar |     4 | p00743.bmp | 1,138.0 ms |  5.30 ms |  4.69 ms |  1.59 |    0.01 |
| CachedLinqSauvolaVector |     4 | p00743.bmp |   695.6 ms |  5.89 ms |  5.22 ms |  0.97 |    0.01 |
| CachedLinqSauvolaScalar |     4 | p00743.bmp |   828.5 ms |  7.10 ms |  6.64 ms |  1.16 |    0.01 |


---

Вернул WHalf = 5, всё пересобрал. Запустил linq2d.benchmarks --keepFiles, и из него уже выковырял файлы.

  результаты тоже нормальные
Кстати, смешно, но он мне несколько раз подряд для CachedLinqSauvolaVector показывал результат хуже чем у CachedLinqSauvolaScalar, где-то 850ms, хотя при warmup — 700ms, и это произошло, как только я сказал ему keepFiles. Уж не знаю, что за магия случилось. Потом всё очистил, пересобрал и стало всё нормально.

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 | WHalf |   FileName |       Mean |   Error |  StdDev | Ratio |
|------------------------ |------ |----------- |-----------:|--------:|--------:|------:|
|             SafeSauvola |     5 | p00743.bmp | 1,286.4 ms | 8.26 ms | 7.72 ms |  1.80 |
|     UnsafeSauvolaScalar |     5 | p00743.bmp |   715.6 ms | 4.55 ms | 4.26 ms |  1.00 |
|       LinqSauvolaVector |     5 | p00743.bmp | 1,153.0 ms | 5.63 ms | 5.26 ms |  1.61 |
|       LinqSauvolaScalar |     5 | p00743.bmp | 1,282.5 ms | 4.84 ms | 4.53 ms |  1.79 |
| CachedLinqSauvolaVector |     5 | p00743.bmp |   690.4 ms | 6.19 ms | 5.49 ms |  0.97 |
| CachedLinqSauvolaScalar |     5 | p00743.bmp |   824.2 ms | 6.39 ms | 5.66 ms |  1.15 |


И вот от этого запуска содержимое каталога Dynamic.

UPD: Ну и там только Linq2d.GetDetect.dll и Linq2d.GetIntegral.dll — никакого Linq2d.GetQuery там не лежит... а внутри GetDetect-а Transform с 590 локалами!