PS3には、マルチコアのCPU(Cell Broadband Engine)が搭載されています。
内部構造の概要の図はネットでも見つかりました。
「デジタル・ホームから分散コンピューティングまで適応できる高性能プロセッサ」
(図はリンク記事から引用)
PS3 Linuxではこのプロセッサの性能を引き出せる様なプログラミングも体験できます。今回、このPPE(PowerPC Processor Element)と呼ばれるPowerPC互換のユニットと複数のコアで並列処理の行えるSPE(Synergistic Processor Element)というユニットを同時に使用して処理するプログラム(C言語)を試してみました。プログラム自体は下記の書籍に掲載されていたソースコードをYDLで入力、コンパイル、リンクしたものです。
PPE側のソースコードの抜粋です。「spe_」と先頭に付いている関数がSPEに関わる処理を行う関数の様です。
SPE側のソースコードの抜粋です。「vector」と付いているデータ型が並列処理されるデータ型を示している様です。
コンパイルはPPE、SPE それぞれのコンパイラ(GCC)で行います。
プログラムの実行時にはPPEのプログラムがSPE用のプログラムを呼び出してSPEに転送して並列処理させます。
「This is playstation3 program」と試しにlower.txtファイルに用意しておき、それを入力として英小文字を大文字に変換する処理を行わせてみました。[PPE]、[SPE]と書かれているところはそれぞれのプロセッサでの処理の途中で行なっています。
ずっと以前からこういう並列処理のテストをしてみたかったのですが、やっとできました。
ただ、CELL B.E.の高度な処理能力を活かしたプログラムを作成したわけではないので、今後少し先になりそうですが、並列コンピューティングのフレームワーク「Open CL」(linkはWikipedia)を少し調べて試してみたいと思っています。
参考書籍は
を読んでみるつもりです。