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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
1 #include <stdio.h>
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
2 #include <malloc.h>
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
3 #include "CellScheduler.h"
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
4 #include "CellDmaManager.h"
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
5 #include "error.h"
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
6
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
7 // ユーザプログラムで定義
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
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
504899860e66 *** empty log message ***
gongo
parents: 70
diff changeset
10
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
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
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
13 {
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
14 connector = new CellDmaManager;
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
15
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
16 mainMemNum = 0;
88
504899860e66 *** empty log message ***
gongo
parents: 70
diff changeset
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
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
19 // SPE側はここで呼び出す必要がある
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
20 // Fifo ではSPEは無いので呼び出されない
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
21 }
98
f320d1039d51 *** empty log message ***
akira
parents: 94
diff changeset
22
f320d1039d51 *** empty log message ***
akira
parents: 94
diff changeset
23 void*
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
24 CellScheduler::allocate(int size)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
25 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
26 return memalign(DEFAULT_ALIGNMENT, size);
98
f320d1039d51 *** empty log message ***
akira
parents: 94
diff changeset
27 }
f320d1039d51 *** empty log message ***
akira
parents: 94
diff changeset
28
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
29 /**
321
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
30 * メインメモリ領域を allocate する。
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
31 * allocate した領域のアドレスは mainMem_get で取得するが、
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
32 * mainMem_get を実行できるのは
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
33 * Renew Task (タスク内で create した Task) から。
f64d75473f95 merge 317
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
34 * alloc してすぐ get しても、アドレス何も入ってないです。
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
35 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
36 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
37 CellScheduler::mainMem_alloc(int id, int size)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
40
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
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
f320d1039d51 *** empty log message ***
akira
parents: 94
diff changeset
45 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
46
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
52
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
55 addr = mail_read();
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
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
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
58 mainMemNum--;
141
fc314f28b66e TileList を作ろうとしたがに動かない。
gongo@charles.cr.ie.u-ryukyu.ac.jp
parents: 109
diff changeset
59 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 98
diff changeset
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
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 451
diff changeset
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 */