Re[4]: 2D-Linq и оптимизация цифровых фильтров - 3
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.07.18 14:18
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А мы на этапе ожидания феерических результатов.

Пока получается выделить катастрофически мало времени — на работе нагрузку нагрузили.
Кроме того, есть риск, что вообще мега-красота не выйдет: компилятор C# работает не так, как я про него думал
А кроме Липперта мало кто пишет про то, как оно там работает "на самом деле".

PD>Для затравки, кстати — в своем коде я оптимизировал вот этот кусочек. Не понравился мне тут квадратный корень, да и деления тоже.


PD> std = sqrt((sqdiff — diff*diff/area)/(area-1));

PD> threshold = mean*(1+k*((std/128)-1));
PD> if(gray_image_ptr[j][i] <= threshold)
PD> bin_image_ptr[j][i] = 0;
PD> else
PD> bin_image_ptr[j][i] = 255;
Ну, это можно оставить на потом. Ну, там, заменит diff/area на уже посчитанный mean; заменить деление на area-1 на area, т.к. в интересующих нас случаях эффект пренебрежимо мал (полпроцента для w=15 и меньше 0.1% для w=25).

PD>В результате получилось нечто вообще плохо читаемое и малопонятное, но работало на 30% быстрее. Это была последняя оптимизация — после введения потоков и прочего.

Ну, после Кармаковского кода меня трудно таким удивить.

PD>К чему я это ? А просто к тому, что когда от такого алгоритма требуется максимальная скорость — это предельно далеко от задачи "напишите мне красиво и изящно".

Так не может быть Хорошее инженерное решение — всегда красиво.
Ладно, отложим это до момента, когда будет что предъявить
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.