Re[6]: Производительность .Net на вычислительных задачах
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.10.20 03:20
Оценка:
Здравствуйте, 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-регистров... использование файла этих регистров не есть векторизация.
А что, по-вашему, векторизация?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.