2 つの非常に大きな行列があります。for
問題は、ループを使用してそれらを追加するのに時間がかかることです。C++ で演算子のオーバーロードを使用して行列を追加できることを知りました。そうすることで実行時間が短縮されますか?
4 に答える
ループをオーバーロードされたオペレーターに移動しても違いはありません。
パフォーマンスを向上させる 1 つの方法は、 BLASなどの専用ライブラリを使用することです。高品質の BLAS 実装 ( Intel の MKLなど) は、手作業でコーディングする可能性が高いものよりもはるかに高速です。
BLAS の C++ ラッパーに関するいくつかの指針については、C/C++ の LAPACK ラッパーを参照してください(質問は Windows に関するものですが、回答はこれよりも広範です)。
演算子は C++ の他のすべての関数と同じように扱われるため、ロジックを変更せずに追加関数を演算子に変更するだけでは役に立ちません。
おそらく、ある種の SIMD 計算を利用する必要があるでしょう。
行列を valarray に入れるか、専用のライブラリを使用します。たとえば、eigen です。Blas は醜く、商用の実装にアクセスできない場合は、特にパフォーマンスが向上しません。
これを行う 1 つの方法は、x86 拡張で使用可能なベクトル演算子を使用することです。例については、これを確認してくださいhttp://en.wikipedia.org/wiki/Streaming_SIMD_Extensions#Example
gnu または Visual Studio を使用している場合は、アセンブリでコーディングする代わりに関数として呼び出すことができる組み込み組み込み関数が含まれている可能性があります。