changeset 15:55787a891c8a

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 27 Sep 2011 13:28:35 +0900
parents 4b0a368cc858
children ee16744c6ae5
files presentation/datasegment.ind presentation/fig/DSCS.jpg
diffstat 2 files changed, 120 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/presentation/datasegment.ind	Mon Sep 26 10:38:35 2011 +0900
+++ b/presentation/datasegment.ind	Tue Sep 27 13:28:35 2011 +0900
@@ -1,26 +1,84 @@
 -title: Cerium における DataSegment API の設計
 
--author:  金城裕 and 河野真治
+-author:  金城裕  河野真治
 
 --affiliation:  琉球大学
 
 --Cell用TaskManager Cerium 
 
+Cellの6 SPUのTask をパイプラインで管理する
+Open CL と似たフレームワーク。
+
+並列プログラムの例題や、ゲームプログラムを作成してきた。
+
 もう、Linux が PS3 で動かないのでやっても意味がない。
 
-Open CL と似てる。
 
 --Cerium, Open/CLでの並列プログラミングの問題点
 
 	Task の取り扱うデータ型が示されない
 	Task 自体は簡単だが Task を構成する方法が繁雑
-	Open CL\cite{opencl} に比べても構文的に複雑
+	Open CL に比べても構文的に複雑
 	Task の種類が複雑
 	Task の依存関係の記述がデータの依存関係と無関係
 	Task Scheduler が大きくメモリを圧迫
 	C++ と Task 記述の相性が良くない
 	Task Manager が複雑になりすぎ
 
+--Task の取り扱うデータ型が示されない
+
+
+    static int
+    run(SchedTask *s, void* rbuff, void* wbuff) {
+
+    int end = s->get_inputSize(0)/sizeof(Data);
+    DataPtr r_data = (DataPtr)s->get_input(0);
+
+void* で受けてしまうので型チェックができない。
+
+-- Task 自体は簡単だが Task を構成する方法が繁雑
+
+        int i = s->split_num-1;
+
+        s->fsort[i] = manager->create_task(QUICK_SORT,
+            (memaddr)&s->data[i*block_num], sizeof(Data)*last_block_num,
+            (memaddr)&s->data[i*block_num], sizeof(Data)*last_block_num);
+        if (i>0 && s->bsort[i-1]) {
+            s->fsort[i]->wait_for(s->bsort[i-1]);
+        }
+        s->fsort[i]->set_cpu(SPE_ANY);
+
+Open CL に比べても構文的に複雑
+
+-- Task の種類が複雑
+
+    SimpleTask     read と write が一つ
+    Task           read と write が8個まで
+    ArrayTask      read と write が任意個、ひと続きで実行される
+    MainTask       ppe で動作、Task生成が可能
+
+--Task の依存関係の記述がデータの依存関係と無関係
+
+    for (int i = 0; i < s->split_num-1; i++) {
+        s->fsort[i] = manager->create_task(QUICK_SORT,
+            (memaddr)&s->data[i*block_num], sizeof(Data)*block_num,
+            (memaddr)&s->data[i*block_num], sizeof(Data)*block_num);
+        if (i>0 && s->bsort[i-1]) {
+            s->fsort[i]->wait_for(s->bsort[i-1]);
+        }
+        if (i<s->split_num-2 && s->bsort[i]) {
+            s->fsort[i]->wait_for(s->bsort[i]);
+        }
+        s->fsort[i]->set_cpu(SPE_ANY);
+
+--その他
+
+	Task Scheduler が大きくメモリを圧迫
+
+	C++ と Task 記述の相性が良くない
+
+	Task Manager が複雑になりすぎ
+
 --Continuation based C
 
 関数呼び出しの代わりに goto を持つ C
@@ -39,8 +97,12 @@
 
 <img src="fig/single.jpg"     id="anim" alt=""/>
 
+これを並列に実行する。
+
 <img src="fig/concurrent.jpg" id="anim" alt=""/>
 
+code segment を並べ替えて、分散通信したりスケジューリングしたい
+
 
 --再接続の問題
 
@@ -50,6 +112,8 @@
 
 <img src="fig/cbc.jpg">
 
+--再接続の問題
+
 汎用の型でないと再接続できない。
 
 <img src="fig/reconnection.jpg" class="incremental">
@@ -78,13 +142,38 @@
 
 GPGPUでも、通常のCPUでも両方で動かしたい。ポインタでは困る。
 
---Task の生成
+Code Segment は ID で指定する。番号。
+    実行CPUも指定できる	
+    分散フレームワークでは、Geo Addressing を使用。
+
+--get_segment, put_segment
 
-Cerium では、メインCPUで動くTaskでしか Task を生成できなかった。
+Cell  / SPU では、ローカルメモリ
+
+read, write 以外に実行時に必要なデータもある。
+
+    get_segment
+    wait_segment
+
+で Cache / LRU 的に取得する。
 
-SPU側にあまり複雑な Kernel を置けない。(256kb しかメモリがない)
+    smanager->wait_segment(span_put_ms);
+
+    span_put_ms = span_get_ms;
+    smanager->put_segment(span_put_ms);
+
+    span_get_ms = smanager->get_segment((memaddr)spackList[index], span_ml);
+    smanager->wait_segment(span_get_ms);
 
---Data Segement の型
+    prev_index = index;
+    spack = (SpanPackPtr)span_get_ms->data;
+
+
+--Data Segement 
+
+    get_segment で全部実装した方が良い?
+
+    Data Segment として API を整理しよう。
 
     Json で表す
 
@@ -101,6 +190,8 @@
   update
   delete
 
+KVS 的にアクセスする。
+
 --Data Segment 更新の Atomicity
 
   Queuing
@@ -109,6 +200,8 @@
 
 生成された Data segment は synchronized queue として使うことができる。
 
+<img src="fig/DSCS.jpg">
+
 ---Task Dependendcy
 
 Cerium では、
@@ -118,17 +211,37 @@
 としていたが、繁雑。Data dependency が自然に依存関係を決めるので、それを
 使うのが良い。
 
+Data segment を Code segment に割り当てた時に、自動的に dependency が決まる。
+
+    Data segment -> Code segment -> Datas segment
+
 ---Data Segment Storage Type
 
+Data segment は様々な場所に置ける。
+
     Main Memory
     Local Memory
     Cache Memory
 
     Persitent Store
 
+Code segment からは、指定された Data segment にしかアクセスできない。
+
+--まとめ
+
+PS3 Cell 用のTaskMangaer Cerium の利点/欠点を考察し、
+
+Data Segment と Code Segment を用いた新しいフレームワークを提案した。
+
+Continuation based C と組み合わせる
+
+分散計算にも同様のAPIを用意し、並列環境でも分散環境でも共通に使える
+
+フレームワークを作成したい。
 
 
 
 
 
 
+
Binary file presentation/fig/DSCS.jpg has changed