changeset 49:c7678996940c

add pipeline in multicore
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 Feb 2015 03:53:19 +0900
parents 8d6a0f047d5a
children d4be7f4b9a73
files paper/chapter2.tex paper/master_paper.pdf paper/master_paper.toc
diffstat 3 files changed, 71 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter2.tex	Tue Feb 17 03:31:37 2015 +0900
+++ b/paper/chapter2.tex	Tue Feb 17 03:53:19 2015 +0900
@@ -161,4 +161,44 @@
   \label{fig:scheduler}
 \end{figure}
 
-Task をパイプライニングにより Scheduling している部分をソースコード:\ref{src:pipeline_multicore}
+Cerium の Task は SchedTask と呼ばれるデータ構造で表現されている。
+SchedTask は input/output data の length や合計 size を持っており、
+これらのパラメタから自分の data が格納されているアドレスを算出し、read/write を実行する。
+SchedTask を利用することで容易にパイプラインを構築できる。
+Task をパイプライニングにより Scheduling している部分をソースコード:\ref{src:pipeline_multicore}に示す。
+
+\begin{lstlisting}[frame=lrbt,label=src:pipeline_multicore,caption=Task,numbers=left]
+void
+Scheduler::run(SchedTaskBase* task1)
+{
+    // Pipeline Stage
+    SchedTaskBase* task2 = new SchedNop();
+    SchedTaskBase* task3 = new SchedNop();
+
+    // main loop
+    do {
+
+        task1->read();
+        task2->exec();
+        task3->write();
+
+        delete task3;
+
+        task3 = task2;
+        task2 = task1;
+        task1 = task1->next(this, 0);
+
+    } while (task1);
+
+    delete task3;
+    delete task2;
+}
+\end{lstlisting}
+
+引数として受け取っている task1 は Task のリストである。このリストがなくなるまでパイプライン実行のループを回す。
+task1 が read、task2 が exec、task3 が write を担当している。
+つまり task3 には read と exec が終わった Task が来るため、write が終わったら delete して良い。
+各 Task はそれぞれの処理を行い、task2 は task3 に、task1 は task2 に自分の Task を渡していく。
+
+このメインループを回すことで Cerium の Scheduler はパイプラインによる実行を可能にしている。
+
Binary file paper/master_paper.pdf has changed
--- a/paper/master_paper.toc	Tue Feb 17 03:31:37 2015 +0900
+++ b/paper/master_paper.toc	Tue Feb 17 03:53:19 2015 +0900
@@ -10,33 +10,33 @@
 \contentsline {section}{\numberline {3.2}Cerium TaskManager}{8}
 \contentsline {section}{\numberline {3.3}Cerium における Task}{10}
 \contentsline {section}{\numberline {3.4}Task の Scheduling}{11}
-\contentsline {chapter}{\numberline {第4章}Cerium を用いた例題}{12}
-\contentsline {section}{\numberline {4.1}Bitonic Sort}{12}
-\contentsline {section}{\numberline {4.2}Word Count}{14}
-\contentsline {section}{\numberline {4.3}FFT}{16}
-\contentsline {section}{\numberline {4.4}Task の生成}{16}
-\contentsline {chapter}{\numberline {第5章}マルチコアへの対応}{19}
-\contentsline {section}{\numberline {5.1}マルチコア上での実行の機構}{19}
-\contentsline {section}{\numberline {5.2}DMA}{19}
-\contentsline {section}{\numberline {5.3}データ並列}{19}
-\contentsline {chapter}{\numberline {第6章}GPGPU への対応}{22}
-\contentsline {section}{\numberline {6.1}OpenCL および CUDA による実装}{22}
-\contentsline {section}{\numberline {6.2}データ並列}{23}
-\contentsline {chapter}{\numberline {第7章}並列処理向けI/O}{25}
-\contentsline {section}{\numberline {7.1}mmap}{25}
-\contentsline {section}{\numberline {7.2}Blocked Read による I/O の並列化}{26}
-\contentsline {section}{\numberline {7.3}I/O 専用 Thread の実装}{28}
-\contentsline {chapter}{\numberline {第8章}ベンチマーク}{29}
-\contentsline {section}{\numberline {8.1}実験環境}{29}
-\contentsline {section}{\numberline {8.2}マルチコア}{30}
-\contentsline {section}{\numberline {8.3}GPGPU}{32}
-\contentsline {section}{\numberline {8.4}並列 I/O}{34}
-\contentsline {chapter}{\numberline {第9章}既存のプログラミングフレームワークとの比較}{36}
-\contentsline {section}{\numberline {9.1}OpenCL}{36}
-\contentsline {section}{\numberline {9.2}CUDA}{37}
-\contentsline {section}{\numberline {9.3}StarPU}{38}
-\contentsline {chapter}{\numberline {第10章}結論}{40}
-\contentsline {section}{\numberline {10.1}今後の課題}{41}
-\contentsline {chapter}{謝辞}{42}
-\contentsline {chapter}{参考文献}{43}
-\contentsline {chapter}{発表文献}{44}
+\contentsline {chapter}{\numberline {第4章}Cerium を用いた例題}{13}
+\contentsline {section}{\numberline {4.1}Bitonic Sort}{13}
+\contentsline {section}{\numberline {4.2}Word Count}{15}
+\contentsline {section}{\numberline {4.3}FFT}{17}
+\contentsline {section}{\numberline {4.4}Task の生成}{17}
+\contentsline {chapter}{\numberline {第5章}マルチコアへの対応}{20}
+\contentsline {section}{\numberline {5.1}マルチコア上での実行の機構}{20}
+\contentsline {section}{\numberline {5.2}DMA}{20}
+\contentsline {section}{\numberline {5.3}データ並列}{20}
+\contentsline {chapter}{\numberline {第6章}GPGPU への対応}{23}
+\contentsline {section}{\numberline {6.1}OpenCL および CUDA による実装}{23}
+\contentsline {section}{\numberline {6.2}データ並列}{24}
+\contentsline {chapter}{\numberline {第7章}並列処理向けI/O}{26}
+\contentsline {section}{\numberline {7.1}mmap}{26}
+\contentsline {section}{\numberline {7.2}Blocked Read による I/O の並列化}{27}
+\contentsline {section}{\numberline {7.3}I/O 専用 Thread の実装}{29}
+\contentsline {chapter}{\numberline {第8章}ベンチマーク}{30}
+\contentsline {section}{\numberline {8.1}実験環境}{30}
+\contentsline {section}{\numberline {8.2}マルチコア}{31}
+\contentsline {section}{\numberline {8.3}GPGPU}{33}
+\contentsline {section}{\numberline {8.4}並列 I/O}{35}
+\contentsline {chapter}{\numberline {第9章}既存のプログラミングフレームワークとの比較}{37}
+\contentsline {section}{\numberline {9.1}OpenCL}{37}
+\contentsline {section}{\numberline {9.2}CUDA}{38}
+\contentsline {section}{\numberline {9.3}StarPU}{39}
+\contentsline {chapter}{\numberline {第10章}結論}{41}
+\contentsline {section}{\numberline {10.1}今後の課題}{42}
+\contentsline {chapter}{謝辞}{43}
+\contentsline {chapter}{参考文献}{44}
+\contentsline {chapter}{発表文献}{45}