Mercurial > hg > Game > Cerium
annotate TaskManager/Cell/spe/MemIterator.cc @ 2054:2e7a6f40672f draft
add param(4) in FileMapReduce.cc
author | masa |
---|---|
date | Fri, 29 Jan 2016 15:56:28 +0900 |
parents | 0094cd28bf41 |
children |
rev | line source |
---|---|
1476
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #include "MemIterator.h" |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 * Iterator は MemList にまとめる方がいいかも。 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 * |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 * @param [addr_list] main memory 側のアドレスリスト |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 * @param [mem_list] memory segment のリスト |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 * @param [cmd] Iterator パターンというべきか. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 * |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 * cmd は、ms, MemList で情報を持っててもできる |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 * |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 MemIterator::MemIterator(AddrListPtr addr_list, MemList *mem_list, |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 int cmd, SchedTask *smanager) |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 this->addr_list = addr_list; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 this->mem_list = mem_list; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 this->smanager = smanager; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 read_ms = NULL; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 exec_ms = NULL; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 write_ms = NULL; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 free_ms = NULL; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 // コマンドは、ms 自体に持たせるべきなのかも知れない。 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 if (cmd == READ_WRITE) { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 // 始め、必要になるであろう、データを load しておく |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 read_ms = smanager->get_segment(addr_list->addr,mem_list); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 get_ms = &MemIterator::get_read_write_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 } else if (cmd == READ) { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 // 始め、必要になるであろう、データを load しておく |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 read_ms = smanager->get_segment(addr_list->addr,mem_list); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 get_ms = &MemIterator::get_read_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 } else if(cmd == WRITE) { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 get_ms = &MemIterator::get_write_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 * 次の ms があるか返す |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 * |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 * @retval 1 next がある |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 * @retval 0 next がない |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 int |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 MemIterator::hasNext(void) |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 return (addr_list->next) ? 1 : 0; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 * アドレスのリストから次に使う領域は予想できる |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 * read, write する ms に使う。 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 * |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 * @return アドレスのリストに沿って、msに格納し返す |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 MemorySegmentPtr |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 MemIterator::get_read_write_ms(void) |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 // main memory に書き出し |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 smanager->put_segment(write_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 * 前回の put segment を待つ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 * ms はメモリ領域を使い回しているので、free 部分も dma 完了を待つ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 smanager->wait_segment(free_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 // stage 遷移 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 free_ms = write_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 write_ms = exec_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 exec_ms = read_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 // アドレスをリストから追っていく |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 addr_list = addr_list->next; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 // 次必要なものを load し始めておく |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 read_ms = smanager->get_segment(addr_list->addr, mem_list); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 // 前回の get segment を待つ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 smanager->wait_segment(exec_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 return exec_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 * read only な ms に使う |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 * |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 * @return アドレスのリストに沿って、msに格納し返す |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 MemorySegmentPtr |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 MemIterator::get_read_ms(void) |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 // stage 遷移 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 exec_ms = read_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 // アドレスをリストから追っていく |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 addr_list = addr_list->next; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 // 次必要なものを load し始めておく |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 read_ms = smanager->get_segment(addr_list->addr,mem_list); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 // 前回の get segment を待つ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 smanager->wait_segment(exec_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 return exec_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 * アドレスのリストから次に使う領域は予想できる |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 * write only な ms に使うパターン |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 * |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 * @return free な ms 領域を返す |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 MemorySegmentPtr |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 MemIterator::get_write_ms(void) |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 * 前回の put segment を待つ. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 * ms はメモリ領域を使い回しているので、free 部分も dma 完了を待つ. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 * 書き出しのタイミングは memory segment の数による |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 * ので、最適な書き込み完了待ちはできない. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 * MemList 側に書けば、できるはず. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 smanager->wait_segment(free_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 // stage 遷移 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 free_ms = write_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 // 書きこみ開始。次 get_write_ms が呼ばれる時に wait する。 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 smanager->put_segment(free_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 // free な領域を取得する。dma load する必要はない。 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 write_ms = smanager->get_free_segment(addr_list->addr, mem_list); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 // アドレスをリストから追っていく |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 addr_list = addr_list->next; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 return write_ms; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 * 出しておいた segment 命令を待つ. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 * まだ、書きこまれていないmsを書きこむ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 * 最後の締め. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 void |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 MemIterator::collect_ms(void) |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 smanager->put_segment(write_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 smanager->wait_segment(free_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 smanager->wait_segment(write_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 smanager->wait_segment(read_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
176 * 走査中のlistの一部を上書きする. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
177 * mainMem (CreateSpan) とかやるとき、使う予定 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 void |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180 MemIterator::overwrite_list(AddrListPtr list) |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181 { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 * すでに次のリストの read を開始している可能性がある |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 * ので、それをいったん中止、同じ ms に 新しく load をかける。 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186 * |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 * でも、これは write only な場合いらない.. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 // dma命令キャンセルする方法があるかな. 調べてみる. あるならwaitするよりそっちがいい. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 smanager->wait_segment(read_ms); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193 /* segment に直接上書きする機能が必要かも. 要実装. |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 * 指定した ms に load する |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
195 * この場合は、read_ms に新しく list->addr を load する |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 smanager->overwrite_segment(read_ms, list->addr); |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200 /* |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 * 現在のaddr_list を新しい list に上書きする |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202 */ |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203 AddrListPtr tmp = list; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 while(list->next) { |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 list = list->next; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 list->next = addr_list->next; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 addr_list = tmp; |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
212 } |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
213 |
0094cd28bf41
remove GpuTaskManagerImpl
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 |