研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

DMA転送と処理のバランス2。

2007-10-18 22:49:04 | Weblog
前回に続いて、SPE においてのデータ転送、処理サイズのバランスについて。

DGEMM(Double)では、2行ずつ処理していくのが効率的であると述べたが、
今回は SGEMM(Float)について、プロファイルをしてその結果から考察していく。


まずは、サイズ、使用 SPE ごとの実行時間である。

SPENUM 512x512 1024x1024 2048x2048 [msec]
  1   360    2600   22000
  2   200    1500   12000
  3   150    1060    8200
  4   125    830     6400
  5   113    710     5400
  6   105    630     4700


倍精度演算と比べれば確かに早くなってはいるが、あまり期待どおりとはいえない。
今回も前回同様、処理とデータ転送のバランスを見ていく。


[データ転送 / 積和演算]
SPENUM    512x512  1024x1024  2048x2048 [msec]
  1  0.17 / 0.4  0.3 / 0.8  0.6 / 1.7
  ~ 
  6  0.2 / 0.4  0.4 / 0.8  0.8 / 1.7

結果からは、思ったよりも積和演算が足を引っ張っているのかもしれないと考えられる。



[データ転送数]
512x512 では、512 x 4(2行、2行) x 4(float) = 8Kbyte
1024 x 1024 では 16Kbyte、2048 x 2048 では 32Kbyte となる。

[積和演算数]
512x512 では、2 x 2 x 512 = 2048 回の積和演算、
1024 x 1024 では 4096 回、2048 x 2048 では 8192回の積和演算することになる。

8Kbyte の2倍と 2048 回の積和演算、16Kbyte の2倍と 4096 回の積和演算、
32Kbyte の2倍と 8192 回の積和演算がそれぞれ同じくらいとすると、
やはり「データ:積和演算=8:1」であるようだ。

処理を早くすることは難しいので、
それに見合うように「4行ずつ DMA 転送する」などの改良してみようと思う。
もう少し調べてみよう。

最新の画像もっと見る

コメントを投稿