Могу ли я отправлять и получать данные между работниками, находясь на парфоре (MATLAB)?

Я хотел бы знать, если бы я мог торговать (отправлять и получать) данные между узлами при выполнении parfor. То, что я хотел бы сделать, это что-то вроде этого:

parfor i = 1:4

    %Perform a computation on each column of a 4x4 matrix on 4 different workers (each worker takes one column).

    %Make Worker #1 send its data to Worker #3, Worker #3 to Worker #1, Worker #2 ro Worker #4 and Worker #4 to Worker #2.

    %Make other computations on the data received from the other workers

end

Я хотел бы выполнить все эти вычисления, не покидая parfor. Есть ли какие-либо команды MPI, которые я могу использовать для этого? Это достижимо? Если так, как я мог достигнуть этого? Спасибо!

2 ответа

Решение

Вы не можете сделать это в течение parforгде итерации должны быть независимыми. Вместо этого взгляните на spmd блок и команды labSend, labReceive а также labBroadcast,

Данные не могут быть обменены между parfor экземпляров. Это часть использования parforиметь индивидуальные задачи, которые действительно независимы. Например, нет гарантии, сколько из них будет работать одновременно. На некоторых компьютерах parfor разрешит только 1 экземпляр, для других он может разрешить 4 запуска одновременно, а для других только 2 одновременно.

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

Другие вопросы по тегам