Стоит ли использовать многопоточную реализацию blas вместе с многопроцессорной обработкой в ​​Python? - PullRequest
5 голосов
/ 14 октября 2011

Предположим, у меня есть 16-ядерный компьютер и смущающая параллельная программа.Я использую множество продуктов numy dot и добавление массивов numpy, и если бы я не использовал многопроцессорность, это было бы просто: убедитесь, что numpy построен на версии blas, которая использует многопоточность.Однако я использую многопроцессорность, и все ядра постоянно работают.В этом случае, есть ли какая-то польза от использования многопоточного бласта?

Большинство операций относятся к типу (blas) типа 1, а некоторые - к типу 2.

Ответы [ 2 ]

6 голосов
/ 14 октября 2011

Возможно, вам нужно быть осторожным с предположением, что ваш код на самом деле использует многопоточные вызовы BLAS. Относительно немногие операторы-пустышки фактически используют базовый BLAS, и относительно немного вызовов BLAS на самом деле являются многопоточными. numpy.dot использует либо BLAS dot, gemv, либо gemm, в зависимости от операции, но из них только gemm обычно является многопоточным, поскольку редко наблюдается какое-либо выигрыш в производительности для O (N) и O (N ^ 2) BLAS призывает при этом. Если вы ограничиваете себя операциями BLAS уровня 1 и уровня 2, я сомневаюсь, что вы на самом деле используете любые многопоточные вызовы BLAS, даже если вы используете непостоянную реализацию, построенную с многопоточным BLAS, таким как Atlas или MKL.

2 голосов
/ 14 октября 2011

Если вы уже используете многопроцессорную обработку, и все ядра работают с максимальной нагрузкой, то добавление потоков, ожидающих процессор, будет очень незначительным, если таковое вообще будет.

В зависимости от вашего алгоритма и того, что вы делаете, может быть более выгодно использовать один тип над другим, но это очень зависит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...