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