Matlab 如何解决PALOOP中的广播变量问题?
我在matlab中创建了for-loop-parralel,但是我得到警告,我的一些数组被广播,这会导致不必要的通信开销。我是matlab新手,不知道如何解决这个问题。有人能帮我吗?Matlab 如何解决PALOOP中的广播变量问题?,matlab,Matlab,我在matlab中创建了for-loop-parralel,但是我得到警告,我的一些数组被广播,这会导致不必要的通信开销。我是matlab新手,不知道如何解决这个问题。有人能帮我吗? A和Y在此代码中广播 parfor k=1:length(gamma) Lambda=gamma(k); tmp=zeros(nfolds,Num_Tasks); for p=1:length(omega) OmegA= omega(p) for Fol
A
和Y
在此代码中广播
parfor k=1:length(gamma)
Lambda=gamma(k);
tmp=zeros(nfolds,Num_Tasks);
for p=1:length(omega)
OmegA= omega(p)
for Fold=1:size(Fold_indices,2)
% Creat train and test fold
A_Train=A(logical(Fold_indices(:,Fold)),1:end); # A is broadcasted
%size(A_Train)
Y_Train=Y(logical(Fold_indices(:,Fold)),1:Num_Tasks); # Y is broadcated
A_Test=A(~logical(Fold_indices(:,Fold)),1:end);
Y_Test=Y(~logical(Fold_indices(:,Fold)),1:Num_Tasks);
coff=Estimate_x(Y_Train,A_Train,Lambda,OmegA,Binding_matrix) ;
% Do the prediction on Kth f;old and compute the error
% coff
%sum((A_Test*coff-Y_Test).^2) ./ size(A_Test,1)
tmp(Fold,1:end)=sum((A_Test*coff-Y_Test).^2) ./ size(A_Test,1);
tmp;
%Coefficents{:,Fold}=coff;
coff
end
In_Fold_Error{1,p}=tmp;
%In_Fold_Error{2,k}= Lambda;
Coefficents{:,p}=coff;
end
CVErr_twoparam{1,k}=In_Fold_Error;
Coefficents_twoparam=Coefficents;
end
除非您可以直接在
parfor
循环中计算A\u列
和Y\u列
,而不是使用下标从A
和Y
获取它们的值,否则您将无能为力。您的信息源是唯一的,因此这些值将被广播
如果您有足够的内存,最好将
a_列
和Y_列
计算为正常for
中的矩阵单元数组,然后在parfor
中使用这些顺序预计算值。这样,您不会将整个矩阵A
和Y
发送给员工。请编辑您的问题,并添加准确的错误消息或警告(逐字)