インテル Integrated Performance Primitives (IPP) とは、マルチメディア・画像処理・信号処理のために最適化された基本関数群からなるソフトウェアライブラリである。ライブラリはインテルプロセッサならびに互換プロセッサをサポートしており、Windows、Linux、macOS、Androidオペレーティングシステムの各プラットフォームで利用可能である。
ディスパッチ機能 IPPは複数世代のプロセッサごとに実装された複数の最適コードの中から、実行時に環境に応じて最適なものを動的選択するディスパッチ機能をサポートしているインテル® IPP 9.0 ユーザーズガイド | ディスパッチインテル® IPP 9.0 ユーザーズガイド | コア関数とサポート関数。たとえばSSE/SSE2命令までをサポートするプロセッサではSSE/SSE2を利用したコードを、AVX命令までをサポートするプロセッサではAVXを利用したコードを実行する、などである。IPPを動的リンク(ダイナミックリンク)する場合は、実行時に自動的に最適な共有ライブラリのモジュール(Windows版ではDLL)が選択されるが、静的リンク(スタティックリンク)する場合はippStaticInit()関数(IPP 9.0から廃止Appendix B: Removed Functions)またはippInit()関数をあらかじめ明示的に呼び出しておく必要があるコア関数インテル(R) インテグレーテッド・パフォーマンス・プリミティブ Linux* 版ユーザーガイド | ダイナミック・リンクインテル(R) インテグレーテッド・パフォーマンス・プリミティブ Linux* 版ユーザーガイド | スタティック・リンク (ディスパッチあり)。ippInit()を呼び出すタイミングは、通例アプリケーションプログラムのエントリポイント(main関数)だがインテル® IPP 9.0 ユーザーズガイド | インテル® IPP アプリケーションのビルド、動的リンクされるユーザーライブラリの内部でIPPを使用する場合は、ユーザーライブラリのスタートアッププロセス(WindowsではDllMain関数)でのippInit()呼び出しが必要となることがあるIntel® IPP - Intel® IPP linkage models - quick reference guide | Intel® Developer Zone。
マルチスレッド対応 IPPにはマルチスレッドバージョンとシングルスレッドバージョンが存在する。マルチスレッドバージョンは各関数の内部で複数のスレッドを利用して処理を分割することで、マルチコアCPUの性能を引き出すことができる。ただしIPP関数はすべてスレッドセーフであるインテル® IPP 9.0 ユーザーズガイド | 付録 B: インテル® IPP スレッディングと OpenMP* のサポートので、シングルスレッドバージョンを用いてアプリケーションコード側でより粒度の大きいマルチスレッド対応を行なうことも可能である。なお、内部スレッド化すなわちマルチスレッドバージョンはIPP 7.1で非推奨 (deprecated) となっており、シングルスレッドバージョンの利用が推奨されているインテル® IPP の使用を開始する前にインテル® インテグレーテッド・パフォーマンス・プリミティブ 8.2 ユーザーズガイド | 付録 B: インテル® IPP スレッディングと OpenMP* のサポート (廃止予定)。またこれに伴い、ippSetNumThreads()などの関数が非推奨 (deprecated) となっているippSetNumThreads deprecated - suggested replacement?。IPP 9.0でシングルスレッドライブラリはIntel C++ Compilerランタイムライブラリへの依存を削除した。マルチスレッドライブラリはIntel OpenMPライブラリにのみ依存するIntel® Integrated Performance Primitives 2020 Release Notes and New Features。
IPPCV もともとOpenCVはオプションとして通常版のIntel IPPを利用して最適化されたコードをビルドすることもできていたが、OpenCV 3.0にて、Intel IPPのサブセットがIPPCV (IPPICV) として寄贈されたIntel® IPP - Open Source Computer Vision Library (OpenCV) FAQ。IPPCVは、すべてのOpenCVユーザーが商用・非商用を問わず無料で使用することができるOpenCV 3.0 - OpenCVOpenCV's Platinum Membership - OpenCVLicense of ippicv while distributing OpenCV - No clear answer from Intel on similar question yet - Intel Community。
無償版 インテルによるサポートを受ける場合や旧バージョンが必要な場合など、IPPの利用は基本的に有償になるが、最新バージョンに限り無償で利用可能な、コミュニティライセンスや学術研究機関向けライセンスも存在するインテル® IPP の無料オプション、サポートなし、ロイヤルティー・フリー | iSUS。
脚注
関連項目 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
Release notes Previous release notes