Matlab Mexfiles и Cuda: оценка функции - PullRequest
0 голосов
/ 05 мая 2011

Привет, У меня есть mex-файл, который я хочу распараллелить с помощью CUDA. Текущая функциональность: я передаю дескриптор функции и огромное количество «точек» в mex-файл, и он оценивает функцию по каждой из точек в последовательном режиме (на процессоре). Для этого он использует что-то вроде:

mxArray* y;
const mxArray *e[2] = {functionHandle, point};
mexCallMATLAB(1, &y, 2, (mxArray **)e, "feval");

для оценки функции Обработка точки с помощью функции feval matlab. Теперь мне интересно, что происходит, когда я пытаюсь распараллелить вычисления с помощью CUDA: будет ли это работать правильно? Потому что, если оценка с mexCallMATLAB выполняется на CPU, использование CUDA не принесет никакой пользы. Но как это сделать, чем? Я не могу себе представить способ оценить дескриптор функции в определенной точке C напрямую, без использования функции matlab feval ...

Спасибо, пока! Вы мне очень поможете!

1 Ответ

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

Нет, mexCallMATLAB не будет вызываться из GPU.Как правило, вызовы на стороне хоста не могут быть сделаны из тела ядра CUDA.

Вы можете обнаружить, что если у вас есть доступ к 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...