 |
|
 |
Двумерное дискретное косинусное преобразование на CUDA
Задача по реализации двумерного дискретного косинусного преобразования является составной частью алгоритмов, связанных с быстрым сжатием изображений. С нашей точки зрения, программное обеспечение для CPU делает такие вычисления очень медленно даже при оптимальной реализации, поэтому для решения этой задачи мы использовали видеокарты NVIDIA с технологией CUDA. Мы сделали параллельную реализацию алгоритма ДКП, что значительного увеличило быстродействие.
Конфигурация компьютера, видеокамеры и ОС
- Для тестирования программного обеспечения использовалась такая конфигурация компьютера: ASUS P6T Deluxe V2 LGA1366, X58, Core i7 920, 2.67 ГГц, DDR-III 6 ГБайт.
- Видеокарты для вычислений: GeForce GT 240 (CC=1.2, 96 ядер) или GeForce GTX 580 (CC=2.0, 512 ядер).
- Операционная система Windows-7, 64-бит, CUDA 4.0, драйвер 270.81
Результаты тестирования алгоритма быстрого двумерного ДКП для разных видеокарт NVIDIA
Были получены следующие результаты для времени выполнения алгоритма ДКП на разных видеокартах для монохромного 8-битного изображения с разрешением 640 х 480 (время загрузки изображений и выгрузки результатов не включено в представленные данные, изображение разбивается на блоки размером 8х8):
- GeForce GT 330M (48 ядер, мобильный вариант) - 168 мкс
- GeForce GT 240 (96 ядер) - 88 мкс
- GeForce GT 555М (144 ядра, мобильный вариант) - 59 мкс
- GeForce GTX 580 (512 ядер) - 18 мкс
На видеокарте GeForce GTX 580 для монохромных изображений с размером 1280 х 1024 (1,25 МБ) время выполнения ДКП равно 61 мкс, что соответствует пропускной способности 20 ГБайт/с, а для изображений размером 4 МБайт время выполнения ДКП равно 186 мкс, что соответствует пропускной способности 22 ГБайт/с. Таким образом, получены очень высокие результаты, причём для довольно широкого класса графических карт, в том числе бюджетных и мобильных.
Сравнение с аппаратными решениями на FPGA
Интересно отметить, что производительность вычислений по алгоритму ДКП на базе видеокарты GeForce GTX 580 (примерно 18-22 ГБайт/с для 8-битных изображений с разрешением от 0,3 МБайт до 4 МБайт) оставила далеко позади лучшие на сегодняшний день аппаратные решения, построенные на ПЛИС (FPGA). Одну из самых быстрых систем на ПЛИС предлагает следующая компания:
- Alma-Tech (DCT IP Core) - функция аппаратной реализации алгоритма двумерного ДКП для FPGA Altera/Xilinx, производительность до 200 МБайт/с.
Высокопроизводительные решения такого типа написаны на Verilog/VHDL и являются оптимальными для компактных (встраиваемых) систем с минимальными требованиями по питанию. Сравнивая наше решение с системами на ПЛИС, стоит отметить, что кроме более высокой производительности полученного нами решения, по сравнению с Verilog/VHDL, код на Си для CUDA намного более понятный и приспособленный для модификации и создания на его базе новых, более сложных систем обработки и сжатия изображений.
Как достичь лучших результатов
Существует ряд методов, с помощью которых можно получить увеличение производительности подобных систем:
- Использование новых решений NVIDIA в последних моделях видеокарт: возможности архитектуры Fermi и др.
- Использование более мощных видеокарт Quadro и Tesla.
- Распараллеливание алгоритма между разными видеокартами, увеличение количества видеокарт для организации параллельных вычислений.
|