了解MATLAB在多核、多处理器和MPI上的应用



关于MATLAB如何利用并行硬件,我有几个密切相关的问题。它们很短,所以我想最好把它们放在同一个帖子里:

  • 使用并行计算工具箱时,MATLAB是否利用/受益于多个内核?
  • 使用PCT时,MATLAB是否利用/受益于多个处理器?
  • 使用PCT时,MATLAB是否使用MPI ?
  • MATLAB在使用PCT时使用MPI吗?

当不使用时,MATLAB是否利用/受益于多个内核并行计算工具箱?

是的。自R2007a以来,越来越多的内置函数被重写为多线程(尽管多线程只在有益的情况下才会启动)。

Element Wise Functions and Expressions:
------------------------------------------------------------------------------------------------
Functions that speed up for double arrays > 20k elements 
1) 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)
2) Exponential: EXP(x), POW2(x), SQRT(x)
3) 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 
4) Trigonometric: HYPOT(x,y), TAND(x)
5) Complex: ABS(x)
6) Rounding and remainder: UNWRAP(x), CEIL(x), FIX(x), FLOOR(x), MOD(x,N), ROUND(x)
7) 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) 

1)Operators: X*Y (Matrix Multiply), X^N (Matrix Power)
2)Reduction Operations : MAX and MIN (Three Input), PROD, SUM
3) Matrix Analysis: DET(X), RCOND(X), HESS(X), EXPM(X)
4) Linear Equations: INV(X), LSCOV(X,x), LINSOLVE(X,Y), Ab (backslash)
5) Matrix Factorizations: LU(X), QR(X) for sparse matrix inputs
6) Other Operations: FFT and IFFT of multiple columns of data, FFTN, IFFTN, SORT, BSXFUN, GAMMA, GAMMALN, ERF,ERFC,ERFCX,ERFINV,ERFCINV, FILTER

对于以.m文件形式实现的代码,多个内核不起作用。

当然,多线程的mex-files也会受益。

MATLAB在不使用PCT时使用MPI吗?

我不知道。

MATLAB在使用PCT时是否使用MPI ?

是的,当您在集群上运行它时(尽管您也可以使用其他调度器)。为此,您需要Matlab分布式计算服务器许可证。我不知道本地调度器使用什么架构(当你在本地机器上运行并行作业时使用的架构);鉴于MPI功能是PCT的一部分,建议他们至少可以将其用于部分功能。编辑:查看@Edric的回答了解更多细节

澄清和扩展@Jonas详细回答中的几个观点:

  • PCT使用MPICH2的构建(这不是与基本MATLAB一起提供的)。
  • MPI函数在本地调度器下可用——在这种情况下,MPICH2的构建可以利用共享内存进行通信。
  • labSend/labReceive系列函数提供了对MPI_Send/MPI_Recv等的包装。

当不使用PCT时,MatLab一次只发出一个命令(单线程)。

然而,如果你有一个多线程的BLAS,你仍然可以从额外的内核中获益(而且它们是否都在单个处理器中并不特别重要)。

MEX文件也可以用多线程编写,在这种情况下,即使没有PCT,您也可以使用多个内核。如果您有性能问题,将一些热点重写为MEX通常是一个大赢家。

首先,正如@BenVoigt所说,答案大多是"不,但是…"。"但是…"部分来自Matlab使用的库。Ben给出了一个最著名的例子,用于BLAS,你可以用一个支持多核或处理器的代替它,如ATLAS,英特尔或AMD版本,Goto BLAS,或其他一些选项。

您还可以从Matlab调用到其他语言的代码,这些代码可以利用多个内核、处理器、计算机等。在过去,我从Matlab中调用R,并以这种方式利用支持多核处理的R包来使用多核。MPI也可以这样做。然而,随着扩展,您会发现越来越多的代码最终使用可以执行更多并行或分布式工作的语言(即R, Python, C, c++或Java等自由语言),而不是Matlab。

那么,Matlab是否从没有PCT的这种基础设施中受益?不直接。您在Matlab中的代码可以通过各种支持库从这些基础设施中受益吗?是的。

不使用PCT时,MATLAB仅使用一个核心/一个处理器。

我不知道第三题和第四题的答案