函数句柄在并行程序分析中的应用

函数句柄在并行程序分析中的应用

由前面的内容可以知道,parfor并行效率除了与数据通信有关的大小有关,也与循环体执行的操作本身有关。

如果Matlab并行计算池中的worker数目已经知道,那么数据传输量一般比较容易测算。但是对parfor循环体的操作进行分析一般比较困难。

为了程序的可读性和可维护性,循环执行的操作一般都是通过函数来实现的。如果对每个函数都编写测试函数的话,工作量比较大,而且容易出错。所以,很多时候都是通过使用函数句柄来解决这个问题。

调用格式如下:    

functionname(输入参数,hfunc,flag)    

function [t1,t2]=partry29(N,M,hfunc,flag)
%N为循环次数;M为矩阵大小;
%hfunc为函数句柄;flag为标识(输入数据的格式)
if nargin==2                      
   hfunc=@eig;                    
   flag='matrix';               
end
if nargin==3
   flag='matrix';
end
data=cell(1,N);
for kk=1:N
    data{kk}=rand(M);
end
tic;
mypool=parpool;
parfor ii=1:N
       c1(:,ii)=eig(data{ii});
end
t1=toc;
display(strcat('function:',func2str(hfunc),':','parfor:',num2str(t1),'seconds'));    
delete(mypool)
tic;      
for ii=1:N
    c1(:,ii)=eig(data{ii});
end
t2=toc;
display(strcat('function:',func2str(hfunc),':' ,'for:',num2str(t2),'seconds'));

运行结果 

发布了152 篇原创文章 · 获赞 124 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_44762986/article/details/104723688