Параллельные вычисления

Все,

Я хотел бы использовать Ilnumerics для параллельных вычислений. Они полностью не связаны. Мне это нужно для 1) случайных перезапусков для оптимизатора (особенно стохастического оптимизатора, например, имитация отжига): решение одних и тех же задач оптимизации, начиная параллельно с разных точек: например: argmin_x f(x), начиная с x0_h h = 1,2, ..,K 2) та же оптимизация для набора несвязанных данных; в качестве примера рассмотрим следующую задачу оптимизации без ограничений: для заданной функции f (R^dx R^p) --> R от x \in R^d и p параметров p\in R^d решить argmin_x f(x,p_h ), h = 1, 2, ..., К.

Я надеюсь, что обозначения достаточно ясны.

Можно ли запустить этот цикл параллельно, выполняя каждый раз некоторое лямбда-выражение, включающее объекты ILnumerics и используя многоядерные архитектуры?

Заранее спасибо, как обычно

GL


person alea_iacta_est    schedule 14.11.2013    source источник


Ответы (1)


Это зависит от: ILNumerics автоматически распараллеливает математические выражения, такие как

C = A + B[":;2"] / 0.4 * pinv(C) ... 

Пытаясь запустить несколько экземпляров таких выражений параллельно, используя несколько потоков из пула потоков, вы в конечном итоге создадите много конфликтов из-за слишком большого количества потоков, конкурирующих за временные интервалы ЦП. В результате ваш алгоритм может работать медленнее, чем без его распараллеливания.

Итак, в этом случае вы можете отключить внутреннее автоматическое распараллеливание, которое ILNumerics делает прозрачно для вас:

Settings.MaxNumberThreads = 1;

Выражения, подобные приведенному выше, впоследствии будут оцениваться в одном потоке. Однако теперь вы отвечаете за распределение вычислительных задач по нескольким потокам. И, кроме того, вам придется соответствующим образом заблокировать свои массивы, потому что ILNumerics вообще не является потокобезопасным! Это позволяет вам одновременно записывать в ваши выходные массивы, но также приводит к необходимости реализовывать правильную схему блокировки...

person Haymo Kutschbach    schedule 14.11.2013