-title: Cerium における DataSegment API の設計 -author: 金城裕 and 河野真治 --affiliation: 琉球大学 --Cell用TaskManager Cerium もう、Linux が PS3 で動かないのでやっても意味がない。 Open CL と似てる。 --Cerium, Open/CLでの並列プログラミングの問題点 Task の取り扱うデータ型が示されない Task 自体は簡単だが Task を構成する方法が繁雑 Open CL\cite{opencl} に比べても構文的に複雑 Task の種類が複雑 Task の依存関係の記述がデータの依存関係と無関係 Task Scheduler が大きくメモリを圧迫 C++ と Task 記述の相性が良くない Task Manager が複雑になりすぎ --Continuation based C 関数呼び出しの代わりに goto を持つ C Input Interface, Output Interface
       __code f(struct input a) { goto g(struct input a) ; }
       __code f(struct input a, __code (*g)()) { goto g(struct input b) ; }
--Code Segment 単位での並列実行 First, make single process code segments. --再接続の問題 type miss match fix argument type on applications 汎用の型でないと再接続できない。 --Data segment Code Segment の双対。型を持つメモリの切れ端。 Code Segment の Interface を置き換えるもの。 input datasegments output datasegments --Data segmentを使ったパイプライン実行 --Code segment の参照 Data segment を処理する Code Segment への参照 Pointer ではない GPGPUやSPUで、実行コードは別空間なことが多い GPGPUでも、通常のCPUでも両方で動かしたい。ポインタでは困る。 --Task の生成 Cerium では、メインCPUで動くTaskでしか Task を生成できなかった。 SPU側にあまり複雑な Kernel を置けない。(256kb しかメモリがない) --Data Segement の型 Json で表す 分散計算でも使えるように Protocol Buffer や MessagePack ---Data Segment のAPI Data Segment は以下のAPIを持っている create read update delete --Data Segment 更新の Atomicity Queuing Update Proority Queue 生成された Data segment は synchronized queue として使うことができる。 ---Task Dependendcy Cerium では、 task->wait_for(task1); としていたが、繁雑。Data dependency が自然に依存関係を決めるので、それを 使うのが良い。 ---Data Segment Storage Type Main Memory Local Memory Cache Memory Persitent Store