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 вырезал оттуда кусок изображения. Каждый тест повторялся сто раз.
14 марта 2012 19:16

Олег Горбунов (инкогнито)
14 марта 2012, 20:36

Ух ты! :)

Догадайся (инкогнито)
14 марта 2012, 20:39

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

bolk (bolknote.ru)
14 марта 2012, 20:56, ответ предназначен Догадайся

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

Догадайся (инкогнито)
14 марта 2012, 21:00

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

bolk (bolknote.ru)
14 марта 2012, 21:28, ответ предназначен Догадайся

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

alax.myopenid.org (инкогнито)
14 марта 2012, 22:09

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

bolk (bolknote.ru)
14 марта 2012, 22:12, ответ предназначен alax.myopenid.org

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

posleobeda.us (инкогнито)
16 марта 2012, 17:07

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

bolk (bolknote.ru)
17 марта 2012, 14:50, ответ предназначен posleobeda.us

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

desh (инкогнито)
19 марта 2012, 20:25, ответ предназначен bolk (bolknote.ru):

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)