【发布时间】:2015-12-06 03:24:25
【问题描述】:
我有一个函数文件,它模拟了 1000 个时间步长的矩阵 A(大小为 100*100),并生成最终结果为 A_t1000(大小为 100*100 的矩阵)。
例如如果 A = 100*100 在 t0 则 A_t1= 100*100; A_t2=100*100; …….. A_t1000=100*100 矩阵。每个都有不同的值,所以我可以有多个从 A_t1 到 A_t1000 的 A 切片。
我的脚本文件将此过程迭代 100 次。脚本文件调用此函数并生成最终输出矩阵 B_t1000 = A_t1000 * 100。B_t1000 是包含 100 个 As 的最终输出矩阵。 B_t1000 尺寸为 100*100*100。函数文件的起始输入参数在脚本文件的开头提供。
我正在尝试使用“parfor”运行此代码。目的是在单独的核心中独立运行每个迭代,然后在最后收集它们以生成 B。当前代码看起来像 ---
iter=100;
p=0.8;N=1200;
maxgen=1000;
d=0.01;
evalues=(d/2):d:(1-d/2);
cvalues=(d/2):d:(1-d/2); %% p, N are starting parameters
[C,E]=meshgrid(cvalues,evalues); %% Starting 10,000 combinations
B_t1000 = []; %% initializing B_t1000
B_t200= []; %% initializing B_t200
parfor k=1:iter
A_t1000= zeros(length(evalues),length(cvalues)); %%initializing A_t1000
A_t200 = zeros(length(evalues),length(cvalues)); %%initializing A_t200
for i=1:length(evalues)
for j=1:length(cvalues)
e=evalues(i); % starting point input for e for function file
c=cvalues(j); % starting point input for c for function file
[A_t1000, A_t200] = function (e,c,p,N,maxgen); %% calling a function to generate A_t1000 and A_t200
end
end
B_t1000 (1:length(evalues),1:length(cvalues),k) = A_t1000;
B_t200 (1:length(evalues),1:length(cvalues),k) = A_t1000;
end
我收到一条错误消息——“parfor 中的变量 B_t1000 无法分类”。我猜这与独立性和索引问题有关。
谁能帮我用 parfor 运行这段代码?
“Ne”和“maxgen”参数越大,仅“for”循环运行代码所需的时间就越长。目前较大的参数在没有 parfor 的情况下需要超过 30 小时才能运行。我想使用 parfor 显着减少这个时间。
有什么建议吗?谢谢!
【问题讨论】:
标签: matlab