Скомпилируйте m-файл Matlab в пригодную для использования C-функцию - PullRequest
1 голос
/ 06 мая 2011

Привет, Есть ли способ скомпилировать (или лучше сказать: «перевести») m-функцию matlab в C-функцию, чтобы я мог использовать ее в ядре CUDA моего mex-файла? Большое спасибо!

Ответы [ 4 ]

6 голосов
/ 06 мая 2011

MATLAB Coder сгенерирует C-код для mex-файлов.У меня пока нет копии для оценки, поэтому я не могу говорить с какими-либо полномочиями о качестве и характере сгенерированного кода.

Однако, если бы мне пришлось угадывать, я бы сказал, сгенерированный кодскорее всего, потребуется много массажа, чтобы заставить его работать на вашем GPU.Вам может повезти с таким продуктом, как Куртка , в зависимости от того, что вы делаете.

1 голос
/ 08 мая 2011

Это на самом деле не прямой ответ на ваш вопрос, но если ваша цель состоит в том, чтобы просто запустить код MATLAB на GPU, то вы можете обнаружить, что если у вас есть доступ к Parallel Computing Toolbox ,Вы можете использовать GPUArrays с arrayfun .Например, если функция, которую вы хотите оценить по многим точкам, выглядит следующим образом:

function y = myFcn( x )
y = 1;
for ii = 1:10
  y = sin(x * y);
end

Тогда вы можете вызвать это на GPU следующим образом:

gx = gpuArray( rand(1000) );
gy = arrayfun( @myFcn, gx );
1 голос
/ 07 мая 2011

Функция C в конечном итоге вызовет переменные устройства для настройки и вызовет ядро ​​CUDA?

Изначально я хотел попробовать это для проекта, потому что я думал, что этот метод будет проще, чем сначала конвертировать весь мой код MATLAB в C, но я все равно это сделал.

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

1) NvMEX: Это напрямую от Nvidia. http://developer.stage.nvidia.com/matlab-cuda http://www.mathworks.com/discovery/matlab-gpu.html

2) CUDA MEX: это от пользователя. http://www.mathworks.com/matlabcentral/fileexchange/25314-cuda-mex

1 голос
/ 06 мая 2011

Вы можете вызвать функцию matlab (m или mex) из C / fortran, используя этот вызов функции. Затем вы можете связать это с вашим ядром CUDA.

Однако это может быть не самый эффективный способ сделать что-то. Вы можете написать свой собственный C-код для имеющегося у вас m-файла или посмотреть его на matlab central, если кто-нибудь еще это сделал.

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