Mercurial > hg > Papers > 2008 > gongo-sigos
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 のメールチェックは分離しない実装をした。 %%