Что могло бы вызвать & ldquo; элемент не найден & rdquo; ошибка при вызове веб-службы GetPolicyByOperation Dynamics?

В принципе, поскольку библиотека BLAS имеет оптимизированный точечный продукт, который они могут легко вызвать для dot, который по своей сути параллелен. Они признают, что могут расширять numpy, чтобы распараллелить другие операции, но отказались от этого маршрута. Тем не менее, они дают несколько советов о том, как распараллелить ваш код numpy (в основном, чтобы разделить работу между N ядрами (например, N = 4), разделить ваш массив на N подмассивов и отправить задания для каждого подматрица в собственный поток и затем объедините ваши результаты).

См. http://wiki.scipy.org/ParallelProgramming :

Использовать параллельные примитивы

Одна из самых больших достоинств numpy заключается в том, что вы можете выразить операции массива очень чисто. Например, чтобы вычислить произведение матрицы A и матрицы B, вы просто выполните:

>>> C = numpy.dot(A,B)

Это не просто и понятно для чтения и записи, поскольку numpy знает, что вы хотите сделать матричный точечный продукт, он может использовать оптимизированную реализацию, полученную как часть «BLAS» (подпрограммы базовой линейной алгебры). Обычно это библиотека, тщательно настроенная для быстрого запуска на вашем аппаратном обеспечении, используя преимущества кеш-памяти и реализации ассемблера. Но у многих архитектур теперь есть BLAS, который также использует многоядерную машину. Если ваш numpy / scipy скомпилирован с использованием одного из них, то точка () будет вычисляться параллельно (если это выполняется быстрее), если вы ничего не делаете. Аналогично для других матричных операций, таких как инверсия, декомпозиция сингулярных значений, детерминант и т. Д. Например, библиотека с открытым исходным кодом ATLAS позволяет выбирать время выбора уровня параллелизма (количество потоков). Собственная библиотека MKL от Intel предлагает возможность выбрать уровень параллелизма во время выполнения. Существует также библиотека GOTO, которая позволяет выбирать уровень параллелизма во время выполнения. Это коммерческий продукт, но исходный код распространяется бесплатно для академического использования.

Наконец, scipy / numpy не распараллеливает такие операции, как

>>> A = B + C

>>> A = numpy.sin(B)

>>> A = scipy.stats.norm.isf(B)

Эти операции выполняются последовательно, не пользуясь преимуществами многоядерных машин (но см. ниже). В принципе, это можно было бы изменить без особых усилий. OpenMP - это расширение для языка C, которое позволяет компиляторам создавать параллелизующий код для соответствующих аннотированных циклов (и других вещей). Если кто-то сел и аннотировал несколько циклов ядра в numpy (и, возможно, в scipy), и если один из них скомпилировал numpy / scipy с включенным OpenMP, все три из них автоматически будут запускаться параллельно. Конечно, на самом деле нужно было бы иметь некоторый контроль времени исполнения - например, можно было бы отключить автоматическую распараллеливание, если бы планировалось запустить несколько заданий на одной и той же машине с несколькими процессорами.

blockquote>

0
задан jasonscript 17 January 2019 в 02:01
поделиться