了解多核,多处理器和MPI上的MATLAB

时间:2011-11-04 21:49:57

标签: matlab parallel-processing mpi

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

  • 当使用Parallel Computing Toolbox 时,MATLAB是否利用多个核心/受益?
  • 当使用PCT 时,MATLAB是否利用多个处理器/受益?
  • 使用MPI时,MATLAB是否使用PCT
  • 使用MPI
  • 时,MATLAB是否使用PCT

5 个答案:

答案 0 :(得分:7)

  

MATLAB在不使用时会利用/受益于多个核心   并行计算工具箱?

是。 Since 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), A\b (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文件也会受益。

  

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

据我所知。

  

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

是的,当您在群集上运行它时(尽管您也可以使用其他调度程序)。为此,您需要获得Matlab Distributed Computing Server许可证的许可证。我不知道本地调度程序使用什么体系结构(在本地计算机上运行并行作业时使用的体系结构);鉴于MPI功能是PCT的一部分,建议他们可以将其用于至少部分功能。 编辑:请参阅@Edric's answer for more details

答案 1 :(得分:5)

从@Jonas的详细答案中澄清并扩展几点:

  • PCT使用MPICH2的构建(这不是基础MATLAB附带的)。
  • MPI功能在本地调度程序下可用 - 在这种情况下,MPICH2的构建可以利用共享内存进行通信。
  • labSend / labReceive函数系列提供了围绕MPI_Send / MPI_Recv等的包装。

答案 2 :(得分:4)

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

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

MEX文件也可以用多个线程编写,在这种情况下,即使没有PCT,您也将使用多个核心。如果您遇到性能问题,重写一些热点,因为MEX往往是一个巨大的胜利。

答案 3 :(得分:1)

首先,答案主要是"不,但是......",正如@BenVoigt所解决的那样。 "但是......"部分来自Matlab使用的库。 Ben为BLAS提供了一个最值得注意的例子,你可以用支持多核或处理器的例子代替它,例如ATLAS,Intel或AMD版本,Goto BLAS或其他一些选项。

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

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

答案 4 :(得分:-1)

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

我不知道第3和第4个问题的答案。