Реальная производительность ГПУ при решении задач


Таблица

Задача ГПУ Производительность (ГФлоп/с) Система программирования Область Примечания
Умножение матриц X1950PRO 76,8 C$, DPVM Матрицы  
Умножение матриц GF8800GTX 122,4 CUDA Матрицы  
Блэк-Шоулз GF8800GTX 259,9 CUDA Финансы  
Блэк-Шоулз HD3870x2 101,45 C$, CAL Финансы  
Фильтрация 3*3 HD3870x2 41,8 C$, CAL Изображения  
Метод Якоби (Лаплас) HD3870x2 10,8 C$, CAL Численные методы  
Задача N тел GF8800GTX 250 CUDA, MPI Астрономия Кластер из 32 ГПУ, нормировка на 1 ГПУ
Фильтрация 3*3 GF8800GTX 14,1 CUDA Изображения  

Наиболее яркие результаты и классические задачи

Умножение матриц

В контексте ГПУ под матричными вычислениями будем понимать умножение плотных матриц. Другие операции, например сложение, ввиду очень малой вычислительной мощности, не достигают производительности выше 2% от пиковой. При нынешних объемах памяти на ГПУ можно умножать матрицы размером до 8000*8000, и все данные будут размещены в видеоОЗУ. Реально достигнутая производительность также достаточно высока: на ГПУ AMD HD 2900 это 100 ГФлоп/c, на ГПУ NVidia GeForce GTX8800 - 125 ГФлоп/c (на процедуре из CUBLAS, реализованной NVidia). Заметим, что такая производительность достигается за счет использования блочных алгоритмов умножения матриц, а классические прямые реализации оказываются на порядок медленнее.

Расчет цены опционов по формуле Блэка-Шоулза

Особняком стоит задача расчета цены опционов по формуле Блэка-Шоулза, часто решаемая на практике. Это тот редкий случай, когда большое количество вычислений сочетается с очень простой параллельной структурой. На вход подаются 3 массива параметров опционов, и задача - рассчитать стоимость опциона для каждой тройки параметров. Формула для расчетов содержит только одно ветвление, а в остальном абсолютно линейна. Более того, в расчетах активно используются операции логарифма и экспоненты, которые намного эффективнее реализованы на современных ГПУ, чем на ЦПУ. В результате системы на ГПУ демонстрируют на этой задаче практически 100-кратное ускорение по сравнению с обычным процессором. На NVidia GeForce 8800GTX достигнутая производительность составляет 260 ГФлоп/c.

Обработка изображений

Обработка изображений была одной из первых задач, решаемых на ГПУ. Наиболее важными алгоритмами здесь являются фильтрация изображений и преобразование Фурье. Фильтрация, благодаря относительно простой структуре, легко отображается на ГПУ. Однако коэффициент повторного использования данных значительно меньше, чем у умножения матриц, что и объясняет значительно меньшую эффективность ГПУ в решении данной задачи. При размере ядра 3*3 производительность кода на ГПУ NVidia GeForce 8800GTX составляет около 14,1 ГФлоп/c (т.е. загрузка - всего 4%). Часто используемая на практике сепарабельная фильтрация при помощи фильтра Гаусса показывает худшие результаты ввиду еще более низкого коэффициента повторного использования.

Преобразование Фурье

Преобразование Фурье, как и битоническая сортировка, относится к классу алгоритмов, которые на ГПУ выполняются за время, пропорциональное N lg N, где N - это размер задачи. Оба алгоритма реализуются при помощи многопроходной схемы, где на каждом проходе применяется ядро типа "бабочки". И хотя вычислительная сложность подобного ядра относительно невысока, ГПУ NVidia удается достичь на нем неплохих результатов. На первых этапах работы весь рабочий набор умещается в статическую память, что позволяет собрать их в один проход и получить порядка 40 ГФлоп/c на графической карте NVidia GeForce 8800GTX.


© Лаборатория Параллельных информационных технологий НИВЦ МГУ
Rambler's Top100