Как я могу оценить минимальное количество работ, в которое он должен заплатить новый поток? Я в основном интересуюсь C++ 11 std::thread
.Минимальное количество работ, в которое вы хотите внести новую ноде:
Длинные объяснения. Я пытался ускорить наше приложение, поэтому я продолжал распараллеливать функцию низкого уровня, которые выполняют очень мало и простые операции (такие как неравенства и назначения) в цикле. Однако эта функция является наиболее трудоемкой в приложении. Поэтому я попытался распараллелить цикл, создавая два потока для двух последовательных индексов цикла, но это убитое исполнение (я не могу точно сказать, что коэффициент замедления, но может быть около 100x).
Вы посмотрели на openmp? http://bisqwit.iki.fi/story/howto/openmp/ Я считаю, что это часто гораздо проще в использовании, чем нереститься в совершенно новом потоке, особенно если вам просто нужно ускорить циклы здесь и там. –
* два последовательных индекса * звучит очень похоже на ложное разделение * или переполнение кэша. Кэш ваших процессоров вообще не понравится, никогда не будет ускорения. Лучше разбить цикл на непрерывные области и назначить потоки этим регионам. Например. первая половина - первая нить, вторая половина - вторая. –
Не создавайте новый поток, назначьте задачу существующему потоку. Повторно используйте свои потоки, если вы заботитесь о производительности. –