Как изменить поведение планирования потоков при использовании потоковых строительных блоков (TBB)? - PullRequest
1 голос
/ 09 марта 2010

Кто-нибудь знает, как изменить планирование потоков (особенно сродство) при использовании TBB? При анализе высокого уровня простого параллельного приложения создается впечатление, что TBB определяет сходство базовых потоков таким образом, что снижает производительность. В частности, на ядрах, на которых я работаю, включена поддержка гиперпоточности, и похоже, что TBB привязывает потоки к одному и тому же ядру, даже если другое ядро ​​остается полностью выгруженным.

FWIW, я понимаю, что вполне вероятно, что TBB делает «правильные вещи», и что изменение соответствия потоков только снизит производительность. Я просто хотел бы поэкспериментировать с этим, чтобы увидеть, так ли это на самом деле.

1 Ответ

2 голосов
/ 09 марта 2010

В TBB 2.1 добавлен разделитель соответствия, который назначает задачи потокам на основе соответствия кэша. Использование этого разделителя вместо используемого по умолчанию может помочь . Вы также можете погрузиться в отдельные задачи и использовать tbb::task::set_affinity (документация здесь ). Планировщик может уведомить вас, если задача выполняется в потоке, отличном от того, который указан ее сродством, если ваш подкласс tbb::task реализует обратный вызов note_affinity().

...