192
|
1 /*
|
|
2 * $Id: README,v 1.5 2008/10/20 10:02:01 gongo Exp $
|
|
3 */
|
|
4
|
|
5 - 概要
|
|
6
|
|
7 Task 内で新たに Task を生成する。
|
|
8 以後、新たに生成された Task を RenewTask とする
|
|
9
|
|
10
|
|
11 -------------------------------------
|
619
|
12 Task の生成
|
192
|
13 -------------------------------------
|
|
14
|
619
|
15 HTaskPtr create_task(int TASK_ID);
|
192
|
16
|
|
17 これは PPE 内で使う
|
|
18
|
|
19 manager->create_task(id);
|
|
20
|
|
21 と同じ使い方です。以下の関数も同様です。
|
|
22
|
|
23 add_inData(), add_outData(), add_input()
|
|
24
|
|
25 Task 内部でこれらの関数にアクセスする際は、
|
|
26
|
|
27 smanager->create_task, smanager->add_inData,
|
|
28
|
|
29 というように、smanager から呼び出してください。
|
619
|
30 これは、PPE 内での TaskManager と同じです。
|
192
|
31
|
|
32
|
619
|
33 注 SPU からは使えません...
|
|
34
|
192
|
35 -------------------------------------
|
|
36 RenewTask を待ちたい場合
|
|
37 -------------------------------------
|
|
38
|
|
39 TaskA : PPE で生成
|
|
40 TaskB : TaskA で生成
|
|
41
|
|
42 だったとする。
|
|
43
|
|
44 このとき、TaskA が終了した時点で、PPE 側に 「TaskA が終了した」と送るのですが
|
|
45 場合によっては、TaskB が終了するまで待って、初めて TaskA 終了を
|
|
46 通知したい時があると思います。そういうときは
|
|
47
|
619
|
48 HTaskPtr taskB = smanager->create_task(TASK_B);
|
|
49 taskB->spawn();
|
192
|
50
|
|
51
|
|
52 -------------------------------------
|
|
53 RenewTask の生成から実行までの時間
|
|
54 -------------------------------------
|
|
55
|
|
56 SPE 上で時間の計測を行う際、SPU Decrementer を使う方法が一般的らしい。
|
|
57 ./spe/SpeProfile.cc の中でそのルーチンを入れてます。
|
|
58
|
|
59 SpeProfile *profile = new SpeProfile;
|
|
60
|
|
61 でオブジェクトを生成した後、測定したい範囲の最初で
|
|
62
|
|
63 profile->ProfStart();
|
|
64
|
|
65 計測の最後の範囲で
|
|
66
|
|
67 profile->ProfStop();
|
|
68
|
|
69 その結果を表示したい時は
|
|
70
|
|
71 profile->ProfPrint();
|
|
72
|
|
73 とします。
|
|
74
|
|
75
|
|
76 - 実行方法
|
|
77
|
|
78 ./renew_task
|
|
79
|
|
80 - 実行例
|
|
81
|
|
82 流れは、
|
|
83
|
|
84 1. PPE で RenewStart を起動
|
|
85 2. RenewStart 内で Renew1 を起動
|
|
86 3. Renew1 内で Renew2 を起動
|
|
87 4. Renew2 内で Renew3 を起動
|
|
88 5. Renew3 内で Renew4 を起動
|
|
89 6. Renew4 で終了
|
|
90
|
|
91 % ./renew_task
|
|
92
|
|
93 [PPE] Program Start
|
|
94
|
|
95 [PPE] Create Task : RenewStart
|
|
96
|
|
97 [SPE] ** running RenewStart
|
|
98 [SPE] Create Task : Renew1
|
|
99 [SPE] ** finish RenewStart
|
|
100
|
|
101 SPE time by SPU Decrementer: 40392.515625
|
|
102 [SPE] ** running Renew1
|
|
103 [SPE] Create Task : Renew2
|
|
104 [SPE] ** finish Renew1
|
|
105
|
|
106 SPE time by SPU Decrementer: 13483.305664
|
|
107 [SPE] ** running Renew2
|
|
108 [SPE] Create Task : Renew3
|
|
109 [SPE] ** finish Renew2
|
|
110
|
|
111 SPE time by SPU Decrementer: 0.005163
|
|
112 [SPE] ** running Renew3
|
|
113 [SPE] Create Task : Renew4
|
|
114 [SPE] ** finish Renew3
|
|
115
|
|
116 SPE time by SPU Decrementer: 0.005150
|
|
117 [SPE] ** running Renew4
|
|
118 [SPE] ** finish Renew4
|
|
119
|
|
120
|
619
|
121 測定の単位は msec です
|