Mercurial > hg > Game > Cerium
comparison example/Simple/README @ 634:62e570ac5db2 draft
SimpleTask start
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Nov 2009 17:29:14 +0900 |
parents | |
children | 250c7353ddaf |
comparison
equal
deleted
inserted
replaced
633:d6f16da6751c | 634:62e570ac5db2 |
---|---|
1 /* | |
2 * $Id: README,v 1.5 2008/10/20 10:02:01 gongo Exp $ | |
3 */ | |
4 | |
5 - 概要 | |
6 | |
7 int の配列を送り、タスク(Twice) で、配列の要素を2倍にして送り返します。 | |
8 | |
9 PPE->SPE の DMA 転送は main.cc の twice_init に | |
10 書いてるのでわかってもらえるかなと信じて、タスク側で | |
11 そのデータの受け取り方を説明する。 | |
12 | |
13 ------------------------------------- | |
14 PPE から送られてきたデータの受け取り | |
15 ------------------------------------- | |
16 | |
17 void *get_input(void *p, int index) を使う。 | |
18 | |
19 p には rbuf が入ります。今のところ確定なのでわざわざ書かせる必要も無いか。。。 | |
20 index は、create task 時に add_inData したと思うけど、その順番になります。 | |
21 | |
22 add_inData(data1, size1); | |
23 add_inData(data2, size2); | |
24 | |
25 の順番で記述した場合、 | |
26 | |
27 data1 = get_input(rbuf, 0); | |
28 data2 = get_input(rbuf, 0); | |
29 | |
30 で取れます。 | |
31 | |
32 ------------------------------------- | |
33 PPE へデータを送る | |
34 ------------------------------------- | |
35 | |
36 void *get_output(void *p, int index) を使う。 | |
37 | |
38 p は wbuf, index は input と同じ感じでいいです。 | |
39 get_output で受け取った領域でデータを書けば、 | |
40 このタスクが終了した後に、add_outData で指定したアドレスに書き込まれます。 | |
41 | |
42 | |
43 - 実行方法 | |
44 | |
45 ./twice [-cpu spe_num] [-length data_length] | |
46 | |
47 -cpu 使用する SPU の数 | |
48 // 今回はあまり意味の無いオプションです。 | |
49 // 巨大な配列の場合、複数に振り分けてそれぞれで 2 倍させるっていう | |
50 // 処理を入れれば意味のあるものになります。誰か(ry | |
51 | |
52 -length 配列の要素の数 | |
53 | |
54 | |
55 - 実行例 | |
56 | |
57 % ./twice | |
58 before --- | |
59 0 1 2 3 4 5 6 7 8 9 10 11 | |
60 after --- | |
61 0 2 4 6 8 10 12 14 16 18 20 22 | |
62 | |
63 % ./twice -length 20 | |
64 before --- | |
65 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
66 after --- | |
67 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 | |
68 | |
69 % ./twice -length 15 | |
70 before --- | |
71 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
72 zsh: bus error ./twice -length 15 | |
73 | |
74 上の場合、PS3上(SPE使った場合)では bus error が出ます。 | |
75 この理由は length にあって、送るデータのバイト数が | |
76 4バイト(int) x 15 = 60 バイト だからです。 | |
77 PPE <-> SPE での DMA 転送のサイズは | |
78 1,2,4,8バイト, もしくは 16バイト倍数と決まっています。 | |
79 このサイズに誤りがある場合、上のように bus error が出ます。 | |
80 この辺の詳しい仕様は、 | |
81 | |
82 Game_project/ps3/docs にある PDF や | |
83 | |
84 Fixstars のサイト | |
85 http://cell.fixstars.com/ps3linux/index.php/3.3 DMA転送によるデータの受け渡し | |
86 | |
87 とか見ればわかると思います |