スタティック・リンク (ディスパッチあり)

利用するインテル® IPP 関数の数が少なく、必要なメモリー・フットプリントが小さいアプリケーションもあります。スタティック・リンク・ライブラリーを使用すると、小さなフットプリントと、複数のプロセッサーにおける最適化という両方の長所を活かすことができます。 スタティック・ライブラリー (例えば、libipps_l.a) は、非修飾の (標準名の) インテル® IPP 関数のエントリーポイントと、各プロセッサー固有の実装へのジャンプテーブルを提供します。 アプリケーションをリンクするとき、関数は、libippcore_l.a の関数で検出されたプロセッサーの設定に従って対応する関数を呼び出します。

スレッド化されたインテル® IPP 関数を使用する場合は、スタティック・ライブラリーのマルチスレッド・バージョン (例えば、libipps_t.a) とマルチスレッド・バージョンの libippcore_t.a にリンクする必要があります。

次のいずれかの関数を選択してライブラリーを初期化できます。

この 2 つのうちいずれかの関数を、他のインテル® IPP 関数を使用する前に呼び出す必要があります。初期化関数を呼び出さなかった場合、インテル® IPP 関数の C 最適化バージョンが呼び出されます。その結果、アプリケーションのパフォーマンスが低下します。次の例は、パフォーマンスの違いを示しています。この例は、t2.cpp ファイルに含まれています。

: StaticInit を呼び出した場合と呼び出さなかった場合のパフォーマンスの違い

                #include <stdio.h>
                #include <ipp.h>
                
                int main() {
                   const int N = 20000, loops = 100;
                   Ipp32f src[N], dst[N];
                   unsigned int seed = 12345678, i;
                   Ipp64s t1,t2;
                   /// no StaticInit call, means PX code, not optimized
                   ippsRandUniform_Direct_32f(src,N,0.0,1.0,&seed);
                   t1=ippGetCpuClocks();
                   for(i=0; i<loops; i++)
                      ippsSqrt_32f(src,dst,N);
                   t2=ippGetCpuClocks();
                   printf("without StaticInit: %.1f clocks/element\n",
                         (float)(t2-t1)/loops/N);
                   ippStaticInit();
                   t1=ippGetCpuClocks();
                   for(i=0; i<loops; i++)
                      ippsSqrt_32f(src,dst,N);
                   t2=ippGetCpuClocks();
                   printf("with StaticInit: %.1f clocks/element\n",
                         (float)(t2-t1)/loops/N);
                   return 0;
                }
                
                
                
                t2.cpp
                cmdlinetest>t2
                without StaticInit: 61.3 clocks/element
                with StaticInit: 4.5 clocks/element

次の表は、スタティック・リンクの長所と短所の要約です。

スタティック・リンクの機能の要約 (ディスパッチあり)

長所

短所

  • ランタイム中にプロセッサー固有の最適化をディスパッチ

  • ライブラリーを含むアプリケーションの実行ファイルを作成

  • フルセットのインテル® IPP SO よりも小さなフットプリントを生成

  • インテル® IPP コードが複数のインテル® IPP ベースのアプリケーションに重複して含まれる

  • プログラムの初期化中にディスパッチャー初期化用の追加関数呼び出しが (1 回) 必要

ディスパッチありのスタティック・リンクを使用するには、次の操作を行います。


  1. アプリケーションに ipp.h をインクルードします。このヘッダーはすべてのインテル® IPP ドメインのヘッダーファイルをインクルードします。

  2. ippStaticInit() または ippInitCPU() のいずれかの関数をヘッダーファイル ippcore.h で宣言して使用し、スタティック・ディスパッチャーを初期化します。

  3. 標準 (非修飾) の関数名を使用してインテル® IPP 関数を呼び出します。

  4. 対応するスタティック・ライブラリー、libippcore_l.a または libippcore_t.a を (順に) リンクします。 例えば、ippsCopy_8u() 関数を使用する場合、libipps_l.a および libippcore_l.a ライブラリーをリンクします。


このヘルプトピックについてのフィードバックを送信

© 2008 - 2010 Intel Corporation. 無断での引用、転載を禁じます。