# HG changeset patch # User Tatsuki IHA # Date 1517745016 -32400 # Node ID c270df8d069147488571aab0eaf9ea611099954c # Parent 506cc13ed74796e5f124d6c522bcb740f4f9189b Update diff -r 506cc13ed747 -r c270df8d0691 paper/evaluation.tex --- a/paper/evaluation.tex Sun Feb 04 17:21:26 2018 +0900 +++ b/paper/evaluation.tex Sun Feb 04 20:50:16 2018 +0900 @@ -1,3 +1,7 @@ +% GPU が遅いのは cpu, GPU 間のデータの通信の分 +% Meta Data で データが GPU にあるのか, CPU にあるのかをわかるようにする +% CPU で必要なったときに初めて取り出す + \chapter{Gears OS の評価} \section{実験環境} diff -r 506cc13ed747 -r c270df8d0691 paper/fig/bitonicSort.pdf Binary file paper/fig/bitonicSort.pdf has changed diff -r 506cc13ed747 -r c270df8d0691 paper/fig/bitonicSort.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/fig/bitonicSort.svg Sun Feb 04 20:50:16 2018 +0900 @@ -0,0 +1,204 @@ + + + +Gnuplot +Produced by GNUPLOT 5.2 patchlevel 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 5 + + + + + 10 + + + + + 15 + + + + + 20 + + + + + 25 + + + + + 30 + + + + + 35 + + + + + 40 + + + + + 45 + + + + + 1 cpu + + + + + 2 cpus + + + + + 4 cpus + + + + + 8 cpus + + + + + 16 cpus + + + + + 32 cpus + + + + + gpu + + + + + gpu(kernel only) + + + + + + + + + time(s) + + + + + bitonicSort benchmark + + + gnuplot_plot_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 506cc13ed747 -r c270df8d0691 paper/fig/bitonicSort.xbb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/fig/bitonicSort.xbb Sun Feb 04 20:50:16 2018 +0900 @@ -0,0 +1,8 @@ +%%Title: fig/bitonicSort.pdf +%%Creator: extractbb 20170318 +%%BoundingBox: 0 0 600 480 +%%HiResBoundingBox: 0.000000 0.000000 600.000000 480.000000 +%%PDFVersion: 1.5 +%%Pages: 1 +%%CreationDate: Sat Feb 3 22:27:55 2018 + diff -r 506cc13ed747 -r c270df8d0691 paper/fig/gotoInterface.graffle Binary file paper/fig/gotoInterface.graffle has changed diff -r 506cc13ed747 -r c270df8d0691 paper/fig/gotoInterface.pdf Binary file paper/fig/gotoInterface.pdf has changed diff -r 506cc13ed747 -r c270df8d0691 paper/fig/semaphoreSequence.graffle Binary file paper/fig/semaphoreSequence.graffle has changed diff -r 506cc13ed747 -r c270df8d0691 paper/fig/semaphoreSequence.pdf Binary file paper/fig/semaphoreSequence.pdf has changed diff -r 506cc13ed747 -r c270df8d0691 paper/fig/semaphoreSequence.xbb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/fig/semaphoreSequence.xbb Sun Feb 04 20:50:16 2018 +0900 @@ -0,0 +1,8 @@ +%%Title: fig/semaphoreSequence.pdf +%%Creator: extractbb 20170318 +%%BoundingBox: 0 0 1120 869 +%%HiResBoundingBox: 0.000000 0.000000 1120.000000 869.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Sun Feb 4 15:57:13 2018 + diff -r 506cc13ed747 -r c270df8d0691 paper/fig/taskRun.graffle Binary file paper/fig/taskRun.graffle has changed diff -r 506cc13ed747 -r c270df8d0691 paper/interface.tex --- a/paper/interface.tex Sun Feb 04 17:21:26 2018 +0900 +++ b/paper/interface.tex Sun Feb 04 20:50:16 2018 +0900 @@ -13,6 +13,9 @@ % inteface の実装の際は Code Gear に代入して書く % C++ で言うとCode Gearは virtual % Impl の説明いれてない +% Interface 抜きのプログラミングも可能だが, 通常な言語だとアセンブラで書いてるような感覚(決まった位置にデータを書き出す) +% Interface はコールフレームの性質を持っている(入出力に使われている変数はInterface で定義する必要がある) +% 図のput の位置を直す \chapter{Gears OS のモジュール化} Gears OS は stub Code Gear という Meta Code Gear で Context という全ての Code Gear と Data Gear を持った Meta Data Gear から値を取りだし、ノーマルレベルの Code Gear に値を渡す。 diff -r 506cc13ed747 -r c270df8d0691 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r 506cc13ed747 -r c270df8d0691 paper/parallelism_gears.tex --- a/paper/parallelism_gears.tex Sun Feb 04 17:21:26 2018 +0900 +++ b/paper/parallelism_gears.tex Sun Feb 04 20:50:16 2018 +0900 @@ -1,6 +1,8 @@ % Todo % 並列処理 の全体的な説明 % 構成のセクションいるかしら? +% par goto をコンパイルタイミングでflowを解析し(モデル検査で)処理が軽い場合は並列ではなく call にするみたいな最適化 +% taskManager の初期化のコードはいらない \chapter{Gears OSの並列処理} Gears OS では実行の Task を Code Gear と Input/Output Data Gear の組で表現する。 @@ -47,11 +49,8 @@ \item TaskManager(shutdown)の終了処理 \end{itemize} -\coderef{createTaskManager} に TaskManager Interface を実装した Data Gear の初期化部分を示す。 TaskManager は初期化の際に、指定した数の Worekr を生成する。 -その際CPU、GPU の数を指定することができ、指定した分の CPUWorker と GPUWorker が createWorker 関数 (\coderef{createTaskManager} 27-46行目) で生成される。 - -\lstinputlisting[caption=TaskManager の初期化, label=code:createTaskManager]{./src/createTaskManager.cbc} +その際CPU、GPU の数を指定することができ、指定した分の CPUWorker と GPUWorker が生成される。 TaskManager は \figref{sendTask}に示すように spawn を呼び出した際、実行する Task の Input Data Gear が用意されているかを判断する。 Input Data Gear が全て用意されている場合、その Task を Worker の Queue に送信する。 diff -r 506cc13ed747 -r c270df8d0691 paper/src/semaphoreInterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/semaphoreInterface.h Sun Feb 04 20:50:16 2018 +0900 @@ -0,0 +1,8 @@ +typedef struct Semaphore{ + union Data* semaphore; + __code next(...); + + // method + __code p(Impl* semaphore, __code next(...)); + __code v(Impl* semaphore, __code next(...)); +} Semaphore; diff -r 506cc13ed747 -r c270df8d0691 paper/src/workerRun.cbc --- a/paper/src/workerRun.cbc Sun Feb 04 17:21:26 2018 +0900 +++ b/paper/src/workerRun.cbc Sun Feb 04 20:50:16 2018 +0900 @@ -1,4 +1,4 @@ -__code getTaskCPUWorker(struct Context* context, struct CPUWorker* cpuWorker, struct Context* task, struct Worker* worker) { +__code getTaskCPUWorker(struct CPUWorker* cpuWorker, struct Context* task, struct Worker* worker) { if (!task) { goto worker->shutdown(); // end thread } @@ -7,10 +7,3 @@ task->next = C_odgCommitCPUWorker; // commit outputDG after task exec goto meta(task, taskCg); // switch task context } - -__code getTaskCPUWorker_stub(struct Context* context) { - CPUWorker* cpuWorker = (CPUWorker*)GearImpl(context, Worker, worker); - Worker* worker = &Gearef(context,Worker)->worker->Worker; - struct Context* task = &Gearef(context, Queue)->data->Context; - goto getTaskCPUWorker(context, cpuWorker, task, worker); -}