Чем больше в стране нефти, тем меньше в ней демократии. (c) Freedom House, Вашингтон.
Разбирался в ПО для линейной алгебры. Запишу для себя, что бы потом вернуться. Вопрос интересовал потому что считать матрицы лучше на видеокартах, а значит нужно выбрать между nVidia и AMD. Что бы было быстро и без геммороя.
CUDA — стандарт для вычислений на видеокартах. Только nVidia, проприентарный.
OpenCL — стандарт для параллельных вычислений. Открытый стандарт, софт свободный. Поддерживает и видеокарты AMD и nVidia.
GPGPU — использование видеокарт для вычислений. gpgpu.org.
BLAS — базовые подпрограммы линейной алгебры. Стандартизирует API для софта. Нет смысла использовать напрямую (низкоуровневый).
LAPACK — библиотека линейной алгебры. Написана с использованием BLAS, на фортране, для процессоров.
Intel MKL — одна из реализаций LAPACK, платная.
GSL — GNU Scientific Library, математическая библиотека от GNU, среди большого списка возможностей линейная алгебра так же заявлена.
AMD ACML — математическая библиотека от AMD, одна из реализаций BLAS\LAPACK. Фортран.
ACML-GPU — ACML для видеокарт. Не поддерживается, возможности перенесены в APPML.
APPML — есть стандарт типа html для десктопных приложений, который загнулся в 2007-м. Это не оно.
AMD APPML — математическая библиотека от AMD, содержащая функции BLAS и FFT написанные на OpenCL и заточенные под видеокарты AMD.
AMD APP SDK — sdk от AMD, что бы пользоваться APPML.
CuBLAS — BLAS, портированный на CUDA, от nVidia. Исходники есть.
opencl-toolbox — относительно живая реализация низкоуровневой поддержки opencl для matlab в виде модуля. 1 разработчик. Можно скомпилировать с Octave. Лицензия MIT (серьёзная ошибка). В начале 2011 года много людей обратили на неё внимание. По всей видимости ничего более серьёзного не существует.
GNU Octave — свободная система для математических вычислений. Язык совместим с MATLAB.
MATLAB — слишком много стоит.
MEX-файлы — dll для MATLAB. К Octave подключить тоже можно.
Parallel Computing Toolbox — поддержка GPU в MATLAB от производителя. Цены неприличные. Или приличные. В русском языке это почти одно и то же.
Jacket — поддержка GPU в MATLAB от сторонней конторы. Тоже раздают разрешения на использование персонально, в обмен на президентов. Впрочем, можно и проигнорировать подобный «традиционный метод лицензирования ПО». Если найти где скачать, конечно.
Larrabee — архитектура процессоров, которую разрабатывает Intel, для конкуренции на рынке GPGPU, высокопроизводительных вычислений и графики.
Libra от gpusystems — поддержка GPU для matlab\octave\java\c# и для всего, что может вызвать API на C\C++ (упоминают octave в своём FAQ), реализован BLAS и ещё много всего, лицензирование мутное, есть лицензия для разработчиков. Только под винду, линукс обещают.
Octave можно скомпилировать с ACML (как минимум с той частью ACML, которая совместима с BLAS), хотя это может быть нетривиально. APPML + Octave можно забыть, интернет на эту тему молчит абсолютно.
Скомпилировать Octave с некоторыми библиотеками из CUDA SDK так же возможно (может, что и со всеми).
CUDA Mex-файлы можно, по всей видимости, использовать и без компиляции Octave.
Проблемы скорости.
(25к рублей) AMD Radeon HD 6990: 3072 ALUs x 830 MHz = 2550 billion 32-bit instruction per second, но она сдвоенная.
(27к рублей) Nvidia GTX 590: 1024 ALUs x 1214 MHz = 1243 billion 32-bit instruction per second
(уже не продаётся) ATI RadeonHD 5970 Graphics: 3200 cores, 4.6 tera flops, SIMD
(15к, уже не продаётся) Nvidia GTX 480 Fermi: 512 cores, Less than 2 tera flops,MIMD
OpenCL можно запустить на процессоре. Т.е. добавить скорости. Не говоря уж о Larrabee, но это экзотика, её не рассматриваем.
Математический (а не графический) код Cuda, возможно, лучше оптимизирован, чем OpenCL (cuda постарше), но на текущий момент это может быть уже и не так.
Тесты OpenCL vs Cuda и nVidia OpenCL vs ATI OpenCL упираются в религию, разница в скорости железа сравнима (или меньше) с разницей от качества исполнения драйверов и математических библиотек и разницей между соседними моделями одного производителя. БОльшая часть тестов — тесты скорости графики, на них вообще можно внимания не обращать.
Дополнительно.
DFT — Discrete Fourier Transform, дискретное преобразование Фурье. Раскладывает дискретные функции на составляющие, применяется при анализе частот в сигнале (сжатие звука и изображения, интуитивно кажется, что для распознавания звука тоже используется).
FFT — алгоритм быстрого вычисления DFT.
FFTW — GPL реализация FFT, самая быстрая из свободных и работающих на процессоре (по их собственным тестам).
CuFFT — FFT для CUDA
OpenCL_FFT — пример реализации от Apple для Mac OS.
APPML включает реализацию FFT на OpenCL.
Список карточек ATI, поддерживаемых AMD APP SDK. http://developer.amd.com/sdks/AMDAPPSDK/pages/DriverCompatibility.aspx
Итог.
Самый большой вопрос — что прикрутить к Octave, что бы сразу заработало и даже не потребовалось отдельные функции использовать. Вот этот разрыв между «у нас уже всё десять раз реализовано для си» и «к нормальным средствам разработки вы прикручивайте сами как-нибудь» смущает больше всего. Однако после тщательного анализа (я на этот пост потратил 5 часов) решил, что в вендор-локе нет смысла, количество кода сравнимо, качество придётся проверять, так что выбираю OpenCL. Гемморой будет в любом случае. AMD\nVidia будет важно, когда буду выбирать конкретную модель.