Подтвердить что ты не робот

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

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?

4b9b3361

Ответ 1

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

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