annotate TaskManager/kernel/ppe/Task.h @ 2054:2e7a6f40672f draft

add param(4) in FileMapReduce.cc
author masa
date Fri, 29 Jan 2016 15:56:28 +0900
parents ac16a57f5dd7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
276
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #ifndef INCLUDED_TASK
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #define INCLUDED_TASK
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
307
3fc86ddf5d1c clean up include
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 276
diff changeset
4 #include "base.h"
3fc86ddf5d1c clean up include
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 276
diff changeset
5 #include "types.h"
3fc86ddf5d1c clean up include
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 276
diff changeset
6 #include "ListData.h"
625
94d82f2c842f 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 616
diff changeset
7 #include "SimpleTask.h"
276
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
688
77c89477daa8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 687
diff changeset
9 class SchedTask;
736
1b225972ae88 cut printf
hiroki@localhost.localdomain
parents: 713
diff changeset
10 class Scheduler;
688
77c89477daa8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 687
diff changeset
11
684
ecf7e09b1fe8 adding Array Task.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 659
diff changeset
12 class Task {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
13 public: // variables
689
ecf63089f5bb Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 688
diff changeset
14 int task_size;
688
77c89477daa8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 687
diff changeset
15 int command;
696
715bbf0955b5 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 695
diff changeset
16 int param_count;
715bbf0955b5 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 695
diff changeset
17 int inData_count;
715bbf0955b5 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 695
diff changeset
18 int outData_count;
689
ecf63089f5bb Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 688
diff changeset
19 int inData_offset;
ecf63089f5bb Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 688
diff changeset
20 int outData_offset;
686
6e42b20f6198 TaskArray structure
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 684
diff changeset
21 void *data[] __attribute__ ((aligned (DEFAULT_ALIGNMENT)));
684
ecf7e09b1fe8 adding Array Task.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 659
diff changeset
22
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
23 public: // functions
687
25afcd4ae380 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 686
diff changeset
24
736
1b225972ae88 cut printf
hiroki@localhost.localdomain
parents: 713
diff changeset
25 void print(Scheduler *s);
687
25afcd4ae380 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 686
diff changeset
26
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
27 memaddr *param(int index) {
1498
8034e0212281 run twice, but not return. dead lock?
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1480
diff changeset
28 memaddr p = (memaddr)data + sizeof(memaddr)*index;
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
29 return (memaddr *)p;
695
29bd0882272a TaskArray on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 690
diff changeset
30 }
29bd0882272a TaskArray on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 690
diff changeset
31
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
32 ListElement *inData(int index) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
33 memaddr p = (memaddr)data + inData_offset;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
34 p += sizeof(ListElement)*index;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
35 return (ListElement*)p;
698
72b2da99e875 no compile error for Task Array
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
36 }
696
715bbf0955b5 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 695
diff changeset
37
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
38 ListElement *outData(int index) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
39 memaddr p = (memaddr)data + outData_offset;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
40 p += sizeof(ListElement)* index;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
41 return (ListElement*)p;
686
6e42b20f6198 TaskArray structure
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 684
diff changeset
42 }
6e42b20f6198 TaskArray structure
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 684
diff changeset
43
696
715bbf0955b5 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 695
diff changeset
44 static int calc_size(int params, int ins, int outs) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
45 int size = round_up16(sizeof(Task))
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
46 + round_up16(sizeof(memaddr)*params)
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
47 + round_up16(sizeof(ListElement)*ins)
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
48 + round_up16(sizeof(ListElement)*outs);
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
49 return size;
688
77c89477daa8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 687
diff changeset
50 }
77c89477daa8 on going...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 687
diff changeset
51
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
52 void init(int task_id, int params, int ins, int outs) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
53 set_task_id(task_id);
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
54 param_count = params;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
55 inData_count = ins;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
56 outData_count = outs;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
57 inData_offset = round_up16(sizeof(memaddr)*params);
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
58 outData_offset = round_up16(inData_offset+sizeof(ListElement)*ins);
2000
ac16a57f5dd7 fix get_nextTaskArea
kkb
parents: 1551
diff changeset
59 task_size = calc_size(params, ins, outs);
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
60 }
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
61
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
62 int size() {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
63 return task_size;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
64 }
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
65
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
66 int inData_total_size() {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
67 int size = 0;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
68 ListElement *in= inData(0);
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
69 for(int i=0; i< inData_count; i++) {
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
70 size += in[i].size;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
71 }
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
72 return size;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
73 }
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
74 int outData_total_size() {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
75 int size = 0;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
76 ListElement *out= outData(0);
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
77 for(int i=0; i< outData_count; i++) {
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
78 size += out[i].size;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
79 }
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
80 return size;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
81 }
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
82
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
83 void set_inData_t( int index, memaddr addr, int size) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
84 ListElement *list = inData(index);
949
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
85 #ifdef EARLY_TOUCH
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
86 if ((unsigned long)addr&0xf) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
87 printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n",
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
88 command, index, (unsigned long)addr, size);
949
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
89 }
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
90 char *p = (char *)addr; int b = *p;
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
91 p = (char *)(addr+size-1); b += *p;
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
92 #endif
1480
f2512fb94223 GpuTaskManager no compile error
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 970
diff changeset
93
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
94 #ifdef __CERIUM_CELL__
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
95 list->addr = (uint32)addr;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
96 #else
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
97 list->addr = addr;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
98 #endif
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
99 list->size = size;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
100 }
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
101
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
102 void set_outData_t(int index, memaddr addr, int size) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
103 ListElement *list = outData(index);
949
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
104 #ifdef EARLY_TOUCH
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
105 if ((unsigned long)addr&0xf) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
106 printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n",
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
107 command, index, (unsigned long)addr, size);
949
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
108 }
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
109 char *p = (char *)addr; int b = *p;
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
110 p = (char *)(addr+size-1); b += *p;
5f0135ca75ee word count size fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 895
diff changeset
111 #endif
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
112 #ifdef __CERIUM_CELL__
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
113 list->addr = (uint32)addr;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
114 #else
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
115 list->addr = addr;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
116 #endif
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
117 list->size = size;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
118 }
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
119 void set_task_id(int id) { command = id; }
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
120 void set_param_t(int index, memaddr param) {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
121 memaddr *p = (memaddr*)this->param(index);
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
122 *p = param;
700
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
123 }
ef08dd70eafb fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 699
diff changeset
124
690
107e6e77f482 Bulk task on going.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
125 Task * next()
107e6e77f482 Bulk task on going.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
126 {
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
127 char *p = (char*)this;
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
128 p += size();
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
129 return (Task*)p;
690
107e6e77f482 Bulk task on going.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
130 }
107e6e77f482 Bulk task on going.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
131
107e6e77f482 Bulk task on going.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 689
diff changeset
132
684
ecf7e09b1fe8 adding Array Task.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 659
diff changeset
133 #define set_param(index,param) set_param_t(index, (memaddr) (param))
ecf7e09b1fe8 adding Array Task.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 659
diff changeset
134
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
135 #define set_inData(index, addr, size) \
684
ecf7e09b1fe8 adding Array Task.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 659
diff changeset
136 set_inData_t(index, (memaddr)(addr), (size));
1551
57317332f6ef create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 1498
diff changeset
137 #define set_outData(index, addr, size) \
684
ecf7e09b1fe8 adding Array Task.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 659
diff changeset
138 set_outData_t(index, (memaddr)(addr), (size));
895
b662e9dd26b0 add alignment of classes in SPU
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 787
diff changeset
139 } __attribute__ ((aligned (DEFAULT_ALIGNMENT))) ;
276
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 typedef Task* TaskPtr;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 #endif