【发布时间】:2014-03-20 13:58:33
【问题描述】:
我需要以 1000 的批次运行 for 循环。但如果 'cc' 在第一次运行期间没有达到 100,我需要重新运行更多批次的 1000 直到 cc 达到 100。
我知道这可以使用 while 循环来完成,但是我需要使用并行工具箱 parfor(也可能是 GPU),而且据我所知它不支持 while 循环。
基本上我需要更改(重置)if 循环内的 for 循环索引。但是,显然 MATLAB 的 for 循环被设计为不能在循环内更改其索引,在本例中为“i”。有没有解决的办法?必须有一种更聪明的方法来做到这一点,而无需使用 while 循环。有什么建议吗?
for i=1:1000
if (abs(i) <= gamma)
% etc..
cc = cc + 1;
end
if cc < 100
i = 1;
end
end
【问题讨论】:
-
如果您要并行运行它,那么在它们已经启动后更改您执行的并行线程的数量有什么意义?并行执行的重点是每个线程不应该依赖于其他线程。也许您应该先使用 while 循环来获取
cc >= 100,然后再并行执行其余的操作? -
@Isaac 这是问题所在,因为'cc'是在for循环中生成的。我可以在 for 循环之外检查 cc 是否
-
对,就这样做,然后结束循环。然后在不需要检查的地方开始另一个循环。
-
当你说你想使用并行工具箱时,你的意思是你想把这个
for循环变成一个parfor循环,这样它就可以在多个worker上运行? -
@AndrewJanke 是的,希望稍后将其扩展到 GPU,但只要它与
parfor一起工作,现在就可以了。
标签: matlab loops parallel-processing parfor