У меня есть некоторый опыт работы с Parallels Compute Toolbox от Matlab, который, как мне кажется, имеет в виду то, на что вы ссылаетесь, а не простое использование Matlab нескольких потоков для встроенных функций.
Parallel Matlab - не серебряная пуля, вы не получите магического увеличения скорости в 8 раз на 8-ядерном или в 12 раз на 12-ядерном, вам придется приложить некоторые усилия. Однако, как человек, который проводит большую часть своего времени в параллельных программах на Фортране, я бы сказал, что Matlab обеспечивает гораздо более короткий путь к хорошо распараллеливаемой программе, чем Fortran + OpenMP или MPI, таким же образом и в той же степени, что и Matlab. быстрее разрабатывать, чем Fortran. Но ваши проблемы как программиста остаются очень похожими:
- (пере) разработка вашей программы для выявления параллелизма; имейте в виду, что лучший последовательный алгоритм не всегда лучший после распараллеливания; если у вас несколько ядер, то подход «грубой силы», который был настолько неэлегатным и дорогостоящим на одном ядре, может быть лучшим вариантом;
- распределение нагрузки: убедитесь, что каждое ядро выполняет примерно одинаковый объем работы;
- минимизация издержек распараллеливания: которая включает в себя как передачу сообщений (если так происходит), так и время запуска и завершения потока / процесса; более эффективно иметь 4 потока, работающих непрерывно с периодами простоя, чем запускать и останавливать их каждый раз, когда ваша программа попадает в последовательный раздел;
- сведение к минимуму конкуренции за разделяемую память (если это так), как для предотвращения ошибок, так и для максимизации скорости;
- не слишком зацикливайтесь на параллельном ускорении, если программа достаточно быстра для ваших целей и достаточно быстра, цель вашей работы - анализ данных, а не параллельная оптимизация программы (это моя работа!)
Matlab PCT предоставляет необходимые инструменты, но вам нужно закатать рукава. Что касается конкретного вопроса о том, где работает сборщик мусора, я не знаю; Я предлагаю вам узнать.
Какие операции автоматически распараллеливаются? Я понимаю, что это означает что функции Matlab являются многопоточными? и ответом будет все больше и больше , но для последней ситуации вам нужно либо протестировать (посмотрите диспетчер задач или как бы это ни называлось на вашем компьютере) или прочитайте документацию.
Лично в вашей ситуации я бы выбрал двухъядерные 6-ядерные процессоры и был бы счастлив, если бы я получил ускорение в 6 раз в течение разумного времени - трудно быть точным о том, как долго это происходит, не зная вашего кода как и вы.