Здравствуйте, vdimas, Вы писали:
V>Иначе можно было ограничиться сравнением эффективности вызова new, не усложняя это сравнение всякими linq2d.
Я не думаю, что два обращения к new на 33 мегапиксела как-то существенно влияют на общий тайминг в ~760ms. На убунте gcc ухитряется опередить дотнет несмотря на new.
Но можно, в принципе, и вынести эту часть работы в дотнетный код.
V>/arch:AVX2?
Да, прикрутил -march=native. Стало чуть быстрее:
| Method | FileName | Mean | Error | StdDev | Ratio |
|------------------- |-------------- |----------:|---------:|---------:|------:|
| CppC4 | p00743.bmp.gz | 48.09 ms | 0.281 ms | 0.263 ms | 0.40 |
| NaturalC4 | p00743.bmp.gz | 317.74 ms | 0.375 ms | 0.313 ms | 2.64 |
| UnsafeC4 | p00743.bmp.gz | 120.36 ms | 0.433 ms | 0.361 ms | 1.00 |
| LinqC4 | p00743.bmp.gz | 60.51 ms | 0.213 ms | 0.178 ms | 0.50 |
| LinqC4VectorCached | p00743.bmp.gz | 50.93 ms | 0.410 ms | 0.364 ms | 0.42 |
| Method | WHalf | FileName | Mean | Error | StdDev | Ratio |
|------------------------ |------ |-------------- |-----------:|---------:|---------:|------:|
| SafeSauvola | 5 | p00743.bmp.gz | 1,791.4 ms | 1.16 ms | 0.97 ms | 1.70 |
| UnsafeSauvolaScalar | 5 | p00743.bmp.gz | 1,053.8 ms | 0.47 ms | 0.39 ms | 1.00 |
| CppSauvola | 5 | p00743.bmp.gz | 559.7 ms | 0.32 ms | 0.29 ms | 0.53 |
| LinqSauvolaVector | 5 | p00743.bmp.gz | 1,292.8 ms | 12.97 ms | 11.49 ms | 1.22 |
| LinqSauvolaScalar | 5 | p00743.bmp.gz | 1,599.0 ms | 6.25 ms | 5.54 ms | 1.52 |
| CachedLinqSauvolaVector | 5 | p00743.bmp.gz | 677.9 ms | 0.50 ms | 0.42 ms | 0.64 |
| CachedLinqSauvolaScalar | 5 | p00743.bmp.gz | 997.8 ms | 1.64 ms | 1.37 ms | 0.95 |
V>Но этого мало, надо смотреть, как код бегает по данным, т.е. возможна ли векторизация в том обходе памяти принципиально?
Возможна. Дотнет же её применяет
V>Потому что комплятор зачастую никакой векторизации не делает ввиду её невозможности согласно алгоритма, даже если компилит использование более широкого файла MMX/YMM-регистров... использование файла этих регистров не есть векторизация.
А что, по-вашему, векторизация?