Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как использовать все ядра ЦП для вычислений?


Автор: Proger10 2.4.2014, 09:09
Интересует исключительно код использования многоядерной архитектуры. Знаю теорию распараллеливания, работал с MPI, знаю каким образом распараллеливать математически задачу, заранее просчитано распараллеливаема ли она и какая выгода от подобного действия будет получена, знаю форки, работал с синхронизацией потоков. Но целенаправленно все ядра процессора я никогда не использовал (цели такой у меня не было). Иногда рикошетом только зацеплял потоки, когда требуется обеспечить параллельную работу графики и логики в фоновом режиме. 

Какие там подводные камни есть? Можно ли обойтись без сторонних библиотек? (типа OpenMP). Поскольку код будет кочевать от устройства к устройству, заранее (по возможности) не хочется привязываться ни к чему, только если по-другому очень и очень сложно. Хотя с определёнными сложностями я готов справляться самостоятельно.

Достаточно ли будет просто создать 4 потока, надеясь, что 4 ядра ЦП загрузятся по максимуму или там совершенно иная технология работы? (естественно предполагаю, что в каждом потоке по мощной задаче).

Сейчас появилась цель в быстрых расчётах. Каким образом максимально задействовать ресурсы ЦП? (пока интересует только ЦП, GPU подключу позже к этим же расчётам через Куду).

Автор: Alexeis 2.4.2014, 10:15
Цитата(Proger10 @  2.4.2014,  10:09 Найти цитируемый пост)
Сейчас появилась цель в быстрых расчётах. Каким образом максимально задействовать ресурсы ЦП?

Код

while(1){}

Во всех потоках. Реально будет 100% smile . Степень загрузки будет зависит сколько времени каждый поток будет спать (терять время на синхронизацию). Если поток не спит, то ядро связанное с ним используется на 100% (в случае если есть такая привязка).

Автор: Romikgy 2.4.2014, 10:18
Цитата(Proger10 @  2.4.2014,  08:09 Найти цитируемый пост)
Достаточно ли будет просто создать 4 потока, надеясь, что 4 ядра ЦП загрузятся по максимуму

достаточно

Автор: NoviceF 7.4.2014, 14:39
Цитата(Proger10 @  2.4.2014,  10:09 Найти цитируемый пост)
Какие там подводные камни есть? Можно ли обойтись без сторонних библиотек? (типа OpenMP).

Ну как таковая многопоточность есть в c++11 http://www.cplusplus.com/reference/thread/thread/?kw=thread. Правда не могу сказать как оносится спектр её возможностей к OpenMP, не пользовался ни тем ни другим:)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)