并行算法的性能度量——函数句柄在并行程序分析中的应用(2-4)
程序员文章站
2024-02-26 19:40:34
...
函数句柄在并行程序分析中的应用
由前面的内容可以知道,parfor并行效率除了与数据通信有关的大小有关,也与循环体执行的操作本身有关。
如果Matlab并行计算池中的worker数目已经知道,那么数据传输量一般比较容易测算。但是对parfor循环体的操作进行分析一般比较困难。
为了程序的可读性和可维护性,循环执行的操作一般都是通过函数来实现的。如果对每个函数都编写测试函数的话,工作量比较大,而且容易出错。所以,很多时候都是通过使用函数句柄来解决这个问题。
调用格式如下:
functionname(输入参数,hfunc,flag)
function [t1,t2]=partry29(N,M,hfunc,flag)
%N为循环次数;M为矩阵大小;
%hfunc为函数句柄;flag为标识(输入数据的格式)
if nargin==2
aaa@qq.com;
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'));
运行结果