インテル(R) コンパイラーでは、C++ の標準的な valarray コンテナー用に、ハイパフォーマンスな特別の valarray 演算が用意されています。
標準の C++ の valarray テンプレートには、ハイパフォーマンス・コンピューティング向けの配列演算やベクトル演算が含まれています。これらの演算は、並列処理などのハイパフォーマンスなハードウェア機能を活用し、パフォーマンスを最大限に引き出します。インテル(R) コンパイラーには、次の演算およびデータ型で固有プロセッサーに特化したハイパフォーマンスを提供する代替ヘッダーが実装されています。これらの代替ヘッダーを使用するには、インテル(R) インテグレーテッド・パフォーマンス・プリミティブ (インテル(R) IPP) をインストールする必要があります。
演算子 |
valarray のデータ型 |
---|---|
abs、acos、asin、atan、atan2、cos、cosh、exp、log、log10、pow、sin、sinh、sqrt、tan、tanh |
float、double |
addition、subtraction、division、multiplication |
float、double |
bitwise or、and、xor |
char、short、int (すべて符号なし) |
min、max、sum |
short または符号付き int、float、double |
次の 2 つの例は、インテルの valarray 代替ヘッダーファイルをインクルードし、インテル(R) IPP とリンクするための、プログラムのコンパイルとリンク方法を示します。詳細は、インテル(R) IPP のドキュメントを参照してください。
次の例で使用する用語の説明:
compiler_dir は、インテル(R) C++ コンパイラーがインストールされているディレクトリーです。
ipp_include_dir は、インテル(R) IPP のインクルード・ディレクトリーです。
ipp_lib_dir は、インテル(R) IPP ライブラリーが格納されているディレクトリーです。
"マージ" ライブラリーでは、すべてのプロセッサー固有のライブラリー・コードを含むスタティック・ライブラリーを使用しています。
次のコマンドラインは、IA-32 アーキテクチャー・ベースの Windows システムで、コンパイルとリンクを別々に実行します。
DLL (ダイナミック):
icl -Icompiler_dir/perf_headers/c++ -Iipp_include_dir /c source.cpp
icl source.obj /link /libpath:ipp_lib_dir ippcore.lib ipps.lib ippvm.lib
マージ (スタティック):
icl -Icompiler_dir/perf_headers/c++ -Iipp_include_dir /c source.cpp icl source.obj /link /libpath:ipp_lib_dir ippcorel.lib ippsemerged.lib ippsmerged.lib ippvmemerged.lib ippvmmerged.lib
次のコマンドラインは、インテル(R) 64 アーキテクチャー・ベースの Linux システムで、コンパイルとリンクを別々に実行します。
so (ダイナミック):
icpc -Icompiler_dir/perf_headers/c++ -Iipp_include_dir -c source.cpp
icpc source.o -Lipp_lib_dir -lippsem64t -lippvmem64t -lippcoreem64t
マージ (スタティック):
icpc -Icompiler_dir/perf_headers/c++ -Iipp_include_dir -c source.cpp
icpc source.o -Lipp_lib_dir -lippsemergedem64t -lippsmergedem64t -lippvmemergedem64t -lippvmmergedem64t -lippcoreem64t
すべてのプロセッサー固有のライブラリー・コードを含むスタティック・マージ・ライブラリーを使用するには、インテル(R) IPP 呼び出しの前に、ippStaticInit 関数を呼び出す必要があります。これにより、ランタイム時に正しいバージョンのライブラリー・コードへ自動的にディスパッチされます。最初に ippStaticInit を呼び出さないと、ライブラリーは標準のライブラリー・コードを使用します。
ダイナミック・ライブラリーを使用する場合、ippStaticInit を呼び出す必要はありません。