2010-07-03 9 views
1

У меня есть проект, который требует много обработки изображений и хотел бы добавить поддержку GPU для ускорения работы.matlab общие библиотеки C++ и OpenCL

Мне было интересно, скомпилировал ли мой matlab в C++-общую библиотеку и вызвал ее из OpenCL-программы, означает ли это, что код matlab будет запущен на GPU?

ответ

1

Моя собственная (полуобразованная) догадка заключается в том, что вы найдете это очень трудным занятием. Но другие пробили тот же путь. This paper может быть хорошим местом для начала исследования. И Googling поднялся Accelereyes и пару ссылок на элементы на Mathworks File Exchange, которые вы, возможно, захотите проследить.

+1

Accelereyes только для карт NVIDIA, я пользуюсь ATI Проект iptatiproject кажется многообещающим, я проверю его благодаря – omarzouk

+1

yikes !!!! как я боялся, мне придется писать алгоритмы вручную, чтобы иметь возможность делать это с помощью OpenCL. Я имею в виду, что мне будет проще использовать C++, а не matlab, потому что все, что у меня осталось от matlab, - это всего лишь некоторые матричные структуры данных: D , хотя мне было интересно, как Accelereyes сделали свою обертку для nvidia hmmm – omarzouk

+0

Accelereyes is просто оболочка, которая перегружает базовые операторы матриц, такие как умножение, инверсия и т. д., чтобы они выполнялись на графическом процессоре, это, конечно же, дает очень хороший импульс, но это не самый эффективный способ делать то, что сами алгоритмы не записаны чтобы в полной мере использовать параллельные возможности графического процессора, например, использовать параллельные алгоритмы сортировки вместо итеративных или рекурсивных, но это означает, что полная переработка библиотеки matlab: D – omarzouk

0

Parallel Computing Toolbox в предстоящем выпуске R2010b (с 1 сентября) поддерживает обработку GPU для нескольких функций. К сожалению, он поддерживает только CUDA (версия 1.3 и более поздняя версия), поэтому с видеокартой ATI вам не повезло. Тем не менее, вы можете просто захотеть приобрести выделенный графический процессор.

1

Все в куртке написано в c/C++/cuda. Infact у нас теперь есть бета-версия libjacket (http://www.accelereyes.com/downloadLibjacket), которая может быть использована для расширения не только Matlab, но и других языков, если вы захотите.

@OSaad Большинство наших функций - это самые быстрые варианты. Будь то в C или Matlab.

0

Как правило, если вы можете написать свой код Matlab «векторизованным» способом, тогда пакеты, такие как AccelerEyes и Jacket, имеют разумные шансы на то, чтобы все было запущено на графическом процессоре. Вы можете в какой-то мере проверить это, проверив, может ли Matlab работать на нескольких ядрах на процессоре (в наши дни Matlab будет использовать несколько ядер, если все будет доступно для параллелизма очевидным образом).

Если это не сработает, вам нужно спуститься на C/C++ через mex, а затем оттуда вызвать OpenCL самостоятельно. Mex - это то, как Матлаб говорит с кодом C, поэтому вы пишете код C, который вызывается Matlab (и получает матрицы и т. Д.), Затем инициализирует и вызывает OpenCL. Это больше работает, но может быть вашим единственным маршрутом (и, даже если автоматизированные пакеты работают в некоторой степени, этот подход все равно может дать больше ускорений, потому что вы можете быть более умными в управлении памятью, например, если вы знаете, что вы делаете).