IDL:如何在N个部分中划分FOR循环以实现并行执行?

时间:2018-04-11 14:25:43

标签: parallel-processing idl-programming-language

我有一个耗时长度为300的循环。我想并行执行。

伪代码:

for t=0, 300 do begin
output_data[t] = function(input_data(t))
endfor

•每次迭代的函数()完全相同 •input_data(t))存储在文件

是否可以将300次迭代划分为K个并行进程(其中k是CPU数)? 我找到了split_fot.pro但是如果我理解正确的话,那就是在同一个循环的第n个cicle中划分不同的进程。 我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分:0)

我的库中有一些例程可用于执行以下操作:

pool = obj_new('MG_Pool', n_processes=k)
x = indgen(300)
output_data = pool->map('my_function', x)

此处,my_function需要接受参数i,获取与索引I相关联的数据,并对其应用function。然后将结果放入output_data[i]

您可以使用pool关键字指定要用于N_PROCESSES对象的进程数,也可以自动使用您可用的核心数。

代码在my library,检查src/multiprocessing目录。有关使用它的一些示例,请参阅examples/multiprocessing目录。