Оптимизируем программный декодер JPEG для архитектуры RISC-V

Графический формат JPEG уменьшает размер изображений без особо заметной для глаза потери качества — упрощая тем самым их хранение и передачу. Студенты из БГУИР — Артём Подгайский, Сергей Буйвид, Юрий Наскевич и Дмитрий Степанчук — в рамках Зимней школы RISC-V YADRO изучили работу декодера JPEG для архитектуры RISC-V, нашли пути для его оптимизации и рассказали о своём проекте в статье на Habr.

Что разбирается в статье

  • Как устроен конвейер декодирования JPEG: таблица Хаффмана, извлечение и деквантование коэффициентов ДКП, обратное дискретное косинусное преобразование, преобразование YCbCr → RGB.
  • Почему исходная реализация оказалась медленной на RISC-V: около 90% времени работы программы занимает ДКП, а в нём — вычисление косинусов.
  • Как ускорить декодер: мемоизация — таблица заранее вычисленных косинусов (idctCoefficients[8][8]) вместо std::cos в горячем цикле.
  • Как встроить оптимизированный вариант в код: выбор функции ДКП через setIdctCall и sjpg_idct.h.

Ссылка на оригинал

📖 Читать полную статью на Habr


Эта запись — краткая выжимка. Полный текст, листинги и результаты профилирования — в оригинальной статье YADRO.




Понравилась статья?

Ещё материалы, которые могут вас заинтересовать: