【问题标题】:Understanding MATLAB on multiple cores, multiple processors and MPI了解多核、多处理器和 MPI 上的 MATLAB
【发布时间】:2011-12-22 09:38:11
【问题描述】:

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

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

【问题讨论】:

  • 致投票结束问题的人。您介意详细说明我如何改进这个问题吗?为什么它被标记为离题?

标签: matlab parallel-processing mpi


【解决方案1】:

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 分布式计算服务器许可证。我不知道本地调度程序使用什么架构(在本地机器上运行并行作业时使用的架构);鉴于 MPI 功能是 PCT 的一部分,这表明他们可以将其用于至少部分功能。 编辑:见@Edric's answer for more details

【讨论】:

  • 谢谢@Jonas。你怎么知道 MATLAB 在使用 PCT 时使用了 MPI?只是想知道..
  • @intrpc:我不知道。我已经澄清了我的答案。
  • 谢谢乔纳斯。我已经接受了你的回答。我应该注意到@Edric 进一步澄清了这个问题。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 自 2007 年以来,一些 Matlab 内置函数已实现多线程。请参阅 my answer
    • @Jonas:这些是 BLAS 的一部分,不是吗?很确定我的答案和迭代器是正确的,尽管其中一些库确实提供了“开箱即用”的并行操作,但从 M 文件的角度来看,它们只是“内置”的,它们仍然不是外部库由 MathWorks 开发。
    • 有些是 BLAS 的一部分,有些是其他库 (FFT) 的一部分,有些不是两者的一部分,例如 bsxfun
    【解决方案4】:

    首先,正如@BenVoigt 所说,答案大多是“不,但是……”。 “但是...”部分来自 Matlab 使用的库。 Ben 为 BLAS 提供了最著名的示例之一,您可以将其替换为支持多核或处理器的示例,例如 ATLAS、Intel 或 AMD 版本、Goto BLAS 或其他一些选项。

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

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      猜你喜欢
      • 2015-12-29
      • 2012-03-26
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 2012-04-22
      • 2020-02-26
      • 1970-01-01
      • 2020-09-05
      相关资源
      最近更新 更多