2013-09-18 2 views
1

lsqcurvefit Функция Matlab используется, чтобы соответствовать параметрам модельной кривой до реальной кривой (полученные данные из эксперимента или наблюдения), чтобы минимизировать квадратные различия. lsqcurvefitМожет ли функция Matlab использоваться в ядре CUDA?

Эта функция отнимает много времени и может быть непомерно высока при использовании на большом наборе кривых.

Может быть прямо используется внутри ядра CUDA, будучи тогда программой, закодированной в Matlab? (Edit: это, не записывая пользовательскую версию lsqcurvefit в C для ядра. Например: напишите код ядра в Matlab (используя там «любую» функцию matlab, например lsqcurvefit()), затем скомпилируйте ядро ​​с помощью инструмента Matlab, и, наконец, выполнить ядро ​​в графическом процессоре, вызванное из кода узла Matlab).

Благодаря

+1

Ваш вопрос не очень ясен и кажется несколько противоречивым (используйте функцию Matlab в ядре CUDA, а затем закодируйте всю программу в Matlab?). В любом случае, вы не можете напрямую использовать функции Matlab в ядре CUDA. Но вы можете написать собственную версию CUDA функции Matlab, а затем скомпилировать ее и связать ее с помощью mex-файлов, которые будут вызываться скриптом Matlab. – JackOLantern

+1

Я использую ускоренные функции CUDA, скомпилированные и связанные с Matlab с помощью mex-функций. В настоящее время я являюсь пользователем Matlab 2010a, и я еще не перешел на Matlab 2012. Чтобы сделать то, что вы говорите, вам понадобится инструмент, который компилирует функцию Matlab для функции '__device__', которая будет вызываться в ядре CUDA. Я не знаю, какой инструмент это делает. Но наверняка функции Matlab уже доступны для выполнения графических процессоров в новых вычислительных возможностях Matlab GPU. – JackOLantern

ответ

3

Есть много способов combine the capabilities of matlab with GPUs, но не любого MATLAB кода, который может быть использован в ядре CUDA.

+2

Чтобы быть понятным, MATLAB поддерживает тип 'gpuArray', который позволяет выполнять множество операций с массивами на графическом процессоре. Он также имеет растущий список функций из различных наборов инструментов (статистика, обработка изображений, ..), которые были включены для работы на графическом процессоре. Конечно, это не означает, что вы можете запускать код MATLAB в ядрах CUDA. Вы можете легко вызвать ядра CUDA из кода MATLAB: http://www.mathworks.com/help/distcomp/parallel.gpu.cudakernel.html или напишите MEX-файлы, содержащие код CUDA: http://www.mathworks.com/help/distcomp/create-and-run-mex-files-containing-cuda-code.html – Amro

+0

Затем, дайте мне посмотреть, правильно ли я это понимаю , Ядро * должно быть закодировано в C, а не в matlab, поэтому я не могу использовать lsqcurvefit() в ядре. Единственный вариант - подождать, что lsqcurvefit будет включен в GPU. – cibercitizen1

+1

Я бы рекомендовал прочитать некоторые основные материалы по теме GPU-вычислений CUDA. Одной из хороших возможностей могла бы стать книга Дж. Сандерса и Э. Кандрота «CUDA By Example». После этого вы получите более четкую картину и, возможно, сможете ответить на эти вопросы. Компиляция и компоновка файлов mex-файлов на основе CUDA в Matlab может быть сложной, если вы делаете это в первый раз. Для некоторых полезных инструкций вы можете обратиться к [Компиляция mex-файлов CUDA с Visual Studio] (http://www.orangeowlsolutions.com/archives/498). – JackOLantern

Смежные вопросы