Mercurial > hg > Game > Cerium
diff example/dependency_task/README @ 109:028ffc9c0375 draft
Cerium cvs version
author | gongo@gendarme.local |
---|---|
date | Wed, 12 Nov 2008 17:39:33 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/dependency_task/README Wed Nov 12 17:39:33 2008 +0900 @@ -0,0 +1,59 @@ +/* + * $Id: README,v 1.3 2008/10/20 08:49:52 gongo Exp $ + */ + +- 概要 +Task の依存関係を設定する例題 + +タスクは二種類あって + +配列 idata があるとする (サイズは length*2) + +Exec: idata を length の前後に分けて受け取り、各要素に値を加算 + 半分に分けるため、今回はこのタスクを 2 つに固定。 + まあ3つ以上でもいいんだけどね。 + +Print: idata を表示する。 + + +依存関係としては、まずは Exec を先に実行しないといけないので + +------------> 時間 + +Exec 1 + \ + Print + / +Exec 2 + + +みたいな感じ。 +この依存を設定しないと、Print は Exec1,2 が計算する前の +idata を詠んでしまう可能性がある。 + + +- 実行方法 + +% ./dependency [-cpu spe_num] [-nodepend] + + -cpu SPU の数 + -nodepend Exec と Print に依存を設定しない + + +- 実行例 + +%./dependency +[TASK_PRINT] +13 13 13 13 13 13 13 13 13 13 13 13 26 26 26 26 26 26 26 26 26 26 26 26 + +%./dependency -nodepend +[TASK_PRINT] + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +上の場合、Exec 1, 2 の処理結果が PPE の idata に書き込まれる前に +Print が idata から DMA でデータを取ってきて表示しているために +全て 0 になっている。 +このタスクが全て同じ SPE 上で実行されているとして、 +Exec 1, 2 のあと、Print の DMA read が実行される前に +Exec 1, 2 の DMA write が済んでいればもしかしたらデータが取れるかもしれない。 +しかし「もしかしたら」では使いものにならないので、依存を設定するわけです。 \ No newline at end of file