Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用parallel.p​时出错;ool.consta​;nt/get-value MATLAB(并行计算工具箱)_Matlab - Fatal编程技术网

使用parallel.p​时出错;ool.consta​;nt/get-value MATLAB(并行计算工具箱)

使用parallel.p​时出错;ool.consta​;nt/get-value MATLAB(并行计算工具箱),matlab,Matlab,这是我的代码(不确定parfeval中的函数句柄)。我得到的错误在第11行。我不明白这个错误 poolobj=parpool('my_cluster',8); [up, op]=ndgri(1e-3:1e-2:1,1e-3:1e-2:1); up=reshape(up, [1,size(up,1)*size(up,2)]); up=reshape(up, [1,size(up,1)*size(up,2)]); z=rand(5,5e3); addAttachedFiles('<path t

这是我的代码(不确定parfeval中的函数句柄)。我得到的错误在第11行。我不明白这个错误

poolobj=parpool('my_cluster',8);
[up, op]=ndgri(1e-3:1e-2:1,1e-3:1e-2:1);
up=reshape(up, [1,size(up,1)*size(up,2)]);
up=reshape(up, [1,size(up,1)*size(up,2)]);
z=rand(5,5e3);
addAttachedFiles('<path to my function/cores_random.m');%%to add the function files to workers on the pool
C1=parallel.pool.Constant(z);%%use parallel.pool.Constant to copy these variables into workers
U2=parallel.pool.Constant(up);
O2=parallel.pool.Constant(op);

for i=1:size(up,2)
f1(i)=parfeval(poolobj,@cores_random,3,U2.value(i),O2.Value(i),C1.Value(1,:)); %%line 11
f2(i)=parfeval(poolobj,@cores_random,3,U2.value(i),O2.Value(i),C1.Value(2,:));
f3(i)=parfeval(poolobj,@cores_random,3,U2.value(i),O2.Value(i),C1.Value(3,:));
f4(i)=parfeval(poolobj,@cores_random,3,U2.value(i),O2.Value(i),C1.Value(4,:));
f5(i)=parfeval(poolobj,@cores_random,3,U2.value(i),O2.Value(i),C1.Value(5,:));
end 

for j=1:size(up,2):-1:1
    [idx1,u1,o1,ep1]=fetchNext(f1);
    [idx2,u2,o2,ep2]=fetchNext(f2);
    [idx3,u3,o3,ep3]=fetchNext(f3);
     [idx4,u4,o4,ep4]=fetchNext(f4);
     [idx5,u5,o5,ep5]=fetchNext(f5);
end
随机函数如下所示:

[uu,oo,ep]=cores_random(up,op,z)
%%doing some calculations here
%%z is of size 1*1e3 
%%up is scalar op is scalar 
end

正如错误消息所述,
parallel.pool.Constant
Value
属性仅在工作线程上可用。如前所述,您的
parfeval
请求正试图在客户端访问它。简而言之,您的代码如下所示:

c = parallel.pool.Constant(42);
f = parfeval(pool, @myFcn, 1, c.Value);
c = parallel.pool.Constant(42);
f = parfeval(pool, @(const) myFcn(const.Value), 1, c);
这迫使客户端在设置
parfeval
调用时计算
c.Value

您应该做的是将
常量
本身传递到
parfeval
请求中,然后访问workers上的
字段。一种方法是:

c = parallel.pool.Constant(42);
f = parfeval(pool, @myFcn, 1, c.Value);
c = parallel.pool.Constant(42);
f = parfeval(pool, @(const) myFcn(const.Value), 1, c);

这确保了
常量值
表达式仅对辅助对象进行计算。(或者,您可以修改
myFcn
,以了解它需要对其输入参数调用
const.Value

正如错误消息所述,
parallel.pool.Constant
Value
属性仅在worker上可用。如前所述,您的
parfeval
请求正试图在客户端访问它。简而言之,您的代码如下所示:

c = parallel.pool.Constant(42);
f = parfeval(pool, @myFcn, 1, c.Value);
c = parallel.pool.Constant(42);
f = parfeval(pool, @(const) myFcn(const.Value), 1, c);
这迫使客户端在设置
parfeval
调用时计算
c.Value

您应该做的是将
常量
本身传递到
parfeval
请求中,然后访问workers上的
字段。一种方法是:

c = parallel.pool.Constant(42);
f = parfeval(pool, @myFcn, 1, c.Value);
c = parallel.pool.Constant(42);
f = parfeval(pool, @(const) myFcn(const.Value), 1, c);
这确保了
常量值
表达式仅对辅助对象进行计算。(或者,您可以修改
myFcn
,以了解它需要对其输入参数调用
const.Value
。)