平成 30 年度 第2 回倉吉市総合教育会議...プログラミング教育について 学校教育課 1 プログラミング教育とは ※プログラミング的思考
コンピュータアーキテクチャ特論 Cell プログラミング課題
description
Transcript of コンピュータアーキテクチャ特論 Cell プログラミング課題
目次 はじめに Cell Broadband Engine Cell APIを用いたプログラミング方法 課題: kmeans法のアルゴリズム 課題の進め方 注意事項
はじめに マルチコアプロセッサ上でのプログラミング
プログラマはマルチコアであることを意識してプログラミングする○ 例) pthread関数 , OpenMP
Cell Broadband EnginePlayStation3にも搭載されているヘテロジニアスマルチコアプロセッサ
ヘテロジニアス型ゆえに独自のプログラミングテクニック○ Pthread + Cellプログラミング独自のAPI
課題:シングルコア用ソースコードを Cell/B.E.用に改造して高速化してくださいコンテスト形式で行う
コンテスト環境天野研究室 YGM72の写真
天野研究室 YGM72の構成
BCU-100 BCU-100 BCU-100 BCU-100x86
server
16 PS3s
16 PS3s
16 PS3s
16 PS3s
8PS3
global network
local network
GbE
Cell搭載サーバコンテストで使用
Cell Broadband Engineの構成 非対称型マルチコアプロセッサ
PlayStation3等に搭載
制御用コアの PPE×1 MainMemory 1GB (BCU-100)
演算用コアの SPE×8 LocalStore(LS) 256 KB PPEが持つメインメモリに直接アクセス不可
コア間は Element Interconnect Bus(EIB: 約400 Gbps)にて接続
SPE
Cell/B.E.
EIB
PPE
SPE
SPE
SPE
SPE
SPE
SPE
SPE
PPE ・ SPE間通信 APIには主に2種類あるSPE制御 API ( PPEが発行)データ転送 API (主に SPEが発行)
SPEはメインメモリに直接アクセス不可
PPE ・ SPE間の通信 API
Cellプログラミングの流れ
PPEメインメモリ
SPE
SPE
SPE
SPE
①spe_image_open関数②spe_context_create関数③spe_program_load関数④spe_context_run関数
⑤spe_context_destroy関数⑥spe_image_close関数ディス
ク
SPE
SPE
以上のようにしてPPEが SPEを制御する
■ spu_mfcdma64関数
SPE
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
mfcPPE-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以下に置く
提出物:ソースコード、簡単なレポート 連絡等があればウェブページにて行います。 トラブル・リクエスト等、何かあれば、