Cell Broadband Engineを利用したホログラム計算(後編)
マルチコア・プロセッサ向けプログラムの作成手法についての解説の後編である.今回は「Cell Broadband Engine」を利用したプログラミングについて説明する.計算機合成ホログラムの演算を例に,並列処理のための記述を紹介する. (編集部)
1.CBEを用いたプログラミング
CBEの性能をフルに利用したプログラムの開発には,マルチスレッド・プログラミングが欠かせません.スレッドとは,あるプログラムのプロセスの中で行われる処理の実行単位の一つです.通常,プロセスは幾つかのスレッドから構成されています.普段,これらのスレッドはあまり意識することなく逐次実行されています.簡単に言うと,それら複数のスレッドを並列化して実行させるようなプログラミングのことをマルチスレッド・プログラミングといいます.シングル・コアの場合は,マルチスレッドでプログラムを作るメリットはあまり多くありません.一方マルチコアの場合,各コアにスレッドを割り振ることで,文字通りスレッドを同時並行処理でき,プログラムの高速化が図れます.
● メモリ・モデルの制約を意識してプログラミング
CBEにおいては,PPEが実質の親機となり,子機である複数のSPEにスレッドを割り振って同時処理させる方式が一般に知られています.各SPEは全く独立に動作するため,処理するスレッド間に依存性がある場合(例えば,あるスレッド同士がお互いにデータのやり取りを行ったり,逐次処理が要求される場合)は,プログラマが明示的にプログラミングを行う必要があります(図1).
CBEでは,PPEが複数のSPEをスレッドとして起動し,制御する形のプログラミング・モデルがよく知られている.PPE,SPEをそれぞれ単独で動かすこともできるが,複雑なアプリケーションを構築する場合は,専用のAPIを使いそれぞれが連動した形をとらせることで,効率の良い動作を期待できる.
CBEのプログラミングにおける最大の制約事項は,そのメモリ・モデルと言えるでしょう.前述のとおり,実際に処理を行うSPEが参照できるメモリは,自身の内部メモリであるローカル・ストアの256Kバイトしかありません.その中に自身の実行スレッド(SPEプログラム)のコードや処理に必要なデータ類をメイン・メモリからDMA転送しておかなければなりません.
逆に言うと,処理するデータが256Kバイトを超えてしまう場合は,処理するデータを実行するプログラムの途中でうまく入れ替えるなどの操作をプログラマ自身が考える必要があります.
● 作成するプログラムは2種類
CBEのプログラムは,PPE用とSPE用の二つを作る必要があります.それらを関連づけるためにPPEのプログラム上で,専用のAPIやライブラリを用いてSPEをスレッドとして起動します.そして,それらをPPE用,SPE用のGCCコンパイラなどを利用してコンパイルします.ここで注意しなければならないのは,コンパイル時に関連づけしなければならない各種ライブラリやヘッダ・ファイル,コンパイル・オプションなどの記述です.専用のGCCのインストール場所や各種ライブラリのインストール場所はSDKのバージョンによって異なるので,注意が必要です.さらに,SIMDなどのライブラリやヘッダ・ファイルは,通常コンパイル時に探索されないので,オプションとして明示しなければなりません.これらについてもフィックスターズのWebサイトなどに詳しい説明が載っているので,参考にすると良いでしょう.
実際にCBE用のプログラムをコンパイルしている画面を図2に示します.GCCの場所やヘッダ・ファイル,ライブラリのコンパイル・オプションなどが記載されているのを確認できると思います.
MAKEツールは,コンパイラやヘッダ,ライブラリのパス,コンパイル・オプションなどをあらかじめMakefileというテキスト・ファイルに記載しておき,コンパイル時にmakeコマンドを利用してコンパイルするもの.一般には,ヘッダを共有する複数の実行ファイルのコンパイルの際に利用される.