Я разрабатываю коды для научного компьютерного сообщества, особенно для решения линейной системы уравнений (Ax = b form) итеративно.Scientific Computing :: OpenMP или Pthreads
Я использовал BLAS и LAPACK для примитивных матричных подпрограмм, но теперь я понимаю, что есть несколько возможностей для ручной распараллеливания. Я работаю над системой общей памяти, которая оставляет меня с двумя вариантами: OpenMP и PThreads.
Предполагая, что время не является наибольшим фактором (& производительность кода), что является лучшим, будущим доказательством и, возможно, переносным (для CUDA) способом распараллеливания? Время, затрачиваемое на использование Pthreads, должно повысить производительность?
Я считаю, что мое приложение (которое в основном имеет дело со стартом сразу нескольких вещей, а затем работает с «лучшим» значением от всех них), выиграет от явного управления потоками, но я боюсь, что кодирование будет занимать слишком много времени, и в конце не будет никакой окупаемости.
Я уже рассмотрел несколько подобных вопросов здесь, но все они относятся к общим приложениям.
This один относится к универсальному многопоточному приложению в Linux.
This - общий вопрос.
Я знаю SciComp.SE, но чувствовал, что здесь больше по теме.
«в основном имеет дело со стартом сразу нескольких вещей, а затем работает с« лучшим »значением от всех них» Я считаю, что [CPlex] (http://www-01.ibm.com/software/integration/ оптимизация/cplex-optimizer /) содержит алгоритм, аналогичный вашему. Я не знаю, что они выбрали в качестве инструмента для параллелизма, но, возможно, вы могли бы узнать (это не обязательно означает, что их выбор был бы лучшим для вас, но это всегда хорошо знать). – Francesco
boost threads дает очень приятный интерфейс для pthreads (или что-то еще), если вы используете C++. полностью стоит ИМО. Но я выбрал openmp в конечном итоге из-за простоты программирования. Также рассмотрите Intel IPP/TBB. – Anycorn
Если вы используете BLAS или LAPACK, почему бы вам просто не использовать Eigen? Он поддерживает поддержку SIMD (SSE) и OpenMP. –