Matlab多线程运算的问题

简介:
上次说到,Matlab R2006a开始使用Intel MKL,只要设好OMP_NUM_THREADS这个环境变量,即可以BLAS Level 3的运算在任意线程数下。然而,尽管设定的线程数和CPU核的数目相同,但这样也并不能保证能提升计算效率。主要的原因在于建立线程也是需要时间的。如果你的任务只要0.0001秒就能算完,但建立线程也要用0.0001秒,那就根本没有必要把该任务多线程化。
麻烦的是,当我们设定好环境变量OMP_NUM_THREADS后启动Matlab,那么这个进程运行的线程数就定下来了,不能中途改变。于是,我们没有办法根据具体问题随时改变使用的线程数,使得在我们的程序中,能提升某部份的效率,但另一部份的效率却可能降低。
我们可以对矩阵乘法做一点测试,在不同的线性数下,看看不同的矩阵大小,其乘法的效率如何。首先编写程序如下:
THREADS = 2;     线程数
N = 2000000;     % N /  矩阵大小 = 每种维度的矩阵要做乘法的次数
设定测试的矩阵大小
MN = 50;
step = 2;
x = 10 : step : MN;
n = max(size(x));
T = zeros(2, n);     用作存放结果
for  i = 1 : n
    M1 = zeros(x(i));
    M2 = zeros(x(i));
    M1 = rand(x(i));
    M2 = rand(x(i));
    t = cputime;     准备计时
     for  j = 1 : N / x(i)     令计算次数随矩阵增大而减少
        tmp = M1 * M2;
     end
    T(:, i) = [x(i) (cputime - t) / THREADS];    存放结果
end
可以在不同线程下计算,把T存起来。接着可以比较单线程下的计算结果T1和双线程下计算的结果T2,有:
>> T = T1(2, :) ./ T2(2, :);
>> plot(T1(1, :), T, 'k')

可得出下图。说明当矩阵大小约为2030时,双线程反而令矩阵乘法效率降低。当矩阵更小时,是否多线程效率更好,我不能保证,应该要作更仔细的验算。

本文转自博客园知识天地的博客,原文链接:Matlab多线程运算的问题,如需转载请自行联系原博主。


相关文章
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
|
1月前
|
Serverless
MATLAB中的矩阵与向量运算
【10月更文挑战第2天】本文全面介绍了MATLAB中的矩阵与向量运算,包括基本操作、加减乘除、转置、逆矩阵、行列式及各种矩阵分解方法。通过丰富的代码示例,展示了如何利用矩阵运算解决线性方程组、最小二乘法拟合、动态系统模拟和电路分析等问题。掌握这些运算不仅提升编程效率,还能在工程计算和科学研究中发挥重要作用。
39 1
|
4月前
|
Python
Python线程是操作系统能够进行运算的最小单位
【7月更文挑战第18天】Python线程是操作系统能够进行运算的最小单位
33 1
|
6月前
|
Serverless 索引
matlab--------矩阵的运算
matlab--------矩阵的运算
55 1
matlab--------矩阵的运算
|
数据可视化 索引
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理(二)
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理
107 0
|
6月前
|
数据可视化
第七章:MATLAB基本运算符号解析及案例详解
第七章:MATLAB基本运算符号解析及案例详解
100 1
专题一MATLAB基础知识——1.6MATLAB基本运算
专题一MATLAB基础知识——1.6MATLAB基本运算
74 0
|
算法 文件存储
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理(三)
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理
165 0
|
存储 人工智能 索引
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理(一)
MATLAB--控制语句--数组操作--符号运算--绘图--文件和数据的处理
150 0
下一篇
无影云桌面