Понимание MATLAB на нескольких ядрах, нескольких процессорах и MPI - PullRequest
8 голосов
/ 05 ноября 2011

У меня есть несколько тесно связанных вопросов о том, как MATLAB использует преимущества параллельного оборудования.Они короткие, поэтому я подумал, что было бы лучше поместить их в один и тот же пост:

  • Использует ли MATLAB / получает выгоду от нескольких ядер, когда не при использовании ParallelComputing Toolbox ?
  • Использует ли MATLAB преимущества / выгоды от нескольких процессоров, когда не с использованием PCT ?
  • Использует ли MATLAB MPI когда не с использованием PCT ?
  • Использует ли MATLAB MPI при использовании PCT ?

Ответы [ 5 ]

7 голосов
/ 07 ноября 2011

Использует ли MATLAB преимущества / выгоду от нескольких ядер, если не используется Parallel Computing Toolbox?

Да. С 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 MPI, когда не используется PCT?

Не в моих силах.

Использует ли MATLAB MPI при использовании PCT?

Да, когда вы запускаете его в кластере (хотя вы можете использовать и другие планировщики).Для этого вам необходима лицензия на лицензию Matlab Distributed Computing Server.Я не знаю, какую архитектуру использует локальный планировщик (тот, который вы используете при выполнении параллельных заданий на локальном компьютере);учитывая, что функции MPI являются частью PCT, предполагается, что они могут использовать его как минимум для части функциональности. РЕДАКТИРОВАТЬ : Подробнее см. @ Edric's answer

5 голосов
/ 07 ноября 2011

Чтобы уточнить и расширить пару моментов из подробного ответа @Jonas:

  • PCT использует сборку MPICH2 (она не поставляется с базовой MATLAB).
  • Функции MPI доступны в локальном планировщике - в этом случае сборка MPICH2 может использовать совместно используемую память для связи.
  • Семейство функций labSend / labReceive представляет оболочку для MPI_Send / MPI_Recv и т. Д.
4 голосов
/ 05 ноября 2011

Когда не используется PCT, MatLab одновременно выдает только одну команду (однопоточную).

Однако, если у вас есть многопоточный BLAS, вы все равно могли бы извлечь выгоду из дополнительных ядер (и не имеет особого значения, все ли они в одном процессоре или нет).

MEX-файлы также могут быть записаны в несколько потоков, и в этом случае вы будете использовать несколько ядер даже без PCT. Если у вас есть проблемы с производительностью, переписывание некоторых горячих точек как MEX часто является большой победой.

1 голос
/ 06 ноября 2011

Во-первых, ответы в основном "Нет, но ...", как обратился @BenVoigt.Часть "но ..." происходит из библиотек, используемых Matlab.Один из наиболее ярких примеров был приведен Беном для BLAS, и вы можете заменить его на тот, который поддерживает несколько ядер или процессоров, таких как ATLAS, версии Intel или AMD, Goto BLAS или некоторые другие варианты.

Вы также можете вызывать из Matlab код на других языках, которые могут использовать несколько ядер, процессоров, компьютеров и т. Д. В прошлом я вызывал R из Matlab и таким образом использовал несколько ядер:использование R пакетов, которые поддерживают многоядерную обработку.То же самое можно сделать с MPI.Однако, когда вы масштабируете, вы обнаружите, что все больше и больше вашего кода оказывается на языке, который может выполнять больше параллельной или распределенной работы (т.е. свободный язык, такой как R, Python, C, C ++или Java), а не в Matlab.

Итак, получает ли Matlab выгоду от такой инфраструктуры без PCT?Не напрямую.Может ли ваш код в Matlab извлечь выгоду из такой инфраструктуры через различные вспомогательные библиотеки?Да.

0 голосов
/ 05 ноября 2011

Когда не используется PCT, MATLAB использует только одно ядро ​​/ один процессор.

Я не знаю ответов на 3-й и 4-й вопросы.

...