Программирование Matlab и GPU / CUDA - PullRequest
2 голосов
/ 14 сентября 2011

Мне нужно выполнить несколько независимых анализов для одного и того же набора данных. В частности, мне нужно выполнить пакеты анализа 100 glm (обобщенные линейные модели), и я подумал, чтобы воспользоваться моей видеокартой (GTX580).

Поскольку у меня есть доступ к Matlab и Parallel Computing Toolbox (и я плохо разбираюсь в C ++), я решил попробовать.

Я понимаю, что один GLM не идеален для параллельных вычислений, но, поскольку мне нужно запустить 100-200 параллельно, я подумал, что использование parfor может быть решением.

Моя проблема в том, что мне не ясно, какой подход я должен использовать. Я написал gpuArray-версию функции matlab glmfit, но использование parfor не имеет никаких преимуществ перед стандартным циклом for.

Это как-то связано с настройкой matlabpool? Мне даже не понятно, как настроить это, чтобы «видеть» карту GPU. По умолчанию это число ядер в процессоре (4 в моем случае), если я не ошибаюсь. Я совершенно не прав на подходе?

Любое предложение будет высоко оценено.

Редактировать

Спасибо. Я знаю о GPUmat и Jacket, и я мог бы начать писать на C без особых усилий, но я тестирую возможности вычислений на GPU для отдела, где все используют Matlab или R. Конечной целью будет кластер на основе C2050. и сервер распространения Matlab (или, по крайней мере, это был первый проект). Читая объявления от Mathworks, у меня сложилось впечатление, что параллельные вычисления возможны даже без навыков Си. Невозможно попросить исследователей в моем отделе изучать C, поэтому я предполагаю, что GPUmat и Jacket являются лучшими решениями, даже если ограничения достаточно велики, а поддержка нескольких часто используемых подпрограмм, таких как glm, отсутствует.

Как их можно связать с кластером? Они работают с какой-то системой распределения работы?

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Я бы порекомендовал вам попробовать GPUMat (бесплатно) или AccelerEyes Jacket (купить, но имеет бесплатную пробную версию) вместо Parallel Computing Toolbox. Панель инструментов не обладает такой функциональностью.

Чтобы получить максимальную производительность, вы, возможно, захотите изучить немного C (нет необходимости в C ++) и код на необработанном CUDA самостоятельно. Многие из этих высокоуровневых инструментов могут быть недостаточно умны в отношении того, как они управляют передачей памяти (вы можете потерять все свои вычислительные преимущества из-за ненужного перемещения данных по шине PCI-E).

2 голосов
/ 17 февраля 2012

Parfor поможет вам использовать несколько графических процессоров, но не один.Дело в том, что один GPU может выполнять только одну операцию одновременно, поэтому parfor на одном GPU или for на одном GPU даст точно такой же эффект (как вы видите).

Куртка имеет тенденцию кбыть более эффективным, поскольку он может объединять несколько операций и выполнять их более эффективно и имеет больше функций, но большинство отделов уже имеют параллельные вычислительные инструменты, а не оболочку, так что это может стать проблемой.Вы можете попробовать демо, чтобы проверить.

Нет опыта работы с gpumat.

Набор инструментов для параллельных вычислений улучшается, вам нужны некоторые большие матричные операции.Графические процессоры способны выполнять одно и то же несколько раз, поэтому вам нужно либо как-то объединить код в одну операцию, либо сделать каждую операцию достаточно большой.Мы говорим о необходимости, по крайней мере, ~ 10000 параллельных элементов, хотя это не набор матриц 1e4, а скорее большая матрица, содержащая как минимум 1e4 элемента.для эффективности требуется немного встроенного кода CUDA (он все еще довольно ограничен).Тем не менее, он лучше позволяет встроить ядра и преобразовывать код Matlab в ядра, что-то, что

...