9
|
1 \subsubsection{パイプライン処理}
|
|
2 Cell ではそれぞれのコアがメインメモリを
|
|
3 直接参照することは出来ず、DMA 転送によりデータをやりとりする。
|
|
4 DMA は CPU を介さず直接データ転送を行う方式である。
|
|
5 SPE は DMA 完了を待たずに他の処理を行うことが出来るので、
|
|
6 DMA のレイテンシを隠すことが出来る。
|
7
|
7
|
|
8 また、ダブルバッファリングを行うことで
|
|
9 パイプライン処理が可能となる (\figref{fig-pipeline}) 。
|
|
10
|
|
11 \begin{figure}[tb]
|
|
12 \begin{center}
|
|
13 \includegraphics[scale=0.43]{figure/pipeline.pdf}
|
|
14 \caption{Pipeline}
|
|
15 \label{fig-pipeline}
|
|
16 \end{center}
|
|
17 \end{figure}
|
|
18
|
|
19 パイプライン処理を入れた Task Manager の Scheduler を以下に示す。
|
|
20
|
|
21 \begin{verbatim}
|
|
22
|
|
23 do {
|
|
24 task3->write();
|
|
25 task2->exec();
|
|
26 task1->read();
|
|
27
|
|
28 taskTmp = task3;
|
|
29 task3 = task2;
|
|
30 task2 = task1;
|
|
31 task1 = task1->next(this, taskTmp);
|
|
32 } while (task1);
|
|
33
|
|
34 \end{verbatim}
|
|
35
|
|
36 Task Manager を \figref{fig-cerium} に適用させると、
|
|
37 \figref{fig-manager-pipeline} のようにパイプライン的に動作する。
|
|
38
|
|
39 \begin{figure}[tb]
|
|
40 \begin{center}
|
|
41 \includegraphics[scale=0.36]{figure/manager-pipeline.pdf}
|
|
42 \caption{Task Manager が行う Pipeline}
|
|
43 \label{fig-manager-pipeline}
|
|
44 \end{center}
|
|
45 \end{figure}
|