Re[2]: многопоточность и скорость
От: kot--  
Дата: 10.02.09 08:46
Оценка:
Здравствуйте, 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 юзал) гонять оптимизированную
---------------
c уважением, мохнато-полосатый kot--
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.