インテル C++ コンパイラーに付属するライブラリの1つに「インテル インテグレーテッド・パフォーマンス・プリミティブ」(Integrated Performance Premitive、以下IPP)がある。IPPは動画や音声、画像などの処理に向けた関数を備えたライブラリなのだが、実際のところIPPがどのようなものなのか分からない方も多いだろう。そこで本記事では、IPPには何が含まれており、またどのような用途に使えるのか、紹介していこう。
動画や画像、音声といったデータを扱うアプリケーションを作成する場合、面倒なのがデータのデコード/エンコード処理といった定型的処理や、各種処理アルゴリズムの実装だ。リファレンスコードなどを参考に実装する、という手もあるが、このようなデータを高速に処理できるように実装するのは容易ではない。そこで重宝するのが、よく使われる処理があらかじめ実装されているマルチメディア処理ライブラリである。IPPはこのようなマルチメディア処理ライブラリの1つだ。
IPPは信号処理や動画/画像処理、行列処理および線形演算、暗号化といった用途に向けた各種関数群を集めたライブラリで、表1のような分野で利用できる関数を備えている。
| 分類 | 機能 |
|---|---|
| 信号処理 | ベクトル処理 |
| フィルタ処理 | |
| 信号変換 | |
| 話し言葉認識 | |
| 音声エンコーディング | |
| データ圧縮 | |
| 信号の整合性チェック | |
| 動画/画像処理 | カラー変換 |
| 比較、閾値処理 | |
| データ変換 | |
| モーフィング | |
| フィルタ処理 | |
| 線形変換 | |
| 統計処理 | |
| 座標変換 | |
| ウェーブレット変換 | |
| コンピュータビジョン | |
| 画像比較 | |
| 動画エンコーディング | |
| 行列処理/線形演算 | ベクトル演算 |
| 行列演算 | |
| 線形システム処理 | |
| 最小二乗法ソルバー | |
| 固有値問題 | |
| 3次元データ処理 | |
| 暗号化 | 対照暗号 |
| ハッシュおよびデータ認証 | |
| 巨大な数値の数学的処理 | |
| モンゴメリ演算 | |
| 疑似乱数の生成 | |
| 素数生成 | |
| RSAアルゴリズム | |
| DSA処理 |
IPPの特徴は、インテル コンパイラや、インテル コンパイラにIPPとともに同梱されるインテル マス・カーネル・ライブラリ(Math Kernel Library、以下MKL)などと同じく、インテル製CPUに最適化されている点と、Windows/Linux/Mac OS Xという複数の環境に対応していること、そして並列化に対応している点だ。
IPPは32ビットおよび64ビットの両方の環境(x86/x64/IA-64)で利用でき、関数はすべてインテルCPU向けに最適化されているほか、ベクトル演算や統計演算、フィルタリング、動画/画像のエンコード/デコード処理などはマルチプロセッサ/マルチコア環境でより高いパフォーマンスを発揮できるよう、内部的にマルチスレッド化されている。