Реальная производительность ГПУ при решении задач
Таблица
Задача | ГПУ | Производительность (ГФлоп/с) | Система программирования | Область | Примечания |
Умножение матриц | 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.
© Лаборатория Параллельных информационных технологий НИВЦ МГУ