Intel Integrated Performance Primitives

Intel Integrated Performance Primitives開発元|  インテル

|

最新版|

2021.9 / 2023年7月 (11 か月前) (2023-07)[1]

種別|  ライブラリ
ライセンス|  プロプライエタリ
公式サイト|  Intel® Integrated Performance Primitives (Intel® IPP)
テンプレートを表示

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

## ディスパッチ機能[編集]

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

## マルチスレッド対応[編集]

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

## IPPCV[編集]

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

## 無償版[編集]

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

## 脚注[編集]

[脚注の使い方]

1. ^ Intel® Integrated Performance Primitives (IPP) version 2021.9 release is now available for download. - Intel Community
2. ^ インテル® IPP 9.0 ユーザーズガイド | ディスパッチ
3. ^ インテル® IPP 9.0 ユーザーズガイド | コア関数とサポート関数
4. ^ Appendix B: Removed Functions
5. ^ コア関数
6. ^ インテル(R) インテグレーテッド・パフォーマンス・プリミティブ Linux* 版ユーザーガイド | ダイナミック・リンク
7. ^ インテル(R) インテグレーテッド・パフォーマンス・プリミティブ Linux* 版ユーザーガイド | スタティック・リンク (ディスパッチあり)
8. ^ インテル® IPP 9.0 ユーザーズガイド | インテル® IPP アプリケーションのビルド
9. ^ Intel® IPP - Intel® IPP linkage models - quick reference guide | Intel® Developer Zone
10. ^ インテル® IPP 9.0 ユーザーズガイド | 付録 B: インテル® IPP スレッディングと OpenMP* のサポート
11. ^ インテル® IPP の使用を開始する前に[リンク切れ]
12. ^ インテル® インテグレーテッド・パフォーマンス・プリミティブ 8.2 ユーザーズガイド | 付録 B: インテル® IPP スレッディングと OpenMP* のサポート (廃止予定)
13. ^ ippSetNumThreads deprecated - suggested replacement?
14. ^ Intel® Integrated Performance Primitives 2020 Release Notes and New Features
15. ^ Intel® IPP - Open Source Computer Vision Library (OpenCV) FAQ
16. ^ OpenCV 3.0 - OpenCV
17. ^ OpenCV's Platinum Membership - OpenCV
18. ^ License of ippicv while distributing OpenCV - No clear answer from Intel on similar question yet - Intel Community
19. ^ インテル® 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