Умножение матриц, серия 4: NVidia G80, CUDA, CuBLAS и RapidMind
lexa - 22/Фев/2007 22:35
GPGPU или зачем все эти упражнения
Все предыдущие и более ранние мои упражнения были сделаны в качестве «подхода к снаряду», нужна была baseline для более интересной задачи: вычислений общего назначения на видеокарте.Эта тема в последние год-полтора (а особенно, в последние полгода) очень сильно нагрелась. В то же время, в варианте от NVidia hardware и софт общедоступны, покупаешь видеокарту и развлекаешься.
Приборы и материалы: NVidia CUDA и прочие
Настоящий общедоступный сдвиг произошел меньше месяца назад: 6 февраля 2006 г. вышла вторая версия NVidia CUDA Toolkit, она же первая публичная (и первая более-менее работающая), она же версия 0.8.Эта версия доступна всем желающим без подписания NDA, следовательно результаты тестов можно открыто публиковать.
Тема исследования, как обычно, умножение матриц. Задача очень простая алгоритмически, но со своими особенностями. В силу простоты задачи, изучать особенности одно удовольствие.
Рассматривались три доступных умножителя матриц:
- SGEMM в составе библиотеки CUBLAS.
- Тестовый пример от NVidia, который очень подробно разобран в документации.
- Реализация SGEMM от RapidMind.
Сравнивалось все с результатами вычислений на доступных мне компьютерах общего назначения:
- Dual Opteron 275 (2.2 Ghz) - долгое время это был "предпоследний процессор в линейке" т.е. наиболее разумный выбор по цена/качество.
- Dual Xeon 5140 - текущий оптимум по цена/производительность.
Стоимости решений
Видеокарта сама по себе не работает, поэтому интересно сравнить "платформы", состоящие из процессора, материнской платы, пары гигабайт памяти и видео. В минимальном варианте три разных системы будут стоить на сегодня (по московским ценам):- Вычислитель на G80: NVidia 8800GTX + современная недорогая обвязка (процессор, память): $1200-1300, половину суммы составляет видеокарта.
- Вычислитель на Dual Opteron 275: $1200-1300, половину стоимости составляют два процессора.
- Вычислитель на Dual Xeon 5140: $1600-1700 из которых около 1000 за два процессора.
Результаты тестов
Вычисления на видеокарте проходят в три этапа:- Загрузка данных в видеопамять
- Запуск вычислительного модуля, исполняемого GPU
- Выгрузка данных в основную память компьютера
Быстродействие на перемножении матриц (MFLOP/s) | ||||
---|---|---|---|---|
Платформа | размер задачи | |||
1024 | 2048 | 4096 | ||
Вычисления на CPU | ||||
2xOpteron 275, Goto BLAS single precision, 4 threads |
23 091 | 28 971 | 30 272 | |
2xXeon 5140, Goto BLAS single precision, 4 threads |
26 512 | 45 935 | 47 556 | |
NVidia G8800GTX: Чистое время вычислений | ||||
RapidMind 2.0b3 | 109 653 | -* | -* | |
пример из CUDA toolkit | 46 403 | 46 562 | 46 299 | |
cuBLAS SGEMM | 97 713 | 99 890 | 98 738 | |
NVidia G8800GTX: Вычисления + загрузка-выгрузка данных в видеокарту | ||||
RapidMind 2.0b3 | 33 314 | -* | -* | |
пример из CUDA toolkit + IO | 25 230 | 35 911 | 40 879 | |
NVidia G8800GTX, cuBLAS SGEMM | 58 703 | 73 670 | 83 473 | |
* — Стандартный пример от RapidMind ограничен матрицами 1020x1020 |
Обсуждение результатов
RapidMind
Пример от RapidMind не использует аппаратных особенностей G80 и должен работать на любой DX9-видеокарте. Используется операция MAD (Multiply-Add) над векторными (4 компонента) операциями. По всей видимости, MAD работает, получающаяся производительность весьма вкусная. К несчастью, пример плохо масштабируется, программировать в терминах 4-векторов очень мучительно. А убивает все скорость копирования данных из видеокарты: стандартные средства DX9 очень медленные и неудобные.Пример от NVIdia
Умножение матриц в примере от NVidia сделано с большой претензией: блоки данных копируются в сверхбыструю shared-memory, где и умножаются. Однако shared-памяти мало, 16 килобайт на мультпроцессор (всего, соответственно, 256kbCuBLAS
Про внутренности CuBLAS неизвестно ничего. По внешним признакам, там нет глупостей с оптимизацией на кратность матрицы размеру блока в shared memory и прекрасно сделано копирование данных в(из) видеопамять.Выводы
На несложной задаче без ручных оптимизаций NVidia G80 делает в 2-3 раза вычисления на мощных современных CPU (двух двухядерных). Исследования надлежит продолжать.В следующей серии: FFT3D.
Comments
Размерность задач указана, а вот нельзя ли по-подробнее про
Размерность задач указана, а вот нельзя ли по-подробнее про тип данных? Т.е. разброс значений и структуры матриц - для которых проводились эти тесты?
Это все single precision (32 бита). Данные подбирались так,
Это все single precision (32 бита). Данные подбирались так, чтобы не попасть в переполнение или потерю точности (значения от 0.1 до 1).
Матрицы - не разреженные.
браво! > Эта тема в последние год-полтора (а особенно, в по
браво!
> Эта тема в последние год-полтора (а особенно, в последние полгода) очень сильно нагрелась.
я про это думал уже году в 2000-2002 (примерно в то время появились первые известия о возможности вычислений на GPU.
Но дальше "раздумий" дело не пошло - нету времени и знаний, да и основная работа загружает на 100%.
C 2002-го года много воды утекло. Во-первых, стало больше
C 2002-го года много воды утекло.
Во-первых, стало больше смысла, ускорители развиваются (ускоряются) быстрее чем CPU.
Во-вторых, появились разумные инструментальные средства генерации кода (с отладкой много хуже)
"В следующей серии: FFT3D." Уже есть пример пост-врем. филь
"В следующей серии: FFT3D."
Уже есть пример пост-врем. фильтра для видео
от Fizick
http://avisynth.org.ru/fft3dfilter/fft3dfilter-rus.html
переделанный под GPU
http://forum.doom9.org/showthread.php?t=89941
Вообще, есть FFT-GPU (под OpenGL), но я имел в виду тестиров
Вообще, есть FFT-GPU (под OpenGL), но я имел в виду тестирование FFT, который входит в поставку CUDA Toolkit.
Впрочем, тестировать пока не стал, увлекся самостоятельным программированием под данную платформу.
В тему: NVIDIA анонсирует Tesla: ускорение расчётов силами в
В тему:
NVIDIA анонсирует Tesla: ускорение расчётов силами видеочипов Lexagon / 21.06.2007 07:47 / ссылка на материал / версия для печати
Ещё осенью прошлого года, в момент анонса видеокарт на базе чипа
G80, компания NVIDIA сделала акцент на возможности использования видеочипов
для ускорения разного рода расчётов - соответствующая концепция получила
название CUDA. Официальный анонс соответствующих решений должен был
состояться в июне, и он состоялся вчера, о чём доложили все профильные
сайты. Расскажем о новой платформе NVIDIA и мы.
По сути, NVIDIA открывает путь к суперкомпьютерным вычислениям при
использовании видеокарт класса Quadro FX 5600, которые являются близкими
родственниками GeForce 8800 GTX с той лишь разницей, что первые оснащены 1,5
Гб памяти типа GDDR-3. В "суперкомпьютерном варианте" такая видеокарта
лишена портов для подключения к монитору - они ей просто не нужны.
Называется этот продукт "GPU computing processor", модель обозначается как
Tesla C870.
<i> Однако shared-памяти мало, 4 килобайта на процессор (вс
Однако shared-памяти мало, 4 килобайта на процессор (всего, соответственно, полмегабайта)
нету там столько кэша :) 16кб на мультипроцессор, которых всего 4, итого 64 кб на карте.
Зато там память быстрая :)
Что касается Tesla, то текущая модель основана на архитектуре nVIDIA 8800 GTX, поэтому не стоит особенно обольщаться. Нужно ждать новой модели их процессора G90.
Оба неправы :) Действительно, 16Kb на мультипроцессор, но му
Оба неправы :)
Действительно, 16Kb на мультипроцессор, но мультипроцессоров в 8800GTX - 16 штук.
И еще 32 килобайта регистров на мультипроцессор, тоже быстрая память.
Итого, 256/768Kb на карту (как считать).
Сейчас поправлю.
Скажите мне, простому юзеру када первые реальные приложения
Скажите мне, простому юзеру када первые реальные приложения появятся на компе с использованием CUDA?
Уже появился первый реальный подборщик паролей от Elcomsoft.
Уже появился первый реальный подборщик паролей от Elcomsoft.
Но вообще - скоро. Ведь до конца ноября CUDA требовала (от юзера) установки специального видеодрайвера, а скоро эта функциональность будет в стандартном драйвере NVidia (пока только в бета-версии)
Я - простой пользователь, но подобными темами (конкретно-пар
Я - простой пользователь, но подобными темами (конкретно-параллельных вычислений)интересуюсь давно. Вопрос такой: что Вы думаете относительно применимости SONY PS3 для этих целей?Возможно ли сравнение с иследовавшимися Вами процессорами? я видел заметку о самодельном,правда,при поддержке SONY суперкомпьютере из 15-ти приставок.ссылку, к сожалению,не сохранил(ix bit ?).
У PS3 очень мало памяти для серьезной работы
У PS3 очень мало памяти для серьезной работы
Как программировать? Не могу разобраться в коде... на каком
Как программировать? Не могу разобраться в коде... на каком примере можно реально разобрать, диплом будущий надеюсь на CUDA посчитать...
Там же в одном из двух файлов дистрибутива (скорее в SDK, а
Там же в одном из двух файлов дистрибутива (скорее в SDK, а не в Toolkit) есть просто куча примеров. И документация к ним.
Все на английском, но в-принципе в NVidia работают и наши соотечественники, я с ними общался на русском.