Mercurial > hg > Members > kono > Cerium
annotate TaskManager/Cell/spe/CellScheduler.cc @ 1001:61f33945f85d
error fix.
author | root@henri.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Thu, 21 Oct 2010 21:39:47 +0900 |
parents | 451ddde9a16d |
children |
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); |
1001 | 9 extern unsigned long long alloc_flag; |
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 |
109 | 23 /** |
321 | 24 * メインメモリ領域を allocate する。 |
25 * allocate した領域のアドレスは mainMem_get で取得するが、 | |
26 * mainMem_get を実行できるのは | |
27 * Renew Task (タスク内で create した Task) から。 | |
28 * alloc してすぐ get しても、アドレス何も入ってないです。 | |
109 | 29 */ |
30 void | |
31 CellScheduler::mainMem_alloc(int id, int size) | |
32 { | |
629
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
626
diff
changeset
|
33 mainMemList[id] = (memaddr)NULL; |
999
451ddde9a16d
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
871
diff
changeset
|
34 |
451ddde9a16d
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
871
diff
changeset
|
35 // flag on. (unsigned long long) |
451ddde9a16d
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
871
diff
changeset
|
36 alloc_flag = 1; |
109 | 37 |
38 mainMemNum++; | |
626
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
39 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
|
40 mail_write((memaddr)id); |
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
41 mail_write((memaddr)size); |
98 | 42 } |
109 | 43 |
44 void | |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
45 CellScheduler::mainMem_wait() |
109 | 46 { |
626
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
47 unsigned long id; |
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
48 memaddr addr; |
109 | 49 |
141 | 50 while (mainMemNum > 0) { |
626
ab866bc8a624
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
51 id = (unsigned long)mail_read(); |
109 | 52 addr = mail_read(); |
53 | |
629
8843edf37c0e
Cell 64 bit tried, but not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
626
diff
changeset
|
54 mainMemList[id] = (memaddr)addr; |
109 | 55 mainMemNum--; |
141 | 56 } |
109 | 57 } |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
58 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
59 /* |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
60 dma channel を返す |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
61 本来、SPU用に閉じているはず。ユーザが明示的に使うことはない。 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
62 良くわからないが、ある分だけcounterで廻せば良い。しかし、 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
63 そのためには、全部で、get_tag()する必要があるはず。 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
64 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
65 */ |
451
95dbf6bd8cd9
tag fixed... test_nogl move
kazz@henri.cr.ie.u-ryukyu.ac.jp
parents:
442
diff
changeset
|
66 |
871
ab3cd3aeacff
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
666
diff
changeset
|
67 // #define TEX_LOAD1 0 |
491 | 68 // #define TEX_LOAD2 1 |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
69 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
70 uint32 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
71 CellScheduler::get_tag() |
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 static int count = 0; |
871
ab3cd3aeacff
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
666
diff
changeset
|
74 return (count++ % 8)+16; |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
75 } |
451
95dbf6bd8cd9
tag fixed... test_nogl move
kazz@henri.cr.ie.u-ryukyu.ac.jp
parents:
442
diff
changeset
|
76 |
388
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
77 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
78 |
82cb9368e3ff
MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
79 /* end */ |