Matlab совместно используемые библиотеки C++ и OpenCL
У меня есть проект, который требует много обработки изображений и хотел добавить поддержку GPU, чтобы ускорить процесс.
Мне было интересно, скомпилировал ли я свой matlab в разделяемую библиотеку C++ и вызвал его из программы OpenCL, означает ли это, что код matlab будет выполняться на GPU?
4 ответа
Мое собственное (полуобразованное) предположение, что вам будет очень трудно это сделать. Но другие прошли по тому же пути. Эта статья может быть хорошим местом для начала вашего исследования. И Googling обнаружил Accelereyes и пару ссылок на элементы в Mathworks File Exchange, за которыми вы могли бы следить.
Все в куртке написано на c / C++ / cuda. На самом деле у нас теперь есть бета-версия libjacket (http://www.accelereyes.com/downloadLibjacket), которую можно использовать для расширения не только matlab, но и других языков, если вы пожелаете.
@OSaad Большинство наших функций - самые быстрые. Будь то в C или Matlab.
Как правило, если вы можете написать свой код Matlab "векторизованным" способом, то такие пакеты, как AccelerEyes и Jacket, имеют разумную возможность заставить вещи работать на GPU. Вы можете проверить это в некоторой степени заранее, проверив, может ли сам Matlab работать на нескольких ядрах ЦП (в наши дни Matlab будет использовать несколько ядер, если что-то будет распараллелено очевидным образом).
Если это не сработает, то вам нужно перейти на C/C++ через mex, а затем оттуда вызвать OpenCL самостоятельно. Mex - это то, как Matlab общается с C-кодом, поэтому вы пишете C-код, который вызывается Matlab (и получает матрицы и т. Д.), Затем инициализирует и вызывает OpenCL. Это больше работы, но может быть вашим единственным маршрутом (и, даже если автоматизированные пакеты работают до некоторой степени, этот подход все же может дать больше ускорений, потому что вы можете быть умнее в управлении памятью, например, если вы знаете, что делаете).
Parallel Computing Toolbox в предстоящем выпуске R2010b (который должен быть выпущен 1 сентября) поддерживает обработку графических процессоров для нескольких функций. К сожалению, он поддерживает только CUDA (версия 1.3 и выше), поэтому с видеокартой ATI вам не повезло. Тем не менее, вы все равно можете просто купить выделенный графический процессор.