Пишу, по большей части, про историю, свою жизнь и немного про программирование.

libjpeg-turbo

Сегодня от нашего системного администратора узнал о библиотеке libjpeg-turbo. Это оптимизированная под SIMD-инструкции (MMX, SSE и NEON) библиотека libjpeg.

Авторами утверждается, что библиотека превосходит оригинальную по скорости в несколько раз.

Самое интересное, что библиотека бинарно соместима с оригиналом, то есть простой заменой одной на другую в системе можно добиться прироста производительности всех утилит, которые её используют.

Я погонял тесты у себя на ноутбуке с «МакОС», результаты получились следующие:

bolk@Bolk ~  $ otool -L `which jpegtran` | fgrep libjpeg
    /usr/local/Cellar/jpeg/8d/lib/libjpeg.8.dylib (compatibility version 13.0.0, current version 13.0.0)

bolk@Bolk ~  $ time for _ in {1..100}; do jpegtran -optimize -crop 4000x3000+2+2 ex.jpg > /dev/null; done

real	1m28.244s
user	1m20.063s
sys	0m7.705

bolk@Bolk ~ $ otool -L /opt/libjpeg-turbo/bin/jpegtran | fgrep libjpeg
/opt/libjpeg-turbo/bin/jpegtran:
    /opt/libjpeg-turbo/lib/libjpeg.62.dylib (compatibility version 63.0.0, current version 63.0.0)

bolk@Bolk ~  $ time for _ in {1..100}; do /opt/libjpeg-turbo/bin/jpegtran -optimize -crop 4000x3000+2+2 ex.jpg > /dev/null; done

real	0m59.433s
user	0m50.509s
sys	0m7.728s

В моём случае прирост порядка 30%. Для теста я взял случайную картинку из фотоальбомов с разрешением 5184×3456 и при помощи утилиты jpegtran вырезал оттуда кусок изображения. Каждый тест повторялся сто раз.

10 комментариев
Олег Горбунов 2012

Ух ты! :)

Догадайся 2012

а я таки докрутил кажись open-cl libjpeg:))) не все пока работает, но уже вот-вот!

Евгений Степанищев (bolknote.ru) 2012

Комментарий для Догадайся:

В OpenCL есть нативная поддержка JPEG что ли? Или что ты там мог прикрутить за пару часов? :)

Догадайся 2012

неа. нет.
http://code.google.com/p/jpeg-opencl/
Взял вот это и привожу в соответствие с libjpeg по вызовам.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для Догадайся:

Э… погоди. Так это оно и есть libjpeg+утилиты с патчами для OpenCL.

alax.myopenid.org 2012

59 секунд против 88 — это теперь называется прирост 70%?

Евгений Степанищев (bolknote.ru) 2012

Комментарий для alax.myopenid.org:

Ну, кстати, да. Я что-то забыл вычесть из сотни. Сейчас исправлю.

posleobeda.us 2012

Интересно себе представить высоконагруженный проект, где подобная функциональность и эффективность стали бы нечто you made my day. Да и чем именно такой проект может заниматься? Мне, например, приходит в голову только мега веб 2.0 сервис, куда люди заливают петабайты медиа, а сервис ужимает для мобильных устройств, подгоняет форматы для устройств 4:3 и 16:9. Кст, чем не идея для стартапа? :)

Евгений Степанищев (bolknote.ru) 2012

Комментарий для posleobeda.us:

Интересно себе представить высоконагруженный проект, где подобная функциональность и эффективность стали бы нечто you made my day.

В нашем документообороте удалось снизить нагрузку, просто установкой этой библиотеки. Там есть место, где сервис энергично работает с джпегом.

desh 2012

Комментарий для Евгения Степанищева:

В арче, кстати, только libjpeg-turbo и есть в стандартном репозитории :-O