Насколько эффективна встроенная в MATLAB параллельная обработка и назначение ядер? - PullRequest
3 голосов
/ 23 ноября 2010

Я планирую купить рабочую станцию ​​для запуска моих сценариев анализа данных Matlab. Я планирую увеличить системную память с 6 ГБ до 24 ГБ. Я думаю о том, стоит ли мне покупать 6-ядерный процессор, двойной 4-ядерный или двойной 6-ядерный. (Сейчас у меня 2-х ядерный процессор).

Прямо сейчас у меня есть значительные задержки в том, что я считаю встроенной системой управления памятью MATLAB. (Например, выполнение функции займет 30 секунд, но tic и toc показывают, что последняя строка кода выполняется за 18 секунд). У меня также есть некоторые задержки из-за арифметической обработки больших блоков данных, но я не делаю действительно тяжелых вычислений.

На данный момент я не желаю / не могу явно распараллелить мой код. Я знаю, что некоторые люди имеют большой опыт работы с внутренними компонентами MATLAB, поэтому я надеюсь, что кто-то может подсказать мне, насколько эффективно MATLAB использует несколько ядер. Будет ли он запускать сборщик мусора в отдельном потоке от вычислительных процессов? Какие операции автоматически распараллеливаются?

Ответы [ 2 ]

3 голосов
/ 23 ноября 2010

У меня есть некоторый опыт работы с Parallels Compute Toolbox от Matlab, который, как мне кажется, имеет в виду то, на что вы ссылаетесь, а не простое использование Matlab нескольких потоков для встроенных функций.

Parallel Matlab - не серебряная пуля, вы не получите магического увеличения скорости в 8 раз на 8-ядерном или в 12 раз на 12-ядерном, вам придется приложить некоторые усилия. Однако, как человек, который проводит большую часть своего времени в параллельных программах на Фортране, я бы сказал, что Matlab обеспечивает гораздо более короткий путь к хорошо распараллеливаемой программе, чем Fortran + OpenMP или MPI, таким же образом и в той же степени, что и Matlab. быстрее разрабатывать, чем Fortran. Но ваши проблемы как программиста остаются очень похожими:

  • (пере) разработка вашей программы для выявления параллелизма; имейте в виду, что лучший последовательный алгоритм не всегда лучший после распараллеливания; если у вас несколько ядер, то подход «грубой силы», который был настолько неэлегатным и дорогостоящим на одном ядре, может быть лучшим вариантом;
  • распределение нагрузки: убедитесь, что каждое ядро ​​выполняет примерно одинаковый объем работы;
  • минимизация издержек распараллеливания: которая включает в себя как передачу сообщений (если так происходит), так и время запуска и завершения потока / процесса; более эффективно иметь 4 потока, работающих непрерывно с периодами простоя, чем запускать и останавливать их каждый раз, когда ваша программа попадает в последовательный раздел;
  • сведение к минимуму конкуренции за разделяемую память (если это так), как для предотвращения ошибок, так и для максимизации скорости;
  • не слишком зацикливайтесь на параллельном ускорении, если программа достаточно быстра для ваших целей и достаточно быстра, цель вашей работы - анализ данных, а не параллельная оптимизация программы (это моя работа!)

Matlab PCT предоставляет необходимые инструменты, но вам нужно закатать рукава. Что касается конкретного вопроса о том, где работает сборщик мусора, я не знаю; Я предлагаю вам узнать.

Какие операции автоматически распараллеливаются? Я понимаю, что это означает что функции Matlab являются многопоточными? и ответом будет все больше и больше , но для последней ситуации вам нужно либо протестировать (посмотрите диспетчер задач или как бы это ни называлось на вашем компьютере) или прочитайте документацию.

Лично в вашей ситуации я бы выбрал двухъядерные 6-ядерные процессоры и был бы счастлив, если бы я получил ускорение в 6 раз в течение разумного времени - трудно быть точным о том, как долго это происходит, не зная вашего кода как и вы.

1 голос
/ 23 ноября 2010

Следуя предложению Amro, я посмотрел этот документ поддержки MATLAB:

Какие функции MATLAB выигрывают от многопоточных вычислений?

а также

Как выбрать компьютерное оборудование, которое наилучшим образом оптимизирует производительность MATLAB?

и

Выбор оборудования для использования с MATLAB®

В результате получается, что ваш пробег может отличаться. По сути, кажется, что определенные функции являются многопоточными, а список является изменяющейся функцией времени.

Пока что я получу только один шестиядерный процессор, потому что существует значительная разница в цене, и кажется, что есть ограничение на скорость из-за наличия нескольких ядер без оптимизации рук. Я обязательно куплю видеокарту NVIDIA, чтобы воспользоваться поддержкой Matlab для операций с графическим процессором, согласно предложению Михаила и документации по Matlab GPU

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...