目录
1.1并行运算机制以及parfor的应用
MATLAB中的并行运算可以通过使用"parfor"函数来实现。"parfor"函数是"for"循环的并行版本,它可以在多个处理器核心上同时执行循环迭代,从而提高运算速度。以下是在MATLAB中进行并行运算的一些基本步骤和注意事项:
- 确保你有使用MATLAB的并行计算工具箱(Parallel Computing Toolbox)。"parfor"函数是这个工具箱的一部分。
- 编写使用"parfor"函数的代码。与普通的"for"循环相比,"parfor"循环中的变量不需要是全局变量,因此你不需要在循环之前声明变量。
- 在"parfor"循环中,每个迭代都是独立执行的,这意味着你可以在不同的处理器核心上同时执行它们。
- "parfor"函数会自动进行循环并行化,并将迭代分配给处理器核心。然而,某些操作可能会阻止并行化,例如使用大量的内存或进行大量的输入/输出操作。
- 当你使用"parfor"函数时,需要注意一些事项。首先,要避免在循环中修改数据结构,因为这可能会导致数据不一致。其次,要避免在循环中使用大量的输入/输出操作,因为这会降低并行化的效率。
下面是一个使用"parfor"函数的简单示例:
% 定义一个包含大量数据的数组
data = rand(1000, 1000);
% 使用parfor进行并行计算
parfor i = 1:10
sum = sum(data(:, i));
disp(sum);
end
在这个示例中,我们使用"parfor"函数对数组的每一列进行求和,并将结果输出到控制台。由于这个任务是并行执行的,因此求和操作的速度会更快。
需要注意的是,"parfor"函数并不总是能够提高计算速度。实际上,如果任务的计算量很小,或者处理器核心之间的通信开销很大,那么使用"parfor"函数可能会导致性能下降。在这种情况下,你可能需要根据你的具体任务来评估并行化是否有助于提高性能。
1.2 并行机制的执行效率统计
在前一个小技巧学习中,我们学习了如何统计程序运行的时间。
【小技巧】在matlab中如何精确统计一段程序的运行时间_fpga和matlab的博客-CSDN博客_matlab执行一条指令的时间
我们先执行如下的程序:
clc;
clear;
close all;
idx=0;
tic;
for j = 1:1:100000000
if mod(j,10000)==1
j
end
idx=idx+1;
end
times = toc;
idx=0;
tic;
parfor j = 1:1:100000000
if mod(j,10000)==1
j
end
idx=idx+1;
end
times2 = toc;
figure;
bar([times,times2]);
运行时间如下:
我们可以看到,采用parfor之后,系统的运行时间将大大减少。如果完成之后,想关闭并行运算机制,则点击:
点击shutdown,就可以关闭并行运行机制了。