Intel Integrated Performance Primitives

インテル Integrated Performance Primitives (IPP) とは、マルチメディア・画像処理・信号処理のために最適化された基本関数群からなるソフトウェアライブラリである。ライブラリはインテルプロセッサならびに互換プロセッサをサポートしており、Windows、Linux、macOS、Androidオペレーティングシステムの各プラットフォームで利用可能である。

ディスパッチ機能 
IPPは複数世代のプロセッサごとに実装された複数の最適コードの中から、実行時に環境に応じて最適なものを動的選択するディスパッチ機能をサポートしている。たとえばSSE/SSE2命令までをサポートするプロセッサではSSE/SSE2を利用したコードを、AVX命令までをサポートするプロセッサではAVXを利用したコードを実行する、などである。IPPを動的リンク（ダイナミックリンク）する場合は、実行時に自動的に最適な共有ライブラリのモジュール（Windows版ではDLL）が選択されるが、静的リンク（スタティックリンク）する場合はippStaticInit()関数（IPP 9.0から廃止）またはippInit()関数をあらかじめ明示的に呼び出しておく必要がある。ippInit()を呼び出すタイミングは、通例アプリケーションプログラムのエントリポイント（main関数）だが、動的リンクされるユーザーライブラリの内部でIPPを使用する場合は、ユーザーライブラリのスタートアッププロセス（WindowsではDllMain関数）でのippInit()呼び出しが必要となることがある。

マルチスレッド対応 
IPPにはマルチスレッドバージョンとシングルスレッドバージョンが存在する。マルチスレッドバージョンは各関数の内部で複数のスレッドを利用して処理を分割することで、マルチコアCPUの性能を引き出すことができる。ただしIPP関数はすべてスレッドセーフであるので、シングルスレッドバージョンを用いてアプリケーションコード側でより粒度の大きいマルチスレッド対応を行なうことも可能である。なお、内部スレッド化すなわちマルチスレッドバージョンはIPP 7.1で非推奨 (deprecated) となっており、シングルスレッドバージョンの利用が推奨されている。またこれに伴い、ippSetNumThreads()などの関数が非推奨 (deprecated) となっている。IPP 9.0でシングルスレッドライブラリはIntel C++ Compilerランタイムライブラリへの依存を削除した。マルチスレッドライブラリはIntel OpenMPライブラリにのみ依存する。

IPPCV 
もともとOpenCVはオプションとして通常版のIntel IPPを利用して最適化されたコードをビルドすることもできていたが、OpenCV 3.0にて、Intel IPPのサブセットがIPPCV (IPPICV) として寄贈された。IPPCVは、すべてのOpenCVユーザーが商用・非商用を問わず無料で使用することができる。

無償版 
インテルによるサポートを受ける場合や旧バージョンが必要な場合など、IPPの利用は基本的に有償になるが、最新バージョンに限り無償で利用可能な、コミュニティライセンスや学術研究機関向けライセンスも存在する。

脚注

関連項目 
 Intel C++ Compiler
 Intel Parallel Studio
 OpenMP
 OpenCV
 Intel Math Kernel Library
 Intel Threading Building Blocks

外部リンク 
 Developer Reference for Intel® Integrated Performance Primitives
 インテル®アーキテクチャ対応インテル®インテグレーテッド・パフォーマンス・プリミティブ（IPP）リファレンス・マニュアル 第1巻：信号処理 (IPP 3.0)
 インテル®アーキテクチャ対応インテル®インテグレーテッド・パフォーマンス・プリミティブ（IPP）リファレンス・マニュアル 第2巻：画像および動画処理 (IPP 3.0)
 Intel® Integrated Performance Primitives Release Notes for Intel® oneAPI Base Toolkit

ライブラリ (プログラミング)
長大な項目名