Ускорение кода MATLAB с использованием графических процессоров?

54

AccelerEyes объявила в декабре 2012 года, что она работает с Mathworks по коду GPU и прекратила выпуск своего продукта Jacket для MATLAB:

http://blog.accelereyes.com/blog/2012/12/12/exciting-updates-from-accelereyes/

К сожалению, они больше не продают лицензии Jacket.

Насколько я понимаю, решение ArrayFire на основе массива Jacket GPU было намного быстрее, чем решение gpuArray, предоставленное MATLAB.

Я начал работать с gpuArray, но вижу, что многие функции реализованы плохо. Например, простой

myArray(:) = 0 

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

Еще одна особенность, которую мне не хватает, - это разреженные матрицы графических процессоров.

Итак, мои вопросы:

Как ускорить неудачно реализованные реализации GPU по умолчанию, предоставляемые MATLAB? В частности, как ускорить работу с разреженной матрицей в MATLAB с помощью GPU?

  • 24
    Конечно, myArray(:) = 0 медленный - он перемещает множество нулей из процессора в графический процессор без причины. Это не означает, что возможности MATLAB GPU реализованы плохо, это означает, что вам нужно знать, как их использовать; вместо этого попробуйте myArray = gpuArray.zeros(size(myArray)) .
  • 2
    Сэм, <code> myArray (:) = 0 </ code> должен переместить только одно целое число из CPU в GPU - если реализовано оптимально. Использование <code> gpuArray.zeros () </ code> еще медленнее. Сейчас я использую <code> myArray = myArray - myArray </ code>, который работает быстрее, но все еще медленно. Я надеюсь, что функциональность Jacket появится в следующем выпуске MATLAB.
Показать ещё 19 комментариев
Теги:
gpu
gpgpu
jacket

2 ответа

4

MATLAB поддерживает графический процессор на базе CUDA. Вы должны получить к нему доступ из "Parallel Computing Toolbox". Надеюсь, эти 2 ссылки также помогут:

Возможности Parallel Computing Toolbox

Основные функции

  • Параллельные for-loops (parfor) для запуска задач-параллельных алгоритмов на нескольких процессорах
  • Поддержка графических процессоров NVIDIA с поддержкой CUDA
  • Полное использование многоядерных процессоров на рабочем столе с помощью рабочих, которые запускаются локально
  • Поддержка компьютерных кластеров и сетей (с распределенным вычислительным сервером MATLAB)
  • Интерактивное и пакетное выполнение параллельных приложений
  • Распределенные массивы и однопроцессорные множественные данные (spmd) для обработки больших данных и параллельных алгоритмов данных

Поддержка графической платформы MATLAB для графических процессоров NVIDIA с поддержкой CUDA

Использование MATLAB для GPU-вычислений позволяет ускорить ваши приложения с помощью графических процессоров легче, чем с помощью C или Fortran. Благодаря знакомому языку MATLAB вы сможете использовать вычислительную технологию CUDA GPU без необходимости изучать тонкости архитектур графического процессора или низкоуровневые вычислительные библиотеки GPU.

Вы можете использовать графические процессоры с MATLAB через Parallel Computing Toolbox, который поддерживает:

  • графические процессоры NVIDIA с поддержкой CUDA с возможностью вычисления 2.0 или выше. Для релизов 14a и ранее достаточно вычислительной способности 1.3.
  • Использование графического процессора непосредственно из MATLAB
  • Несколько графических процессоров на рабочих столах и компьютерах с использованием рабочих MATLAB в Parallel Computing Toolbox и MATLAB Distributed Computing Server
  • 2
    Хотя эти ссылки могут дать ответ на вопрос, вам следует избегать ответов, содержащих только ссылки, и суммировать или цитировать статьи, поскольку ссылки со временем имеют тенденцию к затуханию.
2

Я имел удовольствие посещать разговор Джона, основателя AccelerEyes. Они не получили ускорение, потому что они просто удалили плохо написанный код и заменили его кодом, который сохранял несколько бит здесь и там. Их ускорение в основном заключалось в использовании доступности кеша и выполнении большого количества операций в оперативной памяти (GPU). Matlab полагался на передачу данных между GPU и CPU, если я правильно помню, и, следовательно, ускорение было сумасшедшим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню