109
|
1 /*
|
|
2 * $Id: README,v 1.3 2008/10/20 08:49:52 gongo Exp $
|
|
3 */
|
|
4
|
|
5 - 概要
|
|
6 Task の依存関係を設定する例題
|
|
7
|
|
8 タスクは二種類あって
|
|
9
|
|
10 配列 idata があるとする (サイズは length*2)
|
|
11
|
|
12 Exec: idata を length の前後に分けて受け取り、各要素に値を加算
|
|
13 半分に分けるため、今回はこのタスクを 2 つに固定。
|
|
14 まあ3つ以上でもいいんだけどね。
|
|
15
|
|
16 Print: idata を表示する。
|
|
17
|
|
18
|
|
19 依存関係としては、まずは Exec を先に実行しないといけないので
|
|
20
|
|
21 ------------> 時間
|
|
22
|
|
23 Exec 1
|
|
24 \
|
|
25 Print
|
|
26 /
|
|
27 Exec 2
|
|
28
|
|
29
|
|
30 みたいな感じ。
|
|
31 この依存を設定しないと、Print は Exec1,2 が計算する前の
|
|
32 idata を詠んでしまう可能性がある。
|
|
33
|
|
34
|
|
35 - 実行方法
|
|
36
|
|
37 % ./dependency [-cpu spe_num] [-nodepend]
|
|
38
|
|
39 -cpu SPU の数
|
|
40 -nodepend Exec と Print に依存を設定しない
|
|
41
|
|
42
|
|
43 - 実行例
|
|
44
|
|
45 %./dependency
|
|
46 [TASK_PRINT]
|
|
47 13 13 13 13 13 13 13 13 13 13 13 13 26 26 26 26 26 26 26 26 26 26 26 26
|
|
48
|
|
49 %./dependency -nodepend
|
|
50 [TASK_PRINT]
|
|
51 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
|
52
|
|
53 上の場合、Exec 1, 2 の処理結果が PPE の idata に書き込まれる前に
|
|
54 Print が idata から DMA でデータを取ってきて表示しているために
|
|
55 全て 0 になっている。
|
|
56 このタスクが全て同じ SPE 上で実行されているとして、
|
|
57 Exec 1, 2 のあと、Print の DMA read が実行される前に
|
|
58 Exec 1, 2 の DMA write が済んでいればもしかしたらデータが取れるかもしれない。
|
|
59 しかし「もしかしたら」では使いものにならないので、依存を設定するわけです。 |