0

次のコードの実行時間を短縮する方法はありますか?

Matrix<double, 10, Dynamic> A(10,n);
A << a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;

ここで、n は実行時にのみ認識され、a1、a2 などは長さ n のベクトルです。マトリックスの最大サイズを近似してから、double、10、Dynamic、0、10、10000を使用しようとしましたが、速度は向上しませんでした。

4

1 に答える 1

3

A に RowMajor 行列を使用すると、キャッシュの一貫性とベクトル化が向上するため、コピーははるかに高速になります。

Matrix<double,10,Dynamic,RowMajor> A(10,n);

ただし、これにより他の操作が遅くなる可能性もあります。

最後に、最適化をオンにしてコンパイルしたことを確認してください (例: gcc での -O2)。

A.row(i) = a_i;

(それはコンパイラに依存するためわかりませんが、そのコピーがボトルネックである場合は試してみる価値があります)

于 2013-07-17T15:35:12.433 に答える