Mercurial > hg > Members > kono > Cerium
annotate TaskManager/Cell/spe/CellScheduler.cc @ 684:458a1ad91427
Task Array generation worked.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Dec 2009 23:03:28 +0900 |
parents | 4615489c5faa |
children | ab3cd3aeacff |
rev | line source |
---|---|
109 | 1 #include <stdio.h> |
59 | 2 #include "CellScheduler.h" |
3 #include "CellDmaManager.h" | |
4 #include "error.h" | |
5 | |
321 | 6 // ユーザプログラムで定義 |
7 // なんだけど、それは微妙じゃね? | |
430
fb62b7acc92b
code loading (on going...)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
388
diff
changeset
|
8 extern void task_init(Scheduler *scheduler); |
88 | 9 |
59 | 10 void |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
11 CellScheduler::init_impl() |
59 | 12 { |
13 connector = new CellDmaManager; | |
14 | |
109 | 15 mainMemNum = 0; |
88 | 16 |
430
fb62b7acc92b
code loading (on going...)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
388
diff
changeset
|
17 task_init(this); // PPE側ではUser 側で既に呼んでいる... |
321 | 18 // SPE側はここで呼び出す必要がある |
19 // Fifo ではSPEは無いので呼び出されない | |
59 | 20 } |
98 | 21 |
109 | 22 /** |
321 | 23 * メインメモリ領域を allocate する。 |
24 * allocate した領域のアドレスは mainMem_get で取得するが、 | |
25 * mainMem_get を実行できるのは | |
26 * Renew Task (タスク内で create した Task) から。 | |
27 * alloc してすぐ get しても、アドレス何も入ってないです。 | |
109 | 28 */ |
29 void | |
30 CellScheduler::mainMem_alloc(int id, int size) | |
31 { | |
629
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
626
diff
changeset
|
32 mainMemList[id] = (memaddr)NULL; |
109 | 33 |
34 mainMemNum++; | |
626
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
35 mail_write((memaddr)MY_SPE_COMMAND_MALLOC); |
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
36 mail_write((memaddr)id); |
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
37 mail_write((memaddr)size); |
98 | 38 } |
109 | 39 |
40 void | |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
41 CellScheduler::mainMem_wait() |
109 | 42 { |
626
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
43 unsigned long id; |
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
44 memaddr addr; |
109 | 45 |
141 | 46 while (mainMemNum > 0) { |
626
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
47 id = (unsigned long)mail_read(); |
109 | 48 addr = mail_read(); |
49 | |
629
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
626
diff
changeset
|
50 mainMemList[id] = (memaddr)addr; |
109 | 51 mainMemNum--; |
141 | 52 } |
109 | 53 } |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
54 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
55 /* |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
56 dma channel を返す |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
57 本来、SPU用に閉じているはず。ユーザが明示的に使うことはない。 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
58 良くわからないが、ある分だけcounterで廻せば良い。しかし、 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
59 そのためには、全部で、get_tag()する必要があるはず。 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
60 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
61 */ |
451
95dbf6bd8cd9
tag fixed... test_nogl move
kazz@henri.cr.ie.u-ryukyu.ac.jp
parents:
442
diff
changeset
|
62 |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
63 #define TEX_LOAD1 0 |
491 | 64 // #define TEX_LOAD2 1 |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
65 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
66 uint32 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
67 CellScheduler::get_tag() |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
68 { |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
69 static int count = 0; |
496
58240647b23b
PS3 double linked TaskQueue worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
491
diff
changeset
|
70 return TEX_LOAD1+(count++ % 2); |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
71 } |
451
95dbf6bd8cd9
tag fixed... test_nogl move
kazz@henri.cr.ie.u-ryukyu.ac.jp
parents:
442
diff
changeset
|
72 |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
73 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
74 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
75 /* end */ |