view manager-task.tex @ 10:887d57278cb6

*** empty log message ***
author gongo
date Wed, 26 Mar 2008 12:59:31 +0900
parents fea1ac32de27
children
line wrap: on
line source

\subsubsection{Dependency}  \label{sec:task}
Task Manager はタスク依存を解決する機能を持っている (set\_depend) 。
タスク依存が満たされたものをアクティブキューにいれ、SPE を起動する。
SPE はアクティブキューから、処理するコードとデータを取得し、
自律的に実行を行う。
終了したタスクは PPE に対して終了のコマンドを発行し、PPE はそれを見て
ウェイトキューのタスクを調べ、タスク依存を満たしたものが出てきたら
アクティブキューに入れ、SPE を再び起動する。


\subsubsection{PPE と SPE 間の同期}
\ref{sec:task} で述べたように、PPE から SPE へタスクはの実行命令を、
SPE から PPE へはタスクの終了などを伝える必要がある。
その際、待ち合わせを行うと処理が止まってしまい、並列度が下がってしまう。

Cell では、PPE と SPE 間のメッセージのやりとりには
Mailbox という FIFO メッセージキューを用いることができる。
メッセージ交換なので待ち合わせを避けることが可能である。

%%PPE が SPE からメールを受け取る場合、
%%\verb|spe_out_mbox_read()| という、
%%SPE Runtime Management Library \cite{libspe2} を用いる。
%%しかし、\verb|spe_out_mbox_read()| は Non-blocking function のため、
%%busy-wait なメールの待ち方は避けるべきである。
%%今回は、PPE 側でメールチェックを行う際に、SPE からのメールをチェックする。
%%
%%PPE と SPE のメールチェックを分離させたい場合、
%%メールをチェックする Blocking Function を作る必要がある。
%%
%%もしくは SPE Event Handling を用いる手法もある。
%%これは、メールが来たら event を起こすことを Event Handler に登録する。
%%この場合、通常の Mailbox ではない、割り込み用の interrupting Mailbox を
%%使用しなくてはならない。
%%interrupting Mailbox を使用する spe\_out\_intr\_mbox\_read() は、
%%Event が起きたときに呼ばれるため Blocking Function である。
%%SPE のどれかからメッセージが来たらポーリングによってメールチェックを行う。
%%
%%今回は、PPE と SPE のメールチェックは分離しない実装をした。
%%