2009年10月22日木曜日

StreamGPU 実験

GPU 上での予備実験結果

[1次元でのデータ]

SVD に与える正方行列の行/列数 -- 10回の合計処理時間(秒数)
129 -- 8.07
229 -- 9.42
329 -- 12.32
429 -- 16.55
529 -- 19.39

行列サイズ 529 で1回につき2秒あたりなので、CPU だと1分以上かかっている
ので、非常によい結果となった。

[行列サイズ129での2次元以上の結果]
2次元にした結果: 22.31, 22.85 がそれぞれの時間
3次元にした結果: 一部は失敗
4次元にした場合: 48.12, 39.71, 37.52, 43.30 (1次元が8秒なので、大体5倍になっている)


次元数を大きくしても実行時間は線形で増加しないことが期待されるが、きれいに増加してしまっている。そもそも SPADE プログラムが、次元数を高くしたときに、各オペレータが各次元を独立に SVD 計算をしているのだが、各オペレータにすべての次元のデータが送信しているところも問題。

まずはこの問題を解決してみたが、それでもやはり実行時間の増加は変わらず。現在は、各オペレータがプロセスとなって、複数プロセスから CULA の SVD 関数を呼び出している形式。一応、遅いながらも結果は同時にはかれている。 GPU デバイスの状態をやはり、プロファイラで精査する必要があるだろう。

CULA の ドキュメントによると、マルチスレッドからのアクセスは可能と書いてあるが、本質的には同じ。
更なる調査が必要です. CUDA Visual Profiler を使って、System S のスタンドアローンバージョンを実行してみましたが、うまく動作せず。まあ、これは System S なしで確認できる事項なので、マルチスレッド・マルチプロセスにおいて同時に CULA の SVD にアクセスしたときに、やはり線形に増加してしまうかを調査してください

→森田君(工大祭のあとね)

0 件のコメント:

コメントを投稿