インテル® IPP を使用して単純化できる重要な関数がいくつかあります。ここでは、その方法を説明します。これには、リターンステータス、システム/ライブラリーの問い合わせ、メモリー割り当て、正規化が含まれます。
インテル® IPP には、さまざまなエラーメッセージと警告メッセージがあります。ippGetStatusString 関数は、リターンステータス (数値) を読みやすいテキスト形式にデコードします。
IppStatus st = ippsAddC_16s_I (3, 0, 0); printf(“%d : %s\n”, st, ippGetStatusString(st));テキスト形式の値は、ippdefs.h にもありますが、この関数を使用することでエラー報告とデバッグが非常に簡単になります。
各ドメインには、ディスパッチされたライブラリー・レイヤーの情報を返す GetLibVersion 関数があります。
const IppLibraryVersion* lib = ippiGetLibVersion();
printf(“%s %s %d.%d.%d.%d\n”, lib->Name, lib->Version,
lib->major, lib->minor, lib->majorBuild, lib->build);
これは通常、実行中のインテル® IPP のレイヤーを特定するのに役立ちます。ippInitCpu と併せて使用すると、同一マシン上で異なる実装の出力を比較することができます。
また、最新のマシン上でスタティック・リンクを使用する際、ippInit() を実行すると、ライブラリー・バージョンが変更されます。 この初期化により、ディスパッチャーはシステムに最適なライブラリー・レイヤーを決定できます。ippInit がなくても関数呼び出しは動作しますが、利用可能な最小レベルの最適化が使用されます。
インテル® IPP 関数は、ポインターがアライメントされているデータを処理すると、より高速に実行されます。
ポインターのアライメント、メモリーの割り当ておよび割り当て解除には、以下のインテル® IPP 関数を使用します。
void* ippAlignPtr(void* ptr, int alignBytes)ポインターを 2 の累乗、つまり 2、4、8、16... バイト境界にアライメントします。
void* ippMalloc(int length)32 バイト境界にアライメントされたメモリーを割り当てます。メモリーを解放するには、ippFree 関数を使用します。
void ippFree(void* ptr)
ippMalloc 関数を使用して割り当てられたメモリーを解放します。
Ipp<datatype>* ippsMalloc_<datatype>(int len)
異なるデータ型の信号要素に、32 バイト境界にアライメントされたメモリーを割り当てます。メモリーを解放するには、ippsFree 関数を使用します。
void ippsFree(void* ptr)
ippsMalloc 関数を使用して割り当てられたメモリーを解放します。
Ipp<datatype>* ippiMalloc_<mod>(int widthPixels, int heightPixels, int* pStepBytes)
すべての行がゼロでパディングされている画像に、32 バイト境界にアライメントされたメモリーを割り当てます。メモリーを解放するには、ippiFree 関数を使用します。
void ippiFree(void* ptr)
ippiMalloc 関数を使用して割り当てられたメモリーを解放します。
割り当て可能なメモリー容量は、オペレーティング・システムとシステムのハードウェアによって決まります。ただし、2GB を超えることはできません。