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 вырезал оттуда кусок изображения. Каждый тест повторялся сто раз.
Ух ты! :)
а я таки докрутил кажись open-cl libjpeg:))) не все пока работает, но уже вот-вот!
Комментарий для Догадайся:
В OpenCL есть нативная поддержка JPEG что ли? Или что ты там мог прикрутить за пару часов? :)
неа. нет.
http://code.google.com/p/jpeg-opencl/
Взял вот это и привожу в соответствие с libjpeg по вызовам.
Комментарий для Догадайся:
Э… погоди. Так это оно и есть libjpeg+утилиты с патчами для OpenCL.
59 секунд против 88 — это теперь называется прирост 70%?
Комментарий для alax.myopenid.org:
Ну, кстати, да. Я что-то забыл вычесть из сотни. Сейчас исправлю.
Интересно себе представить высоконагруженный проект, где подобная функциональность и эффективность стали бы нечто you made my day. Да и чем именно такой проект может заниматься? Мне, например, приходит в голову только мега веб 2.0 сервис, куда люди заливают петабайты медиа, а сервис ужимает для мобильных устройств, подгоняет форматы для устройств 4:3 и 16:9. Кст, чем не идея для стартапа? :)
Комментарий для posleobeda.us:
В нашем документообороте удалось снизить нагрузку, просто установкой этой библиотеки. Там есть место, где сервис энергично работает с джпегом.
Комментарий для Евгения Степанищева:
В арче, кстати, только libjpeg-turbo и есть в стандартном репозитории :-O