# HG changeset patch # User Yuhi TOMARI # Date 1424112799 -32400 # Node ID c7678996940cb24eb633660f0c08e216ea5d241d # Parent 8d6a0f047d5ae8811a34e743fb017a2fe1dbe28a add pipeline in multicore diff -r 8d6a0f047d5a -r c7678996940c paper/chapter2.tex --- 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 はパイプラインによる実行を可能にしている。 + diff -r 8d6a0f047d5a -r c7678996940c paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r 8d6a0f047d5a -r c7678996940c paper/master_paper.toc --- 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}