

Matlab 的并行计算 « 阅微堂
source link: https://zhiqiang.org/coding/parallel-computing-in-matlab.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Matlab 的并行计算
1. 并行计算
以下对并行计算的个人理解受到较多质疑,删除之。
~~1、并行计算是指将计算任务分成几块,分别让多个 CPU 同时跑,这样运行时间就能缩短若干倍。在一个多核的电脑上,要想看计算是不是并行的,只需看 CPU 占用是不是 100%。如果两个 CPU ,串行的任务至多占用 50%的 CPU。~~
~~2、如果并行计算用到的 CPU 属于不同的服务器时,有另一个称呼——分布式计算。~~
~~3、要让多线程并行计算效率更高,电脑的 CPU 必须在物理上是多核的,单核 CPU 搞多线程,只不过在线程之间跳来跳去,不会算得更快(单核的多线程技术只要是让用户体验更好)。~~
~~4、如果任务可以分为独立的几块,将任务并行化和分布式化都是不难的。但如果任务块之间存在数据交换,那么将任务并行化需要很多干预,因为有些任务计算地快、有些计算慢,这样任务之间需要互相等待对方的数据。~~通信复杂性理论的起源之一就是从并行计算任务之间调度数据的优化。
2. Matlab 自动使用多核 CPU
根据Is it possible for one session of MATLAB to take advantage of multiple processors/cores?里的描述:
从 MATLAB 7.3 (R2006b)开始,不需要用户干涉, Matlab 的某些矩阵操作会自动使用多个 CPU ,主要是 Matlab 所采用的 BLAS (Basic Linear Algebra Subroutines)开始支持多线程。BLAS 里的操作包括矩阵乘法、求特征根等。
从 MATLAB 7.4 (R2007a)开始, Matlab 开始提供对某些操作的多线性支持,主要是 element-wise 的数值计算,比如 sin(A)、A.*log(A)。
3. 什么函数和操作会自动使用多线程
根据文档Which MATLAB functions benefit from multithreaded computation?,在 Matlab 决定是否使用多线程计算时,主要基于以下考虑:
1、任务可以被分解为若干可同时计算的任务块,并且任务之间不需要进行通讯或者通讯量很小。
2、数据量较大。
3、任务不会被内存吞吐速度所限制。比如 eigs 函数就不会分解为多线程,因为它的计算更多受制于内存吞吐速度( via Why is EIGS not multithreaded in MATLAB 7.8 (R2009a)?)。
具体说来下列操作和函数将使用多线程(不完全)
Element Wise Functions and Expressions:
- Functions that speed up for double arrays > 20k elements
- Trigonometric: ACOS(x), ACOSH(x), ASIN(x), ASINH(x), ATAN(x), ATAND(x), ATANH(x), COS(x), COSH(x), SIN(x), SINH(x), TAN(x), TANH(x)
- Exponential: EXP(x), POW2(x), SQRT(x)
- Operators: x.^y : For Example: 3*x.^3+2*x.^2+4*x +6, sqrt(tan(x).*sin(x).*3+8);
- Functions that speed up for double arrays > 200k elements
- Trigonometric: HYPOT(x,y), TAND(x)
- Complex: ABS(x)
- Rounding and remainder: UNWRAP(x), CEIL(x), FIX(x), FLOOR(x), MOD(x,N), ROUND(x)
- Basic and array operations: LOGICAL(X), ISINF(X), ISNAN(X), INT8(X), INT16(X), INT32(X)
Linear Algebra Functions:
- Functions that speed up for double arrays > 40k elements (200 square)
- Operators: X*Y (Matrix Multiply), X^N (Matrix Power)
- Reduction Operations : MAX and MIN (Three Input), PROD, SUM
- Matrix Analysis: DET(X), RCOND(X), HESS(X), EXPM(X)
- Linear Equations: INV(X), LSCOV(X,x), LINSOLVE(X,Y), A\b (backslash)
- Matrix Factorizations: LU(X), QR(X) for sparse matrix inputs
- Other Operations: FFT and IFFT of multiple columns of data, FFTN, IFFTN, SORT, BSXFUN, GAMMA, GAMMALN, ERF,ERFC,ERFCX,ERFINV,ERFCINV, FILTER
- FFT, FFT2, FFTN, IFFT, IFFT2, IFFTN, PROD, SUM, MAX, MIN ( Functions that have been multithreaded in MATLAB 7.8 (R2009a))
- SORT, BSXFUN, MLDIVIDE for sparse matrix input, QR for sparse matrix input,FILTER, GAMMA, GAMMALN, ERF, ERFC,ERFCX,ERFINV, ERFCINV (Functions that have been multi-threaded in MATLAB 7.9(R2009b))
4. 编写并行程序
除了上面提到的内置函数和表达式的并行计算外,其余用户代码都是串行的,除非用户使用 Parallel Computing Toolbox (在 R2008a 之前也叫做 Distributed Computing Toolbox ,当时只支持分布式计算)。下面是一个简单的并行程序
Matlabpool 2 A = cell(1, 10); parfor i = 1:10 A{i} = eigs(rand(1000)); end Matlabpool close
需要注意,除非循环内计算量较大,不要使用 parfor ,否则会得不偿失。
而且 parfor 有比较多的限制条件,并不是所有 parfor 里的 statement 都会并行计算,具体情况可 docs parfor。
Q. E. D.
Recommend
-
18
阅微基因C轮融资落定 盈科资本生物医药版图再扩张 本轮融资将主要用于多基因联检检测产品及整体解决方案的研发及业务拓展,全面布局临床检测、法医DNA鉴定及工业领域的基因检测应用场景。 近日,北京阅微基因技术股份有限公司(...
-
7
安装和设置 windows terminal 作者: 张志强 ,...
-
9
Matlab 开发准则 作者: 张志强 , 发表于 2011-...
-
7
1. ubuntu 上安装 talib 的 C 包 下面的安装地址可在https://github.com/mrjbq7/ta-lib#troubleshooting上找最新的: wget http://prdownloads.sourceforge.net/ta-lib...
-
8
最近写文档和写博客都开始用 markdown ,其中博客用得是Pelican,文档用Mkdocs。它们俩都用python-markdown模块
-
7
阅微堂回归以及独立博客的进化和退化 作者: 张志强 ...
-
5
1. 绝对路径引入 Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止。下面命令可以查看当前的搜索路径: import sys print(sys.path) sys.path的初始值来源于两个(其实还有...
-
7
祭奠 Google Reader 作者: 张志强 , 发表于 20...
-
5
windows terminal 连 SSH 后无法输入中文标点符号 作者: 张志强 ...
-
6
Matlab 的 for 循环 作者: 张志强 , 发表于 20...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK