可能加速ischange函数parfor

4次浏览(最近30天)
米甲
米甲 2020年10月15日
编辑: 米甲 2020年10月15日
我完全理解,对标准MATLAB函数的任何修改都是非常危险的,但我发现了如何在输入数据为矩阵形式,并通过简单的并行化(如果并行计算工具箱可用)沿列(dim =1)或行(dim =2)执行更改点分析的情况下显著加速“ischange”函数的可能性。
ischange的修改。M -> ischange_parallel。M通过简单替换for -> parfor:
% ischange_parallel。米(R2020b)
对每一列应用ischange算法
如果Nargout > 1
S1 = b;
S2 = b;
parfor(k = 1:ncolsA,numWorkers)
[特遣部队(:,k), S1 (:, k), S2 (:, k)] = ischangeArrayColumn (B (:, k),参数{:});第166行
结束
其他的
parfor(k = 1:ncolsA,numWorkers)
TF(:,k) = ischangeArrayColumn(B(:,k),args{:});第170行
结束
结束
其中numWorkers指定所需的工人数量。对于numWorkers = 0, ischange函数的行为完全不变。
这种修改带来了 重要的 加速(取决于可用工人的数量)。
>> A =兰特(1e5,100);
>> tic;[TF,S1,S2] = ischange(A,“线性”,1,“阈值”、。1);toc
运行时间是36.320765秒。
>> tic;[TF_,S1_,S2_] = ischange_parallel(A,“线性”,1,“阈值”、。1);toc
运行时间是5.818893秒。
> > isequal ([TF, S1, S2], [TF_, S1_ S2_])
ans =
逻辑
1
> > maxNumCompThreads
ans =
8
我认为还有很多其他MATLAB函数可以从并行化中显著受益,但只要并行计算工具包仍然是一个额外的并行扩展,就没有机会加速这些函数。顺便说一句,也许是时候考虑将并行工具箱功能整合到MATLAB中了?
有什么意见或建议吗?

答案(0)

类别

了解更多编程工具帮助中心而且文件交换

下载188bet金宝搏


释放

R2020b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!