Wednesday 14 February 2007

CellのDMAと、Cacheの先読み



2ch ゲハ版ネタ

Cell 80 は、結構、面白かったのだが、途中から、ソニーの45n投資の縮小の話に占領されてしまったみたい。その最後のあたりに出ていた話が割と面白かったのに、途中で終ってしまってます。

http://tinyurl.com/3xsjh5

が挙げられていて、少し前のデータだけど、

 3.2GHz Cell (8 SPEs)* 8.69 GFlops/s
 2.2GHz Opteron 0.60 GFlops/s
 1.4GHz Itanium2 0.32 GFlops/s

とか言う話。(Double precision) で、アンチがかみついているのが、

「キャッシュの先読みすれば、(8 coreでも)同じぐらいの性能が出る」

という論法だった。これって、少し前(と言っても10年前だと思う...)に流行った研究なんだよな。単純に、

 for(i=0;i<10000;i++) { int dummy = a[i+10000]; ..... }

みたいに、ちょっと先に触るような方法だとコンパイラに蹴られちゃうし、コンパイラに作り込にしても、キャッシュのサイズ依存になるので、具合が悪い。なので「キャッシュ先読み命令」を用意しよう。ってな話。SSE3ではPREFETCHn とかいうのがあり、Intel のcompiler や gcc は、このプリフェッチ命令を吐きます。えらい。(このスライドだと、それを使っているかどうかはわからないんだけど Opeteron なのが微妙...)

でも、前のスライドを見るとわかるんだけど、Cell の実装は、

 通信と計算をoverlapさせて行う

所に意味がある。これは、いわゆる、ソフトウェア・パイプラン的な実装なんだけど、Cell は全体的にDeteministic に動くので、予測ができるんだが、PREFETCH だと、そうはいかない。まして、マルチコアでキャッシュが干渉するような状況ではね...

そのあたりをどう言い訳するのかは面白そうだったんだが...

No comments: