Delphiでコーディングされている信号処理(signal processing)または科学計算 (scientific calculation)を行うアプリケーションが世の中に数多く存在いたしますが、おそらくそれらの多くは「OptiVec」というライブラリを利用しています。
OptiVecは、4000以上のベクトル関数や行列関数、複素数演算ルーチンを含む、完全に手作業で最適化されたライブラリのセットです。
OptiVecには、すべての整数および浮動小数点(複素数を含む)データ型用のC/C/C++/Pascal/Delphi のすべての演算子および数学関数の完全にベクトル化された形式に加え、統計、分析、FFT 技術、曲線フィット、補間、ベクトルおよび行列代数、行列分解、およびグラフィックスのための他の多くの実数および複素数数学関数およびルーチンが含まれています。部分的には、OptiVecはよく知られている BLASやLINPACKライブラリと重複していますが、より簡単な命名法と一般的に効率的な実装を特徴としています。
OptiVecの特徴
OptiVecには、主に3つの機能グループがあります。
[crayon-6740a32304167977198202/]さらにOptiVecでは、最新バーション(OptiVec 8.0)で以下の機能が提供されています。
- GCCまたはCLangでLinuxのサポート
- すべての線形システム操作(LUDおよびSVDベースの)ためのスレッドセーフの強化
- すべてのlinfitおよびnonlinfit関数のスレッドセーフの強化
- 第4世代IntelCore i(Haswell +)またはAMD Excavator+以降のプロセッサで最高のパフォーマンスを実現するAVX、AVX2、およびFMAを利用したP9ライブラリ
- すべてのターゲットコンパイラ用のCUDA対応ライブラリ※(現在はWindowsのみ)
(※CUDA対応ライブラリ: OptiVecライブラリは静的なもので、DLL形式ではありません。つまり、実際に必要な関数のみがアプリケーションへ静的にリンクされる仕様です。もちろん、OptiVec関数をDLL へ自由に含めることができ、アプリケーションを配布する際にこれ以外の別のDLLは不要です。ただし、この原則の例外として、CUDA対応のOptiVecライブラリには、実際のCUDAコードを含む追加のDLLが必要です。)
またOptiVecでは、ベクトル化のプログラミングで実行速度を重視する場合、大きなアドバンテージを持っています。通常、数値データを処理するほとんどのプログラムはループで構成されています。 ただし、ループのオーバーヘッドは不必要に遅くなります。OptiVecでは、これらのループを手動で最適化されたアセンブラで記述されたベクトル関数と行列ルーチンに置き換えることで、プログラムの実行が最大2〜3倍高速化され、数値の精度も大幅に向上させることができます。
OptiVecの入手
OptiVecのトライアル版は、GetItパッケージマネージャを開いて、検索ボックスから”OptiVec”というキーワードで検索すると見つかりますので、これを選択してインストールすることができます。
OptiVecは、Dr. Martin Sander Softwareの製品です。この製品のフル機能を利用するためにはDr. Martin Sander Softwareのサイトから購入する必要があります。そしてこの製品に関するサポートは、Dr. Martin Sander Softwareによって提供されます。