CUDA и MATLAB для оптимизации цикла - PullRequest
5 голосов
/ 10 декабря 2010

Я собираюсь попытаться оптимизировать некоторый код, написанный на MATLAB, используя CUDA. Я недавно начал программировать на CUDA, но у меня есть общее представление о том, как это работает.

Итак, скажем, я хочу добавить две матрицы вместе. В CUDA я мог бы написать алгоритм, который использовал бы поток для вычисления ответа для каждого элемента в матрице результатов. Однако разве этот метод не похож на то, что уже делает MATLAB? В таком случае разве эффективность не будет зависеть от метода и может быть отнесена только к аппаратному уровню?

Ответы [ 4 ]

3 голосов
/ 10 декабря 2010

Техника может быть похожей, но помните, что с CUDA у вас одновременно работают сотни потоков. Если в MATLAB используются потоки, а эти потоки работают на ядре Quad, вы получите только 4 потока, исполняемых за такт, в то время как вы можете получить пару сотен потоков для работы на CUDA с таким же тактом.

Итак, чтобы ответить на ваш вопрос, ДА, эффективность в этом примере не зависит от методики и относится только к аппаратному обеспечению.

1 голос
/ 10 декабря 2010

Ответ однозначно, да, все эффективность аппаратного уровня.Я не знаю, как именно работает MATLAB, но преимущество CUDA заключается в том, что несколько потоков могут выполняться одновременно, в отличие от MATLAB.CUDA, вероятно, будет только дополнительной головной болью.

0 голосов
/ 27 сентября 2012

Для простых вещей лучше использовать поддержку gpuArray в Matlab PCT.Вы можете проверить это здесь http://www.mathworks.de/de/help/distcomp/using-gpuarray.html

Для таких вещей, как добавление gpuArrays, умножения, mins, maxs и т. Д., Реализация, которую они используют, имеет тенденцию быть в порядке.Я обнаружил, что для создания таких вещей, как пакетные операции небольших матриц, таких как abs (y-Hx). ^ 2, вам лучше написать маленькое ядро, которое сделает это за вас.

0 голосов
/ 11 декабря 2010

CUDA имеет официальную поддержку Matlab.

[нужна ссылка]

Вы можете использовать mex-файлы для запуска на GPU из MATLAB.

Узким местом является скорость, с которой данные передаются из CPU-RAM в GPU. Так что, если передача минимизирована и выполняется большими кусками, ускорение велико.

...