2016-04-08 6 views
1

文字どおり、armadilloモジュールによって提供される疎行列にmaaaaanyエントリを入れたいと思います。 私はC++でarmadillo libを使用して疎行列にエントリを割り当てる方法がより高速になる

sp_cx_mat BB(Na*Na, N*N*Na);  
for (int i = 0; i < Na; i++){ 
    BB(span(i*N, (i + 1)*N - 1), span(i*N*N, (i + 1)*N*N - 1)) = B; 
} 

(BをNa X N^2行列である)以下のようにこれを行う場合は、これを行うために多くの時間を要します。 (NとNaは128〜128のように約64以上です) カーネルや最適化の設定など、これを高速化する効率的な方法はありますか?私はすでにOpen BLASカーネルとAVX最適化設定を使用しています。

答えて

0

スパース行列の処理にオーバーヘッドがあります。それらは、大部分の要素(90%+)がゼロである非常に大きな行列に対してのみ設計されています。内部表現は本質的にはマトリックスのcompressedバージョンです。

要素の総数(ゼロおよび非ゼロ)が使用可能なメモリに収まる場合は、通常の密行列を使用する方が高速になる場合があります。密行列には圧縮のオーバーヘッドはありません。

場合によっては、より多くのメモリをインストールしたり、より大きなマシンでアルゴリズムを実行したりする方が簡単です。

関連する問題