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