cell_contest
Download
Report
Transcript cell_contest
2011/06/24
連絡先:[email protected]
目次
はじめに
Cell Broadband Engine
Cell APIを用いたプログラミング方法
課題:kmeans法のアルゴリズム
課題の進め方
注意事項
はじめに
マルチコアプロセッサ上でのプログラミング
プログラマはマルチコアであることを意識してプログ
ラミングする
○ 例)pthread関数, OpenMP
Cell Broadband Engine
PlayStation3にも搭載されているヘテロジニアスマルチ
コアプロセッサ
ヘテロジニアス型ゆえに独自のプログラミングテク
ニック
○ Pthread + Cellプログラミング独自のAPI
課題:シングルコア用ソースコードをCell/B.E.用
に改造して高速化してください
コンテスト形式で行う
コンテスト環境
天野研究室 YGM72の写真
天野研究室 YGM72の構成
GbE
Cell搭載サーバ
global network
コンテストで使用
x86
server
BCU-100
BCU-100
BCU-100
BCU-100
16
PS3s
16
PS3s
16
PS3s
16
PS3s
local network
8
PS3
Cell Broadband Engineの構成
非対称型マルチコアプロセッサ
PlayStation3等に搭載
制御用コアのPPE×1
MainMemory
1GB (BCU-100)
演算用コアのSPE×8
256KB
PPEが持つメインメモリに直接アクセ
ス不可
SPE
SPE
SPE
SPE
EIB
SPE
SPE
SPE
SPE
LocalStore(LS)
コア間はElement Interconnect
Bus(EIB: 約400Gbps)にて接続
PPE
Cell/B.E.
PPE・SPE間の通信API
PPE・SPE間通信APIには主に2種類あ
る
SPE制御API (PPEが発行)
データ転送API (主にSPEが発行)
SPEはメインメモリに直接アクセス不可
Cellプログラミングの流れ
メインメモ
リ
PPE
①spe_image_open関数
②spe_context_create関数
③spe_program_load関数
SP
E
SP
E
SP
E
SP
E
SP
E
SP
E
SP
E
SP
E
ディス
ク
④spe_context_run関数
■ spu_mfcdma64関数
⑤spe_context_destroy関数
⑥spe_image_close関数
以上のようにして
PPEがSPEを制御す
る
課題:Kmeans法
クラスタリングの手法
今回の課題では、シングルコアのみで動
作する関数として実装されている
kmeans法をCell用に改変してもらいま
す
Kmeans法のアルゴリズム(1/5)
初期状態:
何色かの点(ノード)がランダムに散ら
ばっている
(この例では100ノード、5色)
STEP1:
各色のノードの集合に関して重心を計算
(図のXがそれぞれの重心)
とってもわかりやすい参考URL:
http://d.hatena.ne.jp/nitoyon/20090409/kmeans_visualise
Kmeans法のアルゴリズム(2/5)
STEP2
各ノードの色を、もっとも近い
重心と同じ色に塗り変える
STEP1:
再度、重心をそれぞれの色ごとに
計算する
Kmeans法のアルゴリズム(3/5)
STEP2:
再度、
各ノードの色を、もっとも近い
重心と同じ色に塗り変える
STEP1:
再度、重心をそれぞれの色ごとに
計算する
Kmeans法のアルゴリズム(4/5)
STEP2:
またまた、
各ノードの色を、もっとも近い
重心と同じ色に塗り変える
STEP1:
またまた、重心をそれぞれの色ご
とに計算する
Kmeans法のアルゴリズム(5/5)
STEP2:
またまたまた、
各ノードの色を、もっとも近い
重心と同じ色に塗り変える
終了条件:
すべてのノードが、一番近い重
心の色に属していて、もう色を
塗り替える必要がない
→終了
課題の進め方
ssh でjikoku.cell.st.keio.ac.jpにログイン
kmeans.tar.gzをダウンロード、展開
kmeans内のサンプルコードを参考にしながら
課題1:PPEのみで実行しているプログラム
を改変して、SPEを用いて演算できるように
する
主にcellkmeans.hを改変する
SPE用のプログラムspe.cを新たに作成する
課題2:さらに、SPEでの実行を高速化する
spe.cを改変する
kmeansディレクトリについて
kmeansディレクトリの中身
cellkmeans.h : Kmeans法を記述しているファイル・
主にこれを改変する
define.h : 必要に応じて改変可
main.c : 改変不可
spe.c : spe上で実行されるコード・新たに作成する
check.c : OpenCVによる出力結果の描画
gen.c : inputファイル生成
Makefile
ただし、公平性のためコンパイルオプション等はこちらで指
定したものを用いて最終的に評価します
サンプルコードについて
hello world
multiple_spe_ver: 複数SPEをpthreadで制御
○ テンプレートとしてよければどうぞ
○ 比較用として
multiple_pthread_ver (PPEのみ)
single_pthread_ver (PPEのみ)
single_spe_ver
mfc
PPE-SPE間のデータ転送記述例
高速なプログラムを目指して
並列化①:SPEを複数用いて演算 <- 必須
特に、STEP2は演算量が多いのでうまく並列化できないか
○ ノード数×色数の分だけユークリッド距離を計算して比較
並列化②:SPEにてSIMD(Single Instruction Multiple
Data)演算を用いる
その他:ループアンローリング、ダブルバッファリ
ングなど
Cellプログラミングに関してさらに詳しい内容はFixstarsの
webチュートリアルを参照
○ http://cell.fixstars.com/ps3linux/index.php/Cell%E3%83%97%E3
%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%
B3%E3%82%B0%E3%83%81%E3%83%A5%E3%83%BC%E3
%83%88%E3%83%AA%E3%82%A2%E3%83%AB
注意事項
まず、初めにやること
[email protected]にメール
○ 氏名を明記
○ 折り返し、アカウントと初期パスワードを送ります
自動返信ではないので、返信まで少々時間を頂きます(遅くとも
24時間以内には返信します)
課題締切:2011年7月15日(金) 24:00 厳守!!
提出方法:~/comparch以下に置く
提出物:ソースコード、簡単なレポート
連絡等があればウェブページにて行います。
トラブル・リクエスト等、何かあれば、
[email protected] まで。