-6

2 つの非常に大きな行列があります。for問題は、ループを使用してそれらを追加するのに時間がかかることです。C++ で演算子のオーバーロードを使用して行列を追加できることを知りました。そうすることで実行時間が短縮されますか?

4

4 に答える 4

5

ループをオーバーロードされたオペレーターに移動しても違いはありません。

パフォーマンスを向上させる 1 つの方法は、 BLASなどの専用ライブラリを使用することです。高品質の BLAS 実装 ( Intel の MKLなど) は、手作業でコーディングする可能性が高いものよりもはるかに高速です。

BLAS の C++ ラッパーに関するいくつかの指針については、C/C++ の LAPACK ラッパーを参照してください(質問は Windows に関するものですが、回答はこれよりも広範です)。

于 2013-10-23T13:37:22.410 に答える
1

演算子は C++ の他のすべての関数と同じように扱われるため、ロジックを変更せずに追加関数を演算子に変更するだけでは役に立ちません。

おそらく、ある種の SIMD 計算を利用する必要があるでしょう。

于 2013-10-23T13:37:12.107 に答える
0

行列を valarray に入れるか、専用のライブラリを使用します。たとえば、eigen です。Blas は醜く、商用の実装にアクセスできない場合は、特にパフォーマンスが向上しません。

于 2013-10-23T13:45:23.823 に答える
0

これを行う 1 つの方法は、x86 拡張で使用可能なベクトル演算子を使用することです。例については、これを確認してくださいhttp://en.wikipedia.org/wiki/Streaming_SIMD_Extensions#Example

gnu または Visual Studio を使用している場合は、アセンブリでコーディングする代わりに関数として呼び出すことができる組み込み組み込み関数が含まれている可能性があります。

于 2013-10-23T13:41:35.573 に答える