По мотивам одного вчерашнего поста про оптимизацию условных переходов при расчете x=sign(a,b)*min(abs(a), abs(b)) якобы в 10 раз. Краткая сводка:
В общем, опять пачка классических методологических ошибок при бенчмарке. Кому интересно, как такие ошибки НЕ делать, подробности, детальный разбор полетов, оптимизация в еще несколько раз и, главное, исходники под катом.
- оптимизация налицо, но размер мнимый: не в 10 раз, а 2.5 раза;
- бенчмарки надо делать правильно: не надо мерить CPU stalls, RAM bandwidth итп вместо исследуемой функции;
- бенчмарки надо делать правильно: иначе могут дико дрожать;
- выставлять только приоритет прикольно, но на коротких бенчмарках зря: +0.5% скорости, -15% дрожания;
- нужно мерить исследуемую функцию и только ее, только так получаешь корректные данные;
- нужно греть проц, нужно считать минимум из N прогонов/секунд, только так побеждаешь дрожание;
- нужно пользовать SSE, с ним получилось 8.6 раз, причем код… читается.
В общем, опять пачка классических методологических ошибок при бенчмарке. Кому интересно, как такие ошибки НЕ делать, подробности, детальный разбор полетов, оптимизация в еще несколько раз и, главное, исходники под катом.