BOAST 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BOAST.gemspec +1 -1
- data/lib/BOAST/Runtime/CKernel.rb +2 -0
- data/lib/BOAST/Runtime/CUDARuntime.rb +7 -0
- data/lib/BOAST/Runtime/CompiledRuntime.rb +2 -2
- data/lib/BOAST/Runtime/MPPARuntime.rb +90 -47
- data/lib/BOAST/Runtime/Probe.rb +6 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36ff960759ff464e552e84ee45f3245cec255920
|
4
|
+
data.tar.gz: f52d3d583ba030d9affb8bd4e903c10c7a6ddd97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49d7f2414f2b8703c1cef9e13945c8d6eb19a28dc728d25d8bef58238fef5aa1707397f5ad49948a9696a308cf1b57fffe9c43f96d03f45721386ab785642a09
|
7
|
+
data.tar.gz: a2d91030cb407b63743e24112eace210ae077865014567dd7f6d1e114e64dcc06e1830d471b11c932369ee1e65a565b0e17b24f0d4d1d539e04194dcdae3d169
|
data/BOAST.gemspec
CHANGED
@@ -55,12 +55,14 @@ module BOAST
|
|
55
55
|
extend OpenCLRuntime
|
56
56
|
when CUDA
|
57
57
|
extend CUDARuntime
|
58
|
+
@probes = []
|
58
59
|
when FORTRAN
|
59
60
|
extend FORTRANRuntime
|
60
61
|
extend FFIRuntime if ffi?
|
61
62
|
else
|
62
63
|
if @architecture == MPPA then
|
63
64
|
extend MPPARuntime
|
65
|
+
@probes = [MPPAProbe]
|
64
66
|
else
|
65
67
|
extend CRuntime
|
66
68
|
extend FFIRuntime if ffi?
|
@@ -9,6 +9,7 @@ module BOAST
|
|
9
9
|
alias get_params_value_old get_params_value
|
10
10
|
alias fill_decl_module_params_old fill_decl_module_params
|
11
11
|
alias create_procedure_call_parameters_old create_procedure_call_parameters
|
12
|
+
alias store_results_old store_results
|
12
13
|
|
13
14
|
def fill_module_header
|
14
15
|
fill_module_header_old
|
@@ -64,6 +65,7 @@ EOF
|
|
64
65
|
get_output.print <<EOF
|
65
66
|
size_t _boast_block_size[3] = {1,1,1};
|
66
67
|
size_t _boast_block_number[3] = {1,1,1};
|
68
|
+
int64_t _boast_duration;
|
67
69
|
EOF
|
68
70
|
end
|
69
71
|
|
@@ -153,6 +155,11 @@ EOF
|
|
153
155
|
EOF
|
154
156
|
end
|
155
157
|
|
158
|
+
def store_results
|
159
|
+
store_results_old
|
160
|
+
get_output.print " rb_hash_aset(_boast_stats,ID2SYM(rb_intern(\"duration\")),rb_float_new((double)_boast_duration*(double)1e-9));\n"
|
161
|
+
end
|
162
|
+
|
156
163
|
end
|
157
164
|
|
158
165
|
end
|
@@ -1,5 +1,59 @@
|
|
1
1
|
module BOAST
|
2
2
|
|
3
|
+
module MPPAProbe
|
4
|
+
extend PrivateStateAccessor
|
5
|
+
|
6
|
+
module_function
|
7
|
+
|
8
|
+
# Monitoring has to be started before transfer begin and after transfers end as we don't have sync points in between.
|
9
|
+
def header
|
10
|
+
get_output.puts "#include <mppa_mon.h>"
|
11
|
+
end
|
12
|
+
|
13
|
+
def decl
|
14
|
+
get_output.print <<EOF
|
15
|
+
float _mppa_avg_pwr;
|
16
|
+
float _mppa_energy;
|
17
|
+
float _mppa_duration;
|
18
|
+
mppa_mon_ctx_t * _mppa_ctx;
|
19
|
+
mppa_mon_sensor_t _mppa_pwr_sensor[] = {MPPA_MON_PWR_MPPA0};
|
20
|
+
mppa_mon_measure_report_t * _mppa_report;
|
21
|
+
mppa_mon_open(0, &_mppa_ctx);
|
22
|
+
mppa_mon_measure_set_sensors(_mppa_ctx, _mppa_pwr_sensor, 1);
|
23
|
+
mppa_mon_measure_start(_mppa_ctx);
|
24
|
+
EOF
|
25
|
+
end
|
26
|
+
|
27
|
+
def configure
|
28
|
+
end
|
29
|
+
|
30
|
+
def start
|
31
|
+
end
|
32
|
+
|
33
|
+
def stop
|
34
|
+
end
|
35
|
+
|
36
|
+
def compute
|
37
|
+
get_output.print <<EOF
|
38
|
+
mppa_mon_measure_stop(_mppa_ctx, &_mppa_report);
|
39
|
+
_mppa_avg_pwr = 0;
|
40
|
+
_mppa_energy = 0;
|
41
|
+
for(_mppa_i=0; _mppa_i < _mppa_report->count; _mppa_i++){
|
42
|
+
_mppa_avg_pwr += _mppa_report->measures[_mppa_i].avg_power;
|
43
|
+
_mppa_energy += _mppa_report->measures[_mppa_i].total_energy;
|
44
|
+
}
|
45
|
+
_mppa_avg_pwr = _mppa_avg_pwr/(float) _mppa_report->count;
|
46
|
+
_mppa_duration = _mppa_report->total_time;
|
47
|
+
mppa_mon_measure_free_report(_mppa_report);
|
48
|
+
mppa_mon_close(_mppa_ctx);
|
49
|
+
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_avg_pwr")),rb_float_new(_mppa_avg_pwr));
|
50
|
+
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_energy")),rb_float_new(_mppa_energy));
|
51
|
+
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_duration")), rb_float_new(_mppa_duration));
|
52
|
+
EOF
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
3
57
|
module MPPARuntime
|
4
58
|
include CRuntime
|
5
59
|
|
@@ -95,10 +149,11 @@ module BOAST
|
|
95
149
|
fill_library_header
|
96
150
|
get_output.puts "#include <mppaipc.h>"
|
97
151
|
get_output.puts "#include <mppa/osconfig.h>"
|
152
|
+
get_output.puts "#include <time.h>"
|
98
153
|
end
|
99
154
|
|
100
155
|
def copy_array_param_from_host( param )
|
101
|
-
get_output.
|
156
|
+
get_output.print <<EOF
|
102
157
|
mppa_read(_mppa_from_host_size, &_mppa_#{param}_size, sizeof(_mppa_#{param}_size));
|
103
158
|
#{param} = malloc(_mppa_#{param}_size);
|
104
159
|
mppa_read(_mppa_from_host_var, #{param}, _mppa_#{param}_size);
|
@@ -106,13 +161,13 @@ EOF
|
|
106
161
|
end
|
107
162
|
|
108
163
|
def copy_scalar_param_from_host( param )
|
109
|
-
get_output.
|
164
|
+
get_output.print <<EOF
|
110
165
|
mppa_read(_mppa_from_host_var, &#{param}, sizeof(#{param}));
|
111
166
|
EOF
|
112
167
|
end
|
113
168
|
|
114
169
|
def get_cluster_list_from_host
|
115
|
-
get_output.
|
170
|
+
get_output.print <<EOF
|
116
171
|
mppa_read(_mppa_from_host_size, &_mppa_clust_list_size, sizeof(_mppa_clust_list_size));
|
117
172
|
_clust_list = malloc(_mppa_clust_list_size);
|
118
173
|
_nb_clust = _mppa_clust_list_size / sizeof(*_clust_list);
|
@@ -121,13 +176,13 @@ EOF
|
|
121
176
|
end
|
122
177
|
|
123
178
|
def copy_array_param_to_host(param)
|
124
|
-
get_output.
|
179
|
+
get_output.print <<EOF
|
125
180
|
mppa_write(_mppa_to_host_var, #{param}, _mppa_#{param}_size);
|
126
181
|
EOF
|
127
182
|
end
|
128
183
|
|
129
184
|
def copy_scalar_param_to_host(param)
|
130
|
-
get_output.
|
185
|
+
get_output.print <<EOF
|
131
186
|
mppa_write(_mppa_to_host_var, &#{param}, sizeof(#{param}));
|
132
187
|
EOF
|
133
188
|
end
|
@@ -135,8 +190,8 @@ EOF
|
|
135
190
|
def multibinary_main_io_source_decl
|
136
191
|
#Parameters declaration
|
137
192
|
@procedure.parameters.each { |param|
|
138
|
-
get_output.
|
139
|
-
get_output.
|
193
|
+
get_output.print " #{param.type.decl} "
|
194
|
+
get_output.print "*" if param.dimension or param.scalar_output?
|
140
195
|
get_output.puts "#{param.name};"
|
141
196
|
if param.dimension then
|
142
197
|
get_output.puts " size_t _mppa_#{param}_size;"
|
@@ -147,14 +202,20 @@ EOF
|
|
147
202
|
get_output.puts " #{@procedure.properties[:return].type.decl} _mppa_ret;" if @procedure.properties[:return]
|
148
203
|
|
149
204
|
#Cluster list declaration
|
150
|
-
get_output.
|
205
|
+
get_output.print <<EOF
|
151
206
|
uint32_t *_clust_list;
|
152
207
|
int _nb_clust;
|
153
208
|
int _mppa_clust_list_size;
|
154
209
|
EOF
|
155
210
|
|
211
|
+
#Timer
|
212
|
+
get_output.print <<EOF
|
213
|
+
struct timespec _mppa_start, _mppa_stop;
|
214
|
+
int64_t _mppa_duration;
|
215
|
+
EOF
|
216
|
+
|
156
217
|
#Communication variables
|
157
|
-
get_output.
|
218
|
+
get_output.print <<EOF
|
158
219
|
int _mppa_from_host_size, _mppa_from_host_var;
|
159
220
|
int _mppa_to_host_size, _mppa_to_host_var;
|
160
221
|
int _mppa_pid[16], _mppa_i;
|
@@ -163,7 +224,7 @@ EOF
|
|
163
224
|
|
164
225
|
def multibinary_main_io_source_get_params
|
165
226
|
#Receiving parameters from Host
|
166
|
-
get_output.
|
227
|
+
get_output.print <<EOF
|
167
228
|
_mppa_from_host_size = mppa_open("/mppa/buffer/board0#mppa0#pcie0#2/host#2", O_RDONLY);
|
168
229
|
_mppa_from_host_var = mppa_open("/mppa/buffer/board0#mppa0#pcie0#3/host#3", O_RDONLY);
|
169
230
|
EOF
|
@@ -178,7 +239,7 @@ EOF
|
|
178
239
|
#Receiving cluster list
|
179
240
|
get_cluster_list_from_host
|
180
241
|
|
181
|
-
get_output.
|
242
|
+
get_output.print <<EOF
|
182
243
|
mppa_close(_mppa_from_host_size);
|
183
244
|
mppa_close(_mppa_from_host_var);
|
184
245
|
EOF
|
@@ -186,7 +247,7 @@ EOF
|
|
186
247
|
|
187
248
|
def multibinary_main_io_source_send_results
|
188
249
|
#Sending results to Host
|
189
|
-
get_output.
|
250
|
+
get_output.print <<EOF
|
190
251
|
_mppa_to_host_var = mppa_open("/mppa/buffer/host#4/board0#mppa0#pcie0#4", O_WRONLY);
|
191
252
|
EOF
|
192
253
|
@procedure.parameters.each { |param|
|
@@ -199,7 +260,8 @@ EOF
|
|
199
260
|
end
|
200
261
|
}
|
201
262
|
copy_scalar_param_to_host("_mppa_ret") if @procedure.properties[:return]
|
202
|
-
|
263
|
+
copy_scalar_param_to_host("_mppa_duration")
|
264
|
+
get_output.print <<EOF
|
203
265
|
mppa_close(_mppa_to_host_var);
|
204
266
|
EOF
|
205
267
|
end
|
@@ -210,22 +272,26 @@ EOF
|
|
210
272
|
multibinary_main_io_source_get_params
|
211
273
|
|
212
274
|
#Spawning cluster
|
213
|
-
get_output.
|
275
|
+
get_output.print <<EOF
|
276
|
+
|
277
|
+
clock_gettime(CLOCK_REALTIME, &_mppa_start);
|
214
278
|
for(_mppa_i=0; _mppa_i<_nb_clust; _mppa_i++){
|
215
279
|
_mppa_pid[_mppa_i] = mppa_spawn(_clust_list[_mppa_i], NULL, "comp-part", NULL, NULL);
|
216
280
|
}
|
217
281
|
EOF
|
218
282
|
#Calling IO procedure
|
219
|
-
get_output.
|
220
|
-
get_output.
|
221
|
-
get_output.
|
283
|
+
get_output.print " _mppa_ret =" if @procedure.properties[:return]
|
284
|
+
get_output.print " #{@procedure.name}("
|
285
|
+
get_output.print @procedure.parameters.map(&:name).join(", ")
|
222
286
|
get_output.puts ");"
|
223
287
|
|
224
288
|
#Waiting for clusters
|
225
|
-
get_output.
|
289
|
+
get_output.print <<EOF
|
226
290
|
for(_mppa_i=0; _mppa_i<_nb_clust; _mppa_i++){
|
227
291
|
mppa_waitpid(_mppa_pid[_mppa_i], NULL, 0);
|
228
292
|
}
|
293
|
+
clock_gettime(CLOCK_REALTIME, &_mppa_stop);
|
294
|
+
_mppa_duration = (int64_t)(_mppa_stop.tv_sec - _mppa_start.tv_sec) * 1000000000ll + _mppa_stop.tv_nsec - _mppa_start.tv_nsec;
|
229
295
|
EOF
|
230
296
|
|
231
297
|
multibinary_main_io_source_send_results
|
@@ -247,7 +313,7 @@ EOF
|
|
247
313
|
end
|
248
314
|
if code then
|
249
315
|
code.rewind
|
250
|
-
get_output.
|
316
|
+
get_output.print code.read
|
251
317
|
end
|
252
318
|
get_output.puts "int main(int argc, const char* argv[]) {"
|
253
319
|
if mode == :io then
|
@@ -255,7 +321,7 @@ EOF
|
|
255
321
|
else
|
256
322
|
fill_multibinary_main_comp_source
|
257
323
|
end
|
258
|
-
get_output.
|
324
|
+
get_output.print <<EOF
|
259
325
|
mppa_exit(0);
|
260
326
|
return 0;
|
261
327
|
}
|
@@ -293,7 +359,6 @@ EOF
|
|
293
359
|
def fill_module_header
|
294
360
|
fill_module_header_old
|
295
361
|
get_output.puts "#include <mppaipc.h>"
|
296
|
-
get_output.puts "#include <mppa_mon.h>"
|
297
362
|
end
|
298
363
|
|
299
364
|
def fill_decl_module_params
|
@@ -304,19 +369,11 @@ EOF
|
|
304
369
|
int _mppa_pid;
|
305
370
|
int _mppa_fd_size;
|
306
371
|
int _mppa_fd_var;
|
307
|
-
float _mppa_avg_pwr;
|
308
|
-
float _mppa_energy;
|
309
|
-
float _mppa_duration;
|
310
372
|
int _mppa_clust_list_size;
|
311
373
|
int _mppa_clust_nb;
|
374
|
+
int64_t _boast_duration;
|
312
375
|
uint32_t * _mppa_clust_list;
|
313
|
-
mppa_mon_ctx_t * _mppa_ctx;
|
314
|
-
mppa_mon_sensor_t _mppa_pwr_sensor[] = {MPPA_MON_PWR_MPPA0};
|
315
|
-
mppa_mon_measure_report_t * _mppa_report;
|
316
|
-
mppa_mon_open(0, &_mppa_ctx);
|
317
|
-
mppa_mon_measure_set_sensors(_mppa_ctx, _mppa_pwr_sensor, 1);
|
318
376
|
_mppa_load_id = mppa_load(0, 0, 0, \"#{multibinary_path}\");
|
319
|
-
mppa_mon_measure_start(_mppa_ctx);
|
320
377
|
_mppa_pid = mppa_spawn(_mppa_load_id, NULL, \"io-part\", NULL, NULL);
|
321
378
|
EOF
|
322
379
|
end
|
@@ -431,32 +488,18 @@ EOF
|
|
431
488
|
_mppa_fd_var = mppa_open(\"/mppa/buffer/host#4/board0#mppa0#pcie0#4\", O_RDONLY);
|
432
489
|
EOF
|
433
490
|
get_results_old
|
434
|
-
get_output.puts "mppa_read(_mppa_fd_var,
|
491
|
+
get_output.puts " mppa_read(_mppa_fd_var, &_boast_ret, sizeof(_boast_ret));" if @procedure.properties[:return]
|
492
|
+
get_output.puts " mppa_read(_mppa_fd_var, &_boast_duration, sizeof(_boast_duration));"
|
435
493
|
get_output.print <<EOF
|
436
494
|
mppa_close(_mppa_fd_var);
|
437
495
|
mppa_waitpid(_mppa_pid, NULL, 0);
|
438
|
-
mppa_mon_measure_stop(_mppa_ctx, &_mppa_report);
|
439
496
|
mppa_unload(_mppa_load_id);
|
440
|
-
_mppa_avg_pwr = 0;
|
441
|
-
_mppa_energy = 0;
|
442
|
-
for(_mppa_i=0; _mppa_i < _mppa_report->count; _mppa_i++){
|
443
|
-
_mppa_avg_pwr += _mppa_report->measures[_mppa_i].avg_power;
|
444
|
-
_mppa_energy += _mppa_report->measures[_mppa_i].total_energy;
|
445
|
-
}
|
446
|
-
_mppa_avg_pwr = _mppa_avg_pwr/(float) _mppa_report->count;
|
447
|
-
_mppa_duration = _mppa_report->total_time;
|
448
|
-
mppa_mon_measure_free_report(_mppa_report);
|
449
|
-
mppa_mon_close(_mppa_ctx);
|
450
497
|
EOF
|
451
498
|
end
|
452
499
|
|
453
500
|
def store_results
|
454
501
|
store_results_old
|
455
|
-
get_output.print
|
456
|
-
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_avg_pwr")),rb_float_new(_mppa_avg_pwr));
|
457
|
-
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_energy")),rb_float_new(_mppa_energy));
|
458
|
-
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_duration")), rb_float_new(_mppa_duration));
|
459
|
-
EOF
|
502
|
+
get_output.print " rb_hash_aset(_boast_stats,ID2SYM(rb_intern(\"duration\")),rb_float_new((double)_boast_duration*(double)1e-9));\n"
|
460
503
|
end
|
461
504
|
|
462
505
|
end
|
data/lib/BOAST/Runtime/Probe.rb
CHANGED
@@ -53,15 +53,13 @@ EOF
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def compute
|
56
|
-
if
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
get_output.print " #{RESULT} = (_boast_stop.tv_sec - _boast_start.tv_sec) * (unsigned long long int)1000000000 + _boast_stop.tv_nsec - _boast_start.tv_nsec;\n"
|
62
|
-
end
|
63
|
-
get_output.print " rb_hash_aset(_boast_stats,ID2SYM(rb_intern(\"duration\")),rb_float_new((double)#{RESULT}*(double)1e-9));\n"
|
56
|
+
if OS.mac? then
|
57
|
+
get_output.print " mach_timebase_info(&_mac_boast_timebase_info);\n"
|
58
|
+
get_output.print " #{RESULT} = (_mac_boast_stop - _mac_boast_start) * _mac_boast_timebase_info.numer / _mac_boast_timebase_info.denom;\n"
|
59
|
+
else
|
60
|
+
get_output.print " #{RESULT} = (int64_t)(_boast_stop.tv_sec - _boast_start.tv_sec) * 1000000000ll + _boast_stop.tv_nsec - _boast_start.tv_nsec;\n"
|
64
61
|
end
|
62
|
+
get_output.print " rb_hash_aset(_boast_stats,ID2SYM(rb_intern(\"duration\")),rb_float_new((double)#{RESULT}*(double)1e-9));\n"
|
65
63
|
end
|
66
64
|
|
67
65
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: BOAST
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brice Videau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: narray
|