Здравствуйте, alexeiz, Вы писали:
A>Как вариант: false sharing (ping-ponging): http://www.ddj.com/architect/208200273?pgno=3
A>В неоптимизированной версии данные, которыми оперируют разные потоки, разнесены дальше, а в оптимизированное попадают на одну cache line. Эта cache line постоянно инвалидируется, что замедляет работу программы.
жаль
задача — число-дробилка.
код, выполняющийся в два потока, находится в одном из методов класса. объект создается один. Все используемые в расчете данные были продублированы двумя способоми — создание еще одной размерности у массивов и переменных либо тупое дублирование array0 и array1.
Вариант 1 дал 9% скорости по сравнению с однопоточной, вариант 2 — 20%. Это для шестой студии /O2.
На интеле производительность еще более плачевна.
В идеале скорость должна была возрасти примерно на 30%, т.к. параллелизуемый код занимает около 60% шага расчета.
Профилировал дебаг-версию, т.к. вообще-то не представляю как можно профайлером(AQTime юзал) гонять оптимизированную