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