如何正确使用 MATLAB 中的 parfor 函数?

关注者
5
被浏览
5,789
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

parfor 在 MATLAB 中用于并行计算,可以加速循环运算。使用 parfor 函数需要注意以下几点:

1. 确保循环体中语句是独立的,没有数据依赖关系。parfor 中的循环体会被并行执行,如果语句之间有数据依赖,结果可能不正确。

2. 尽量使用匿名函数和子函数,减少全局变量。parfor 中的每个循环体都有自己的工作空间,如果使用全局变量可能引起数据竞争的问题。

3. 禁止在循环体中添加或删除数组,这会导致数据混乱。只能对数组的元素进行操作。

4. 循环迭代次数比较多时,parfor 才能体现出加速作用。一般迭代次数超过 10 次且每个循环耗时 0.1s 以上,使用 parfor 才会有意义。

5. 如果有条件判断分支较多,parfor 效果不明显。这时使用 spmd 语句可能会有加速作用。

6. 调用 CUDA 函数可以获得最高加速比,这需要安装 MATLAB 并行计算工具箱。

7. 根据计算机 CPU 核心数合理设置并行数。通常取 2-4 倍于 CPU 核心数,但不宜过大,以免引入过多线程带来的损耗。

下面是一个使用 parfor 的示例:

matlab
data = rand(1000, 50);  % 1000 个 50 维向量
results = zeros(1000, 1);  % 存储结果
parfor i = 1:1000
    results(i) = norm(data(i, :));  % 求向量的范数
time_parfor = toc  % 计算 parfor 用时
% 使用 for 循环对比
results = zeros(1000, 1);