Re[4]: Оптимизация: многопоточность
От: CyberDemon Россия  
Дата: 13.11.09 20:23
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Вот это очень интересно. А у вас количество рабочих потоков не равно что-ли количеству ядер? И по какому принципу вы его выбираете?

Юзер выбирает, сколько потоков ставить (максимум — кол-во логических ядер).

Новые результаты. Если не использовать манипуляции с маской, то второй вариант таки обгоняет первый, но только при определенных условиях — если размер фрейма меньше размера L3 кеша (у моего core i5 он 8 метров), то обгон есть, если уже больше — разницы нет. Это отмечается только при условии использования всех ядер.
Ну а если пользуем не все ядра, например 2 из 4, то надо обязательно на процесс маску вешать, чтобы он юзал только 2 ядра — это дает (в моем синтетическом случае) эффект.

Например, размер кадра 1440х900 (ну у меня моник такой), 32битный цвет = ~5Mbytes. FPS видео и "алгоритм" не берем в учет.
Заводим 4 ядра и результаты такие: первый 43%, второй 58% (проценты — кол-во обработанных кадров).
Заводим 2 ядра без affinity mask: оба по 18%
Заводим 2 ядра с affinity mask 0x03: 22%, 27%
Это были запуски в студии (debug версия, но не в debug режиме).
А потом запустил из эксплорера последний вариант с двумя ядрами и немного прифигел — 34%, 49%. Смотрел TMonitor-ом частоту работы ядер — множитель (забыл как оно называется) выходит за стандартные пределы, что есть гут
После чего снова первый тест повторил с 4мя ядрами — 71%, 82%. Че-то студия мутит...

Короче, выводы я определенные сделал, сейчас попробую изменить "алгоритм" в тесте. На данный момент там тупо синус значений одного буфера пишется в другой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.