Могу ли я отправлять и получать данные между работниками, находясь на парфоре (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 в целом на самом деле не выполняет многопоточность, но у него есть несколько конструкций, которые допускают приложения типа нитей. Однако в целом они довольно сложны и не очень полезны.