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] まで。
© Copyright 2024 ExpyDoc