view example/dependency_task/README @ 639:70c5c2d2eb24

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 19 Nov 2009 18:45:24 +0900
parents 5c194c71eca8
children
line wrap: on
line source

/*
 * $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 が済んでいればもしかしたらデータが取れるかもしれない。
しかし「もしかしたら」では使いものにならないので、依存を設定するわけです。