SIMD Jpeg Source

http://cetus.sakura.ne.jp/softlab/jpeg-x86simd/jpegsimd.html


Independent JPEG Group's JPEG software release 6b
   with x86 SIMD extension for IJG JPEG library version 1.02


● このソフトは

JPEG のサポートライブラリとして広く使われている Independent JPEG Group's JPEG library (libjpeg ライブラリ) に、Intel x86 系 CPU の持つ SIMD 命令を利用したコード(ルーチン)を新たに追加し、高速化改造したものです。 MMX や SSE などの SIMD 演算機能を装備しているプロセッサ上で動作させると、オリジナル版の libjpeg ライブラリと比較して 2~3 倍程度の速度で動作します。また、SIMD 化に依らない高速化改造もいくつか施されており、SIMD 演算の使えない旧型 CPU においても、オリジナル版と比較して十数%程度高速に動作します。

JPEG 圧縮/展開処理の高速化を目的としていますが、動作速度最優先ではなく、オリジナル版と同等以上の計算精度を持つことを最優先に考えたコードを採用しています。実際、DCT演算に浮動小数点DCTを使った場合、および、やや特殊なサンプリング比(h1v2)を持つ JPEG ファイルを展開する場合を除いては、オリジナル版と1ビットも違わない結果を出します。上記の2つの例外の場合もオリジナル版よりは高画質化(高精度化)されています。

SIMD 対応化に際しては、可能な限り、オリジナル版の libjpeg ライブラリとの互換性が失われないように考慮されていますので、ほとんどの場合、オリジナル版をそのまま置き換えることが可能です。特に、共有ライブラリに関して言えば、一部の例外(cygwin の場合)を除き、それはオリジナル版とバイナリレベルでの上位互換性がありますので、そのままオリジナル版を置き換えることができます。

● 対応しているプラットフォーム

Intel x86 CPU に固有の機能を利用していますので、オリジナル版とは異なり、 Intel x86 CPU およびその互換 CPU を採用しているシステムに限られます。 PowerPC などの Intel x86 系以外のシステムには対応していません。

具体的には、80386 以降の Intel x86 CPU およびその互換 CPU を採用しているハードウェアで、かつ、32bitフラットアドレスモード(保護モード)を使用しているプラットフォーム(OS)が対象です。これには、Win32 (Windows 9x系/NT系)や各種 PC-UNIX (linux や xBSD ファミリなど) などが該当します。なお、 AMD64 (EM64T/Intel64) の64bitモード環境には(現時点では)対応していません。ご注意ください。

作者のところでは、Win32 の各種C言語処理系と、NetBSD・FreeBSD・Linux (Fedora Core 4~9 & Vine Linux 3.2/4.2)・Solaris 10 (x86)・Darwin 8.0.1 (x86) での動作確認がとれています。

● アセンブラ NASM の入手/インストール

この x86 SIMD 版 libjpeg ライブラリの SIMD 拡張部分は、そのほとんどが x86 のアセンブリ言語で書かれています。このアセンブリ言語ソースコードをアセンブルするには、 NASM (Netwide Assembler) というアセンブラが別途必要です。

Windows 系の場合は、 公式サイト から nasm-0.XX.YY-win32.zip (XX.YY にはバージョン番号が入る)という名前のファイルをダウンロードして、それに含まれる nasmw.exe をCコンパイラの実行ファイル群がインストールされている場所にコピーします。

各種 PC-UNIX の場合は、 OS の配布元にて移植済みパッケージが提供されている場合がありますので、まず最初にそちらを確認してみてください。それがない場合は、上記公式サイトからソースコード(もしくは RPM パッケージ)をダウンロードしてコンパイル/インストールしてください。

なお、x86 版の Darwin や Mac OS X などで使用する場合は、現時点ではまだ正式にリリースされていない V.0.98.40 以降の NASM が必要です。現時点では、V.0.98.40 は上記の公式サイトの CVS リポジトリ からソースコード一式をダウンロードしてコンパイル/インストールする必要があります。

● 使用条件・サポート

この SIMD 拡張版 IJG JPEG software の使用条件については、オリジナル版の IJG JPEG software の使用条件が適用されます。

この SIMD 拡張版 IJG JPEG software は、オリジナル開発元の IJG とは関係なく、独自に拡張を行なったものです。ですので、この SIMD 拡張版 IJG JPEG software に関する質問を、オリジナル開発元 (The Independent JPEG Group) に送らないでください。

この SIMD 拡張版 IJG JPEG software に関しては、原則としてノーサポートとさせていただきます。ご意見やご感想につきましては、メールよりも 当サイトの掲示板 に寄せていただきたく思いますが、常に何らかの返答ができるわけではありませんので、ご承知おきください。特に、(オリジナルの英文マニュアルを含め)同梱のマニュアル類に回答が書いてある質問や、使用者のソフトウェア技術者としての技量不足に関わる質問、質問の要領を得ない質問などについては、回答をいたしませんので、あしからずご了承ください。

● 改版履歴

  • IJG R6b with x86SIMD V1.02 (2006-02-04)
    • x86 版 Darwin に対応しました。動作確認は Darwin 8.0.1 for x86 にて行ないました。 x86 版 Mac OS X でも、動作するものと思われます。 また、Solaris 10 での動作確認も行ないました。
  • IJG R6b with x86SIMD V1.01 (2006-01-26)
    • jsimdgcc.c を使ったとき、NEED_SHORT_EXTERNAL_NAMES が定義されていると正常にリンクできないバグを修正しました。
    • 圧縮側のコードの一部(jcsammmx.asm, jcsamss2.asm, jcqnt3dn.asm)にやや冗長な箇所があったので、これを修正しました。

● ソースコード (source code)

.zip ファイルは、テキストファイルの改行コードが CR+LF 、マニュアルの日本語文字コードが Shift_JIS になっていて、Windows 系向きです。.tar.gz.tar.bz2 ファイルは、改行コードが LF 、日本語文字コードが EUC-JP になっていて、 UNIX 系向きです。それ以外の内容はすべて同じです。

以下のファイルは、Fedora シリーズなどの SELinux を使用している Linux システムにおいて、スタック保護が有効になっている環境下での動作を可能にするパッチです。このパッチは、次期バージョンのリリース時にはソースコード本体に取り込まれます。(thanks to Kenny Root)

2009/01/05 (rel.2): 同梱のspecファイル(libjpeg.spec)について、fedora 10 でビルドできない不都合を修正しました。それと併せて、fedora 9/10 で java-1.6.0-openjdk が libjpeg=6b を要求することに対する対処も行ないました。

以下のファイルは、旧バージョンとの差分ファイル(diff)です。この差分ファイルは、日本語文字コードが EUC-JP の UNIX 系向けファイルセットの差分ですので、Windows 系向けファイルセットにこの差分ファイルを適用する場合は、差分ファイルの日本語文字コードを Shift_JIS に変換してから差分を適用してください。

以下のファイルは、このソースコードを Mozilla Firefox に組み込むためのパッチ(差分)です。このパッチは、Mozilla Firefox 1.5.0.1 のソースコードを元に作られていますが、他のバージョンでも小規模な修正で使えると思います。動作確認は Visual C++ 6.0 で行なっています。 Windows 以外のプラットフォームでのコンパイルは未確認です。(謝辞:このパッチは Firefox の独自ビルド版を公開されている 綾川さんの解説 を基にしました。ありがとうございます。)

2006/04/26 (rel.2): リンカオプション変数 LDFLAGS を設定した場合、設定ファイル jsimdcfg.inc が生成されなくなる場合がある不都合を修正しました。

● コンパイル済み Win32 実行ファイル (pre-complied binary for Win32)

IJG JPEG software に付属の5つのコマンドライン・ユーティリティをコンパイルしたものです。IJG から公式に配布されている MS-DOS 版DJGPP 版 の Win32/SIMD 版に相当します。DLL 版は、JPEG の圧縮/展開を行なう中心部分を DLL (jpeg62.dll) に分離したものです。コンパイルは Microsoft Visual C++ 6.0 Pro SP6 で行ないました。

なお、これらのソフトの 無改造版(非SIMD/Win32版) も、以前よりこのサイトで公開しています。

以下にあるのは、これらのソフトの日本語メッセージ版です(日本語版ソースコード)。プログラムが出力するメッセージの一部が日本語になっていて、私製の日本語マニュアル が同梱されています。それ以外は、上記の英語版と同じです。

Windows 版 GIMP を使っている場合は、DLL 版に含まれる jpeg62.dll が、 Windows 版 GTK に含まれている同名の DLL (C:\Program Files\Common Files\GTK\2.0\bin\jpeg62.dll) と互換があるようなので、それをこの SIMD 版 jpeg62.dll に入れ替えれば、 GIMP での JPEG の読み込み/書き出しが若干高速化されます。ただし、GIMP の場合は GIMP の JPEG プラグインの動作が遅いようなので、思ったほど速くはならないようです。

● コンパイル済み linux 用パッケージ (pre-complied binary for linux)

Fedora 10/9 と Vine Linux 4.2 用の RPM バイナリパッケージです。このパッケージをインストールすると、JPEG の読み込み/書き出しに共有ライブラリ (libjpeg.so.62) を利用しているソフトすべてが高速化されます(これには GIMP や Web ブラウザを含め大部分のソフトが該当します)。

一応、動作確認も行なってありますが、 何か重要な役割を担っているシステムでは、十分にテストを行なってから使用してください。これらのパッケージを使用した結果に関しては、当方は如何なる責任も負いかねます。

devel package は、libjpeg を利用したソフトウェアを開発する場合に必要になるものです。それ以外の場合は、basic package のみのインストールで十分です。

2009/01/05 (rel.3): 上述の execstack-patch rel.2 を適用して、全てのバイナリパッケージ・ソースパッケージを再ビルド(作り直し)しました。

以上の RPM バイナリパッケージの元になったソースパッケージです。RPM を扱える linux では、 NASM のパッケージをインストールしてから、rpmbuild --rebuild (ソースパッケージ名) でパッケージが出来上がります(うまくいけば)。

● 作者より

この SIMD 拡張版 IJG JPEG library は元々、拙作の SIMD Enhanced JPEG Plug-in に使用するために作り始めたものですが、いずれはこういう形でオープンソース化することを念頭に置いて開発しておりました。なので、SIMD Enhanced JPEG Plug-in では使われていない圧縮側の SIMD 化もしてあります。ちなみに、製作開始は 2002年12月。休み休み製作して、ようやっとオープンソース化にこぎ着けました。本当は 2005年の4月頃に公開する予定だったのですが、マシンの故障などの諸事情がありまして、こんなに遅くなってしまいました。

SIMD Enhanced JPEG Plug-in を初めて公開した頃は、コンピュータが十分に高速化した今では、(動画や音声はともかく) JPEG の高速化に対する需要はほとんど無いだろうと思っていました。本当は、CPU の速度がまだ遅く、MMX-Pentium が出始めた 1997 年頃にこういうものを作りたかったのです。ところが、ディジタルカメラの普及とその高精細化に伴って巨大な JPEG ファイルを扱う機会が増えたためか、 SIMD Enhanced JPEG Plug-in は予想以上の好評をいただきまして、少し予想外でした。

高速 JPEG ライブラリ としては他に、Intel JPEG library がありますが、動作速度の面で Intel JPEG library と張り合おうなんていう意図はありません(^^;。 IJG JPEG library は構造的に高速化には不向きな気がしますし、この SIMD 拡張版 IJG JPEG library は動作速度よりも計算精度重視で作ってありますので。でも、広く使われている IJG JPEG library と互換が高くオープンソースであるという点で、存在価値があればいいなぁと思っています。

現バージョンでは AMD64 には対応していませんが、AMD64 対応版は現在製作中です。 できれば今年の上半期中に、遅くても今年中には AMD64 対応版の公開を目指しています。
2006/10/26: 製作作業が現在止まっています。予定よりリリースが遅れそうです。申し訳ありません。)ただし、i386/AMD64 以外のプラットフォームへの移植の予定はありません。ですので、 Itanium 版とか PowerPC (Mac) 版 が欲しいなどという希望には応えられません。

現在のところ、英文マニュアルがありません。とはいうものの、ソースコード中のコメントを英文で書く場合にさえ苦労する場合もあるぐらいですから(^_^;;、英文マニュアルに関してはほとんど期待しないでください(英文マニュアルよりも AMD64 対応化を急ぎたい)。

ちなみに、動作速度は使用するCコンパイラによって若干異なります。私が試した中で一番速かったのは Visual C++ 6.0 Pro SP6 です。gcc だと若干速度が落ちますが、たくさんある gcc の最適化オプションをいろいろ組み合わせてみると、少しは速くなるかもしれません。ソースコードに同梱の MinGW 用の Makefile (makefile.mgw) には、私が試してみて一番速くなると思われる最適化オプションが書いてあります。

cygwin の場合だけ共有ライブラリ(DLL)の互換がない理由は、cygwin から公式に配布されている DLL cygjpeg-62.dll には、Lossless JPEG patch (ljpeg-6b.tar.gz) という、互換が崩れる追加パッチが含まれているためです。cygwin でも configure を使ってコンパイルはできますが、 cygjpeg-62.dll を置き換えることはできませんので、cygjpeg-162.dll という名前で DLL が作成されます。そしてシステムにインストールすると cygjpeg-62.dll と共存することになり、 SIMD版の cygjpeg-162.dll を利用するには、cygjpeg-62.dll を利用していたプログラムの再コンパイル(再リンク)が必要となります。


counter トップページに戻る


Independent JPEG Group's JPEG software release 6b
   with x86 SIMD extension for IJG JPEG library version 1.02


● 이 소프트는

JPEG 의 서포트 라이브러리로서 넓게 사용되고 있다 Independent JPEG Group's JPEG library (libjpeg 라이브러리) 에,Intel x86 계 CPU (이)가 가진다 SIMD 명령을 이용한 코드(루틴)를 새롭게 추가해, 고속화 개조한 것입니다. MMX (이)나 SSE 등의 SIMD 연산 기능을 장비하고 있는 프로세서상에서 동작시키면, 오리지날판의 libjpeg 라이브러리와 비교해 2~3 배정도의 속도로 동작합니다. 또,SIMD 화에 의등 없는 고속화 개조도 몇개인가 베풀어지고 있어SIMD 연산이 사용할 수 없는 구형 CPU 냄새나도, 오리지날판과 비교해 수십%정도 고속으로 동작합니다.

JPEG 압축/전개 처리의 고속화를 목적으로 하고 있습니다만, 동작 속도 최우선이 아니고, 오리지날판과 동등 이상의 계산 정도를 가지는 것을 최우선으로 생각한 코드를 채용하고 있습니다. 실제,DCT연산에 부동 소수점DCT(을)를 사용했을 경우, 및, 약간 특수한 샘플링비(h1v2)(을)를 가진다 JPEG 파일을 전개하는 경우를 제외해서는, 오리지날판과 1비트도 다르지 않은 결과를 냅니다. 상기의 2개의 예외의 경우도 오리지날판보다는 고화질화(고정밀화) 되고 있습니다.

SIMD 대응화에 즈음해서는, 가능한 한, 오리지날판의 libjpeg 라이브러리와의 호환성이 없어지지 않게 고려되고 있기 때문에, 대부분의 경우, 오리지날판을 그대로 옮겨놓는 것이 가능합니다. 특히, 공유 라이브러리에 관해서 말하면, 일부의 예외(cygwin 의 경우)를 제외해, 그것은 오리지날판과 바이너리 레벨로의 상위 호환성이 있기 때문에, 그대로 오리지날판을 옮겨놓을 수 있습니다.

● 대응하고 있는 플랫폼

Intel x86 CPU 에 고유의 기능을 이용하고 있기 때문에, 오리지날판과는 달라, Intel x86 CPU 및 그 호환 CPU (을)를 채용하고 있는 시스템에 한정됩니다. PowerPC 등의 Intel x86 계 이외의 시스템에는 대응하고 있지 않습니다.

구체적으로는,80386 이후의 Intel x86 CPU 및 그 호환 CPU (을)를 채용하고 있는 하드웨어로, 한편,32bit플랫 주소 모드(보호 모드) (을)를 사용하고 있는 플랫폼(OS)하지만 대상입니다.이것에는,Win32 (Windows 9x계/NT계) (이)나 각종 PC-UNIX (linux (이)나 xBSD 패밀리 등) 등이 해당합니다.덧붙여 AMD64 (EM64T/Intel64) 의64bit모드 환경에는(현시점에서는) 대응하고 있지 않습니다. 주의해 주십시오.

작자의 곳에서는,Win32 의 각종 C언어 처리계와NetBSD·FreeBSD·Linux (Fedora Core 4~9 & Vine Linux 3.2/4.2)·Solaris 10 (x86)·Darwin 8.0.1 (x86) (으)로의 동작 확인을 잡히고 있습니다.

● 어셈블러 NASM 의 입수/인스톨

이 x86 SIMD 판 libjpeg 라이브러리의 SIMD 확장 부분은, 그 대부분이 x86 의 어셈블리 언어로 쓰여져 있습니다.이 어셈블리 언어 원시 코드를 어셈블(assemble) 하려면 , NASM (Netwide Assembler) 그렇다고 하는 어셈블러가 별도 필요합니다.

Windows 계의 경우는, 공식 사이트 (으)로부터 nasm-0.XX.YY-win32.zip (XX.YY 에는 버젼 번호가 들어간다) (이)라는 이름의 파일을 다운로드하고, 거기에 포함된다 nasmw.exe (을)를 C컴파일러의 실행 파일군이 인스톨 되고 있는 장소에 카피합니다.

각종 PC-UNIX 의 경우는, OS 의 배포 바탕으로라고 이식이 끝난 패키지가 제공되고 있는 경우가 있기 때문에, 우선 최초로 그 쪽을 확인해 보세요.그것이 없는 경우는, 상기 공식 사이트로부터 원시 코드(혹은 RPM 패키지) (을)를 다운로드해 컴파일/인스톨 해 주세요.

덧붙여x86 판의 Darwin (이)나 Mac OS X 등에서 사용하는 경우는, 현시점에서는 아직 정식으로 릴리스 되어 있지 않다 V.0.98.40 이후의 NASM 하지만 필요합니다. 현시점에서는,V.0.98.40 (은)는 상기의 공식 사이트의 CVS 리포지터리(repository) (으)로부터 원시 코드 일식을 다운로드해 컴파일/인스톨 할 필요가 있습니다.

● 사용 조건·서포트

이 SIMD 확장판 IJG JPEG software 의 사용 조건에 대해서는, 오리지날판의 IJG JPEG software 의 사용 조건이 적용됩니다.

이 SIMD 확장판 IJG JPEG software (은)는, 오리지날 개발원의 IJG (와)과는 관계없이, 독자적으로 확장을 행한 것입니다.그러므로,이 SIMD 확장판 IJG JPEG software 에 관한 질문을, 오리지날 개발원 (The Independent JPEG Group) 에 보내지 말아 주세요.

이 SIMD 확장판 IJG JPEG software 에 관해서는, 원칙으로서 노우 서포트로 하겠습니다.의견이나 감상에 대해서는, 메일보다 당사이트의 게시판 에 대어 주셨으면 한다고 생각합니다만, 항상 어떠한 대답을 할 수 있는 것은 아니기 때문에, 아시는 바 일어나 주세요. 특히, (오리지날의 영문 메뉴얼을 포함해) 동고의 메뉴얼류에 회답이 써 있는 질문이나, 사용자의 소프트웨어 기술자로서의 기량 부족에 관련되는 질문, 질문의 요령 부득인 질문등에 대해서는, 회답을 하지 않으므로, 아무쪼록 양해 바랍니다.

● 개판 이력

  • IJG R6b with x86SIMD V1.02 (2006-02-04)
    • x86 판 Darwin 에 대응했습니다.동작 확인은 Darwin 8.0.1 for x86 에서 행했습니다. x86 판 Mac OS X 그렇지만, 동작할 것이라고 생각됩니다. 또,Solaris 10 (으)로의 동작 확인도 행했습니다.
  • IJG R6b with x86SIMD V1.01 (2006-01-26)
    • jsimdgcc.c (을)를 사용했을 때,NEED_SHORT_EXTERNAL_NAMES 하지만 정의되고 있으면 정상적으로 링크 할 수 없는 버그를 수정했습니다.
    • 압축측의 코드의 일부(jcsammmx.asm, jcsamss2.asm, jcqnt3dn.asm)에 약간 장황한 개소가 있었으므로, 이것을 수정했습니다.

● 원시 코드 (source code)

.zip 파일은, 텍스트 파일의 개행 코드가 CR+LF , 메뉴얼의 일본어 문자 코드가 Shift_JIS (이)가 되어 있고,Windows 계 방향입니다..tar.gz (와)과 .tar.bz2 파일은, 개행 코드가 LF , 일본어 문자 코드가 EUC-JP (이)가 되어 있고, UNIX 계 방향입니다.그 이외의 내용은 모두 같습니다.

이하의 파일은,Fedora 시리즈등의 SELinux (을)를 사용하고 있다 Linux 시스템에 대하고, 스택 보호가 유효하게 되어 있는 환경하에서의 동작을 가능하게 하는 패치입니다.이 패치는, 차기 버젼의 릴리스시에는 원시 코드 본체에 받아들여집니다.(thanks to Kenny Root)

2009/01/05 (rel.2): 동고의spec파일(libjpeg.spec)에 대해서,fedora 10 그리고 빌드 할 수 없는 부적당을 수정했습니다. 그것과 아울러,fedora 9/10 그리고 java-1.6.0-openjdk 하지만 libjpeg=6b (을)를 요구하는 것에 대하는 대처도 행했습니다.

이하의 파일은, 구버젼과의 차분 파일(diff)입니다.이 차분 파일은, 일본어 문자 코드가 EUC-JP 의 UNIX 계를 위한 파일 세트의 차분이므로,Windows 계를 위한 파일 세트에 이 차분 파일을 적용하는 경우는, 차분 파일의 일본어 문자 코드를 Shift_JIS (으)로 변환하고 나서 차분을 적용해 주세요.

이하의 파일은, 이 원시 코드를 Mozilla Firefox 에 짜넣기 위한 패치(차분)입니다. 이 패치는,Mozilla Firefox 1.5.0.1 의 원시 코드를 바탕으로 만들어져 있습니다만, 다른 버젼에서도 소규모의 수정으로 사용할 수 있다고 생각합니다.동작 확인은 Visual C++ 6.0 그리고 행하고 있습니다. Windows 이외의 플랫폼에서의 컴파일은 미확인입니다.(사례:이 패치는 Firefox 의 독자 빌드판이 공개되고 있다 아야천씨의 해설 (을)를 기본으로 했습니다.감사합니다.)

2006/04/26 (rel.2): 린카오프션 변수 LDFLAGS (을)를 설정했을 경우, 설정 파일 jsimdcfg.inc 하지만 생성되지 않게 되는 경우가 있는 부적당을 수정했습니다.

● 컴파일이 끝난 상태 Win32 실행 파일 (pre-complied binary for Win32)

IJG JPEG software 에 부속의 5개의 커멘드 라인· 유틸리티를 컴파일 한 것입니다.IJG (으)로부터 공식으로 배포되고 있다 MS-DOS 판 /DJGPP 판 의 Win32/SIMD 판에 상당합니다.DLL 판은,JPEG 의 압축/전개를 행하는 중심부분을 DLL (jpeg62.dll) 로 분리한 것입니다.컴파일은 Microsoft Visual C++ 6.0 Pro SP6 그리고 행했습니다.

덧붙여 이러한 소프트의 무개조판(비SIMD/Win32판) 도, 이전보다 이 사이트로 공개하고 있습니다.

이하에 있는 것은, 이러한 소프트의 일본어 메세지판입니다 (일본어판 원시 코드). 프로그램이 출력하는 메세지의 일부가 일본어가 되어 있고, 사제의일본어 메뉴얼 하지만 동고 되고 있습니다. 그 이외는, 상기의 영문판과 같습니다.

Windows 판 GIMP (을)를 사용하고 있는 경우는,DLL 판에 포함된다 jpeg62.dll 하지만, Windows 판 GTK 에 포함되어 있는 동명의 DLL (C:/^]!/Program Files/^]!/Common Files/^]!/GTK/^]!/2.0/^]!/bin/^]!/jpeg62.dll) (와)과 호환이 있는 것으로, 그것을 이 SIMD 판 jpeg62.dll (으)로 바꾸어 넣으면, GIMP (으)로의 JPEG 의 읽기/서두가 약간 고속화됩니다.다만,GIMP 의 경우는 GIMP 의 JPEG 플러그 인의 동작이 늦은 듯한 것으로, 생각한 만큼 빠르게는 안 되는 것 같습니다.

● 컴파일이 끝난 상태 linux 용패키지 (pre-complied binary for linux)

Fedora 10/9 (와)과 Vine Linux 4.2 용무의 RPM 바이너리 패키지입니다. 이 패키지를 인스톨 하면,JPEG 의 읽어들여/서두에 공유 라이브러리 (libjpeg.so.62) (을)를 이용하고 있는 소프트 모든 것이 고속화됩니다 (이것에는 GIMP (이)나 Web 브라우저를 포함해 대부분의 소프트가 해당합니다).

일단, 동작 확인도 행해 있습니다만, 무엇인가 중요한 역할을 담당하고 있는 시스템에서는, 충분히 테스트를 행하고 나서 사용해 주세요. 이러한 패키지를 사용한 결과에 관해서는, 이 쪽은 어떤 책임도 지기 어렵습니다.

devel package (은)는,libjpeg (을)를 이용한 소프트웨어를 개발하는 경우에 필요하게 되는 것입니다. 그 이외의 경우는,basic package 만의 인스톨로 충분합니다.

2009/01/05 (rel.3): 상술의 execstack-patch rel.2 (을)를 적용하고, 모든 바이너리 패키지·소스 패키지를 재빌드(만들어 수선) 했습니다.

이상의 RPM 바이너리 패키지의 바탕으로 된 소스 패키지입니다.RPM (을)를 취급할 수 있다 linux 그럼, NASM 의 패키지를 인스톨 하고 나서,rpmbuild --rebuild (소스 패키지명) 그리고 패키지가 완성됩니다(잘 되면).

● 작자보다

이 SIMD 확장판 IJG JPEG library (은)는 원래, 졸작의 SIMD Enhanced JPEG Plug-in 에 사용하기 위해서 만들기 시작한 것입니다만, 머지않아 이런 형태로 오픈 소스화하는 것을 염두에 두어 개발하고 있었습니다. 그래서,SIMD Enhanced JPEG Plug-in 그럼 사용되지 않은 압축측의 SIMD 화도 되어 있습니다.덧붙여서, 제작 개시는 2002년12월. 쉬엄쉬엄 제작하고, 나름 겨우 오픈 소스화에 도달했습니다. 사실은 2005해의4월 무렵에 공개할 예정이었습니다만, 머신의 고장등의 여러가지 사정이 있어서, 이렇게 늦어져 버렸습니다.

SIMD Enhanced JPEG Plug-in (을)를 처음으로 공개했을 무렵은, 컴퓨터가 충분히 고속화한 지금은, (동영상이나 음성은 차치하고) JPEG 의 고속화에 대한 수요는 거의 없을 것이라고 생각했습니다. 사실은,CPU 의 속도가 아직 늦고,MMX-Pentium 하지만 나오기 시작했다 1997 년경에 이런 것을 만들고 싶었습니다. 그런데 , 디지탈 카메라의 보급과 그 고정밀화에 수반해 거대한 JPEG 파일을 취급할 기회가 증가했기 때문에인가, SIMD Enhanced JPEG Plug-in (은)는 예상 이상의 호평을 받아서, 조금 예상외였습니다.

고속 JPEG 라이브러리 (으)로서는 그 밖에,Intel JPEG library 하지만 있습니다만, 동작 속도의 면에서 Intel JPEG library (와)과 겨루다니 말하려는 의도는 없습니다(^^;. IJG JPEG library (은)는 구조적으로 고속화에는 적합하지 않은 생각이 들고, 이 SIMD 확장판 IJG JPEG library (은)는 동작 속도보다 계산 정도 중시로 만들어 있기 때문에. 그렇지만, 넓게 사용되고 있다 IJG JPEG library (와)과 호환이 높게 오픈 소스이다고 하는 점으로, 존재 가치가 있으면 좋겠다라고 생각합니다.

현버젼에서는 AMD64 에는 대응하고 있었습니다만,AMD64 대응판은 현재 제작중입니다. 할 수 있으면 금년의 상반기중에, 늦어도 금년중에는 AMD64 대응판의 공개를 목표로 하고 있습니다.
(2006/10/26: 제작 작업이 현재 멈추어 있습니다.예정보다 릴리스가 늦을 것 같습니다.죄송합니다.) 다만,i386/AMD64 이외의 플랫폼에의 이식의 예정은 없습니다.그러므로, Itanium 판이라든지 PowerPC (Mac) 판 (을)를 갖고 싶다는 등 말하는 희망에는 응할 수 없습니다.

현재로서는, 영문 메뉴얼이 없습니다.그렇다고는 하지만, 원시 코드중의 코멘트를 영문으로 쓰는 경우에마저 고생하는 경우도 있는 정도이기 때문에(^_^;;, 영문 메뉴얼에 관해서는 거의 기대하지 말아 주세요 (영문 메뉴얼보다 AMD64 대응화를 급한 것 싶다).

덧붙여서, 동작 속도는 사용하는 C컴파일러에 의해서 약간 다릅니다. 내가 시험한 가운데 제일 빨랐던 것은 Visual C++ 6.0 Pro SP6 입니다.gcc (이)라면 약간 속도가 떨어집니다만, 많이 있다 gcc 의 최적화 옵션을 여러 가지 조합해 보면, 조금은 빨라질지도 모릅니다. 원시 코드에 동고의 MinGW 용무의 Makefile (makefile.mgw) 에는, 내가 시험해 보고 제일 빨라진다고 생각되는 최적화 옵션이 써 있습니다.

cygwin 의 경우만 공유 라이브러리(DLL)의 호환이 없는 이유는,cygwin (으)로부터 공식으로 배포되고 있다 DLL cygjpeg-62.dll 에는,Lossless JPEG patch (ljpeg-6b.tar.gz) 그렇다고 하는, 호환이 무너지는 추가 패치가 포함되어 있기 (위해)때문입니다.cygwin 그렇지만 configure (을)를 사용하고 컴파일은 할 수 있습니다만, cygjpeg-62.dll (을)를 옮겨놓을 수 없기 때문에,cygjpeg-162.dll (이)라는 이름으로 DLL 하지만 작성됩니다.그리고 시스템에 인스톨 하면 cygjpeg-62.dll (와)과 공존하게 되어, SIMD판의 cygjpeg-162.dll (을)를 이용하려면 ,cygjpeg-62.dll (을)를 이용하고 있던 프로그램의 재컴파일 (재링크)(이)가 필요합니다.


function j2k_select_translate() { if (document.getSelection) text = document.getSelection(); else if (document.selection) text = document.selection.createRange().text; else return; var j2k_window = window.open("http://j2k.naver.com/j2k_brief.php?mode=k2j&selection=" + text.replace(/ /g, "+"), "_blank", "left=1,top=1,width=585,height=370,status=yes,resizable=yes,toolbar=yes"); j2k_window.focus(); } document.write("");

by maxpaper | 2009/01/22 01:04 | 트랙백(3) | 덧글(0)

트랙백 주소 : http://maxpaper.egloos.com/tb/4493558
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from Keflex tics. at 2009/11/22 05:27

제목 : Keflex.
Keflex. Side effects of keflex. Keflex side-effects. Keflex dosage....more

Tracked from Side effects.. at 2009/11/24 04:46

제목 : Cialis and levitra.
Buy sublingual levitra online. Generic drugs viagra cialis levitra and more....more

Tracked from Intravenous .. at 2011/09/22 09:39

제목 : Ultram prescriptio.
Ultram doses. Ultram er. Ultram....more

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶