BOAST 2.0.2 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BOAST.gemspec +4 -3
- data/lib/BOAST.rb +1 -0
- data/lib/BOAST/Language/Arithmetic.rb +5 -1
- data/lib/BOAST/Language/BOAST_OpenCL.rb +6 -6
- data/lib/BOAST/Language/Case.rb +11 -11
- data/lib/BOAST/Language/Comment.rb +2 -2
- data/lib/BOAST/Language/Config.rb +5 -5
- data/lib/BOAST/Language/DataTypes.rb +31 -29
- data/lib/BOAST/Language/Expression.rb +16 -16
- data/lib/BOAST/Language/For.rb +6 -6
- data/lib/BOAST/Language/FuncCall.rb +7 -7
- data/lib/BOAST/Language/HighLevelOperators.rb +6 -6
- data/lib/BOAST/Language/If.rb +7 -7
- data/lib/BOAST/Language/Index.rb +31 -31
- data/lib/BOAST/Language/Intrinsics.rb +27 -27
- data/lib/BOAST/Language/OpenMP.rb +19 -19
- data/lib/BOAST/Language/Operators.rb +62 -50
- data/lib/BOAST/Language/Pragma.rb +4 -4
- data/lib/BOAST/Language/Procedure.rb +47 -47
- data/lib/BOAST/Language/Slice.rb +14 -14
- data/lib/BOAST/Language/State.rb +1 -1
- data/lib/BOAST/Language/Transitions.rb +1 -1
- data/lib/BOAST/Language/Variable.rb +83 -90
- data/lib/BOAST/Language/While.rb +4 -4
- data/lib/BOAST/Optimization/Optimization.rb +61 -37
- data/lib/BOAST/Runtime/AffinityProbe.rb +99 -15
- data/lib/BOAST/Runtime/CRuntime.rb +18 -6
- data/lib/BOAST/Runtime/CUDARuntime.rb +11 -7
- data/lib/BOAST/Runtime/CoExecute.rb +77 -0
- data/lib/BOAST/Runtime/CompiledRuntime.rb +274 -110
- data/lib/BOAST/Runtime/Compilers.rb +15 -15
- data/lib/BOAST/Runtime/Config.rb +3 -0
- data/lib/BOAST/Runtime/EnergyProbe.rb +86 -71
- data/lib/BOAST/Runtime/FFIRuntime.rb +1 -1
- data/lib/BOAST/Runtime/FORTRANRuntime.rb +15 -5
- data/lib/BOAST/Runtime/MPPARuntime.rb +30 -19
- data/lib/BOAST/Runtime/OpenCLRuntime.rb +2 -2
- data/lib/BOAST/Runtime/Probe.rb +122 -41
- metadata +29 -8
@@ -11,7 +11,7 @@ module BOAST
|
|
11
11
|
|
12
12
|
def get_openmp_flags(compiler)
|
13
13
|
openmp_flags = BOAST::get_openmp_flags[compiler]
|
14
|
-
|
14
|
+
unless openmp_flags then
|
15
15
|
keys = BOAST::get_openmp_flags.keys
|
16
16
|
keys.each { |k|
|
17
17
|
openmp_flags = BOAST::get_openmp_flags[k] if compiler.match(k)
|
@@ -33,7 +33,7 @@ module BOAST
|
|
33
33
|
begin
|
34
34
|
spec = Gem::Specification::find_by_name('narray')
|
35
35
|
narray_path = spec.require_path
|
36
|
-
|
36
|
+
unless File.exist?(narray_path+"/narray.h") then
|
37
37
|
narray_path = spec.full_gem_path
|
38
38
|
end
|
39
39
|
rescue Gem::LoadError => e
|
@@ -42,7 +42,7 @@ module BOAST
|
|
42
42
|
if spec then
|
43
43
|
require 'narray'
|
44
44
|
narray_path = Gem.loaded_specs['narray'].require_path
|
45
|
-
|
45
|
+
unless File.exist?(narray_path+"/narray.h") then
|
46
46
|
narray_path = Gem.loaded_specs['narray'].full_gem_path
|
47
47
|
end
|
48
48
|
end
|
@@ -64,7 +64,7 @@ module BOAST
|
|
64
64
|
objext = RbConfig::CONFIG["OBJEXT"]
|
65
65
|
if (options[:openmp] or options[:OPENMP]) and @lang == C and not disable_openmp then
|
66
66
|
openmp_cflags = get_openmp_flags(c_compiler)
|
67
|
-
raise "unkwown openmp flags for: #{c_compiler}"
|
67
|
+
raise "unkwown openmp flags for: #{c_compiler}" unless openmp_cflags
|
68
68
|
cflags += " #{openmp_cflags}"
|
69
69
|
end
|
70
70
|
|
@@ -81,13 +81,13 @@ module BOAST
|
|
81
81
|
end
|
82
82
|
|
83
83
|
rule ".#{objext}io" => ".cio" do |t|
|
84
|
-
c_call_string = "#{c_mppa_compiler} -mcore=
|
84
|
+
c_call_string = "#{c_mppa_compiler} -mcore=k1bio -mos=rtems"
|
85
85
|
c_call_string += " -mboard=developer -x c -c -o #{t.name} #{t.source}"
|
86
86
|
runner.call(t, c_call_string)
|
87
87
|
end
|
88
88
|
|
89
89
|
rule ".#{objext}comp" => ".ccomp" do |t|
|
90
|
-
c_call_string = "#{c_mppa_compiler} -mcore=
|
90
|
+
c_call_string = "#{c_mppa_compiler} -mcore=k1bdp -mos=nodeos"
|
91
91
|
c_call_string += " -mboard=developer -x c -c -o #{t.name} #{t.source}"
|
92
92
|
runner.call(t, c_call_string)
|
93
93
|
end
|
@@ -99,7 +99,7 @@ module BOAST
|
|
99
99
|
cxxflags += " -fPIC #{includes}"
|
100
100
|
if (options[:openmp] or options[:OPENMP]) and @lang == C and not disable_openmp then
|
101
101
|
openmp_cxxflags = get_openmp_flags(cxx_compiler)
|
102
|
-
raise "unkwown openmp flags for: #{cxx_compiler}"
|
102
|
+
raise "unkwown openmp flags for: #{cxx_compiler}" unless openmp_cxxflags
|
103
103
|
cxxflags += " #{openmp_cxxflags}"
|
104
104
|
end
|
105
105
|
|
@@ -124,7 +124,7 @@ module BOAST
|
|
124
124
|
fcflags += " -fno-second-underscore" if f_compiler == 'g95'
|
125
125
|
if (options[:openmp] or options[:OPENMP]) and @lang == FORTRAN and not disable_openmp then
|
126
126
|
openmp_fcflags = get_openmp_flags(f_compiler)
|
127
|
-
raise "unkwown openmp flags for: #{f_compiler}"
|
127
|
+
raise "unkwown openmp flags for: #{f_compiler}" unless openmp_fcflags
|
128
128
|
fcflags += " #{openmp_fcflags}"
|
129
129
|
end
|
130
130
|
|
@@ -161,12 +161,12 @@ module BOAST
|
|
161
161
|
linker = "k1-gcc"
|
162
162
|
|
163
163
|
rule ".bincomp" => ".#{objext}comp" do |t|
|
164
|
-
linker_string = "#{linker} -o #{t.name} #{t.source} -mcore=
|
164
|
+
linker_string = "#{linker} -o #{t.name} #{t.source} -mcore=k1bdp #{board} -mos=nodeos #{ldflags}"
|
165
165
|
runner.call(t, linker_string)
|
166
166
|
end
|
167
167
|
|
168
168
|
rule ".binio" => ".#{objext}io" do |t|
|
169
|
-
linker_string = "#{linker} -o #{t.name} #{t.source} -mcore=
|
169
|
+
linker_string = "#{linker} -o #{t.name} #{t.source} -mcore=k1bio #{board} -mos=rtems #{ldflags}"
|
170
170
|
runner.call(t, linker_string)
|
171
171
|
end
|
172
172
|
|
@@ -188,12 +188,12 @@ module BOAST
|
|
188
188
|
ldflags += " -L/usr/local/k1tools/lib64 -lmppaipc -lpcie -lz -lelf -lmppa_multiloader" if @architecture == MPPA
|
189
189
|
ldflags += " -lmppamon -lmppabm -lm -lmppalock" if @architecture == MPPA
|
190
190
|
c_compiler = options[:CC]
|
191
|
-
c_compiler = "cc"
|
191
|
+
c_compiler = "cc" unless c_compiler
|
192
192
|
linker = options[:LD]
|
193
|
-
linker = c_compiler
|
193
|
+
linker = c_compiler unless linker
|
194
194
|
if (options[:openmp] or options[:OPENMP]) and not disable_openmp then
|
195
195
|
openmp_ldflags = get_openmp_flags(linker)
|
196
|
-
raise "unknown openmp flags for: #{linker}"
|
196
|
+
raise "unknown openmp flags for: #{linker}" unless openmp_ldflags
|
197
197
|
ldflags += " #{openmp_ldflags}"
|
198
198
|
end
|
199
199
|
|
@@ -211,7 +211,7 @@ module BOAST
|
|
211
211
|
def setup_compilers(probes, options = {})
|
212
212
|
Rake::Task::clear
|
213
213
|
verbose = options[:VERBOSE]
|
214
|
-
verbose = get_verbose
|
214
|
+
verbose = get_verbose unless verbose
|
215
215
|
Rake::verbose(verbose)
|
216
216
|
Rake::FileUtilsExt.verbose_flag=verbose
|
217
217
|
|
@@ -223,7 +223,7 @@ module BOAST
|
|
223
223
|
sh call_string
|
224
224
|
else
|
225
225
|
status, _, stderr = systemu call_string
|
226
|
-
|
226
|
+
unless status.success? then
|
227
227
|
puts stderr
|
228
228
|
fail "#{t.source}: compilation failed"
|
229
229
|
end
|
data/lib/BOAST/Runtime/Config.rb
CHANGED
@@ -50,6 +50,7 @@ module BOAST
|
|
50
50
|
private_boolean_state_accessor :executable
|
51
51
|
private_boolean_state_accessor :keep_temp
|
52
52
|
private_state_accessor :fortran_line_length
|
53
|
+
private_state_accessor :synchro
|
53
54
|
end
|
54
55
|
|
55
56
|
boolean_state_accessor :verbose
|
@@ -59,6 +60,7 @@ module BOAST
|
|
59
60
|
boolean_state_accessor :executable
|
60
61
|
boolean_state_accessor :keep_temp
|
61
62
|
state_accessor :fortran_line_length
|
63
|
+
state_accessor :synchro
|
62
64
|
default_state_getter :verbose, false
|
63
65
|
default_state_getter :debug_source, false
|
64
66
|
default_state_getter :debug_kernel_source, false
|
@@ -66,6 +68,7 @@ module BOAST
|
|
66
68
|
default_state_getter :executable, false
|
67
69
|
default_state_getter :keep_temp, false
|
68
70
|
default_state_getter :fortran_line_length, 72
|
71
|
+
default_state_getter :synchro, "MUTEX"
|
69
72
|
|
70
73
|
module_function
|
71
74
|
|
@@ -6,32 +6,28 @@ module BOAST
|
|
6
6
|
get_output.puts "#include <stdio.h>"
|
7
7
|
get_output.puts "#include <stdint.h>"
|
8
8
|
end
|
9
|
-
def
|
10
|
-
get_output.puts "char **_boast_energy_files = 0;"
|
11
|
-
get_output.puts "char **_boast_energy_names = 0;"
|
12
|
-
get_output.puts "uint64_t *_boast_energy_0 = 0;"
|
13
|
-
get_output.puts "uint64_t *_boast_energy_1 = 0;"
|
14
|
-
get_output.puts "int _boast_energy_nsensors = 0;"
|
15
|
-
end
|
16
|
-
def configure
|
9
|
+
def preamble
|
17
10
|
get_output.print <<EOF
|
18
|
-
{
|
11
|
+
struct _boast_powercap_param_struct {
|
12
|
+
char **files;
|
13
|
+
char **names;
|
14
|
+
uint64_t *energy_0;
|
15
|
+
uint64_t *energy_1;
|
16
|
+
int nsensors;
|
17
|
+
};
|
18
|
+
|
19
|
+
static int _boast_powercap_init(uint64_t **energy_0, uint64_t **energy_1, char ***files, char ***names);
|
20
|
+
static int _boast_powercap_init(uint64_t **energy_0, uint64_t **energy_1, char ***files, char ***names) {
|
21
|
+
int nsensors = 0;
|
19
22
|
char buf[128];
|
20
23
|
char path[128];
|
21
24
|
char *s;
|
22
25
|
FILE *f;
|
23
26
|
int nproc;
|
24
27
|
int i;
|
25
|
-
if( _boast_energy_nsensors ){
|
26
|
-
free(_boast_energy_files);
|
27
|
-
for(i=0; i < _boast_energy_nsensors; ++i)
|
28
|
-
free(_boast_energy_names[i]);
|
29
|
-
free(_boast_energy_names);
|
30
|
-
_boast_energy_nsensors = 0;
|
31
|
-
}
|
32
|
-
_boast_energy_files = malloc(1);
|
33
|
-
_boast_energy_names = malloc(1);
|
34
28
|
|
29
|
+
*files = malloc(1);
|
30
|
+
*names = malloc(1);
|
35
31
|
for(nproc = 0; ; ++nproc){
|
36
32
|
sprintf(path,"/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d",nproc);
|
37
33
|
sprintf(buf,"%s/energy_uj",path);
|
@@ -39,90 +35,105 @@ module BOAST
|
|
39
35
|
if(!f)
|
40
36
|
break;
|
41
37
|
i = 0;
|
42
|
-
do{
|
43
|
-
int
|
38
|
+
do {
|
39
|
+
int fread_ret;
|
44
40
|
fclose(f);
|
45
|
-
++
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
s =
|
51
|
-
sprintf(
|
41
|
+
++nsensors;
|
42
|
+
*files = realloc(*files, nsensors * sizeof(**files));
|
43
|
+
*names = realloc(*names, nsensors * sizeof(**names));
|
44
|
+
(*files)[nsensors-1] = malloc(128);
|
45
|
+
(*names)[nsensors-1] = malloc( 16);
|
46
|
+
s = (*names)[nsensors-1];
|
47
|
+
sprintf((*files)[nsensors-1],"%s",buf);
|
52
48
|
sprintf(buf, "%s/name", path);
|
53
49
|
f = fopen(buf, "r");
|
54
|
-
|
50
|
+
fread_ret = fread(buf, 1, sizeof(buf), f);
|
55
51
|
fclose(f);
|
56
|
-
if(
|
52
|
+
if(fread_ret == 0)
|
57
53
|
rb_raise(rb_eArgError, "Energy probe read error!");
|
58
54
|
/* last character read is a line break */
|
59
|
-
buf[
|
55
|
+
buf[fread_ret-1] = 0;
|
60
56
|
sprintf(s, "%d.%s", nproc, buf);
|
61
57
|
|
62
58
|
sprintf(path,"/sys/devices/virtual/powercap/intel-rapl/intel-rapl:%d/intel-rapl:%d:%d",nproc,nproc,i++);
|
63
59
|
sprintf(buf,"%s/energy_uj",path);
|
64
60
|
f = fopen(buf, "rt");
|
65
|
-
}while(f);
|
61
|
+
} while(f);
|
66
62
|
}
|
67
|
-
if( !
|
68
|
-
free(
|
69
|
-
free(
|
70
|
-
}else{
|
71
|
-
|
72
|
-
|
63
|
+
if( ! nsensors ) {
|
64
|
+
free( *files );
|
65
|
+
free( *names );
|
66
|
+
} else {
|
67
|
+
*energy_0 = malloc(nsensors * sizeof(**energy_0));
|
68
|
+
*energy_1 = malloc(nsensors * sizeof(**energy_1));
|
73
69
|
}
|
70
|
+
return nsensors;
|
74
71
|
}
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
get_output.print <<EOF
|
79
|
-
{
|
72
|
+
|
73
|
+
static void _boast_powercap_read(int nsensors, char **files, uint64_t *energy);
|
74
|
+
static void _boast_powercap_read(int nsensors, char **files, uint64_t *energy) {
|
80
75
|
char buf[32];
|
81
76
|
FILE *f;
|
82
77
|
int i;
|
83
|
-
for(i = 0; i <
|
84
|
-
int
|
85
|
-
f = fopen(
|
86
|
-
|
78
|
+
for(i = 0; i < nsensors; ++i){
|
79
|
+
int fread_ret;
|
80
|
+
f = fopen(files[i], "r");
|
81
|
+
fread_ret = fread(buf, 1, sizeof(buf), f);
|
87
82
|
fclose(f);
|
88
|
-
if(
|
83
|
+
if(fread_ret == 0) {
|
89
84
|
rb_raise(rb_eArgError, "Energy probe read error!");
|
90
|
-
|
85
|
+
}
|
86
|
+
energy[i] = atoll(buf);
|
91
87
|
}
|
92
88
|
}
|
89
|
+
|
90
|
+
static void _boast_powercap_store_and_clean( int nsensors, uint64_t *energy_0, uint64_t *energy_1, char **files, char **names, VALUE _boast_stats);
|
91
|
+
static void _boast_powercap_store_and_clean( int nsensors, uint64_t *energy_0, uint64_t *energy_1, char **files, char **names, VALUE _boast_stats) {
|
92
|
+
VALUE results;
|
93
|
+
int i;
|
94
|
+
if( nsensors ) {
|
95
|
+
results = rb_hash_new();
|
96
|
+
for(i=0; i < nsensors; ++i){
|
97
|
+
rb_hash_aset(results, ID2SYM(rb_intern(names[i])), rb_float_new((energy_1[i] - energy_0[i]) * 1e-6));
|
98
|
+
}
|
99
|
+
rb_hash_aset(_boast_stats, ID2SYM(rb_intern("energy")), results);
|
100
|
+
|
101
|
+
free(energy_0);
|
102
|
+
free(energy_1);
|
103
|
+
for(i=0; i < nsensors; ++i){
|
104
|
+
free(files[i]);
|
105
|
+
free(names[i]);
|
106
|
+
}
|
107
|
+
free(files);
|
108
|
+
free(names);
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
EOF
|
113
|
+
end
|
114
|
+
def decl
|
115
|
+
get_output.puts " struct _boast_powercap_param_struct _boast_powercap_params = {0,0,0,0,0};"
|
116
|
+
end
|
117
|
+
def configure
|
118
|
+
get_output.print <<EOF
|
119
|
+
_boast_powercap_params.nsensors = _boast_powercap_init(&_boast_powercap_params.energy_0, &_boast_powercap_params.energy_1, &_boast_powercap_params.files, &_boast_powercap_params.names);
|
120
|
+
EOF
|
121
|
+
end
|
122
|
+
def start
|
123
|
+
get_output.print <<EOF
|
124
|
+
_boast_powercap_read(_boast_powercap_params.nsensors, _boast_powercap_params.files, _boast_powercap_params.energy_0);
|
93
125
|
EOF
|
94
126
|
end
|
95
127
|
def stop
|
96
128
|
get_output.print <<EOF
|
97
|
-
|
98
|
-
char buf[32];
|
99
|
-
FILE *f;
|
100
|
-
int i;
|
101
|
-
for(i = 0; i < _boast_energy_nsensors; ++i){
|
102
|
-
int _boast_fread_ret;
|
103
|
-
f = fopen(_boast_energy_files[i], "r");
|
104
|
-
_boast_fread_ret = fread(buf, 1, sizeof(buf), f);
|
105
|
-
fclose(f);
|
106
|
-
if(_boast_fread_ret == 0)
|
107
|
-
rb_raise(rb_eArgError, "Energy probe read error!");
|
108
|
-
_boast_energy_1[i] = atoll(buf);
|
109
|
-
}
|
110
|
-
}
|
129
|
+
_boast_powercap_read(_boast_powercap_params.nsensors, _boast_powercap_params.files, _boast_powercap_params.energy_1);
|
111
130
|
EOF
|
112
131
|
end
|
113
132
|
def compute
|
114
133
|
end
|
115
134
|
def store
|
116
135
|
get_output.print <<EOF
|
117
|
-
|
118
|
-
VALUE results;
|
119
|
-
int i;
|
120
|
-
results = rb_hash_new();
|
121
|
-
for(i=0; i < _boast_energy_nsensors; ++i){
|
122
|
-
rb_hash_aset(results, ID2SYM(rb_intern(_boast_energy_names[i])), rb_float_new((_boast_energy_1[i] - _boast_energy_0[i]) * 1e-6));
|
123
|
-
}
|
124
|
-
rb_hash_aset(_boast_stats, ID2SYM(rb_intern("energy")), results);
|
125
|
-
}
|
136
|
+
_boast_powercap_store_and_clean( _boast_powercap_params.nsensors, _boast_powercap_params.energy_0, _boast_powercap_params.energy_1, _boast_powercap_params.files, _boast_powercap_params.names, _boast_stats);
|
126
137
|
EOF
|
127
138
|
end
|
128
139
|
def is_available?
|
@@ -136,6 +147,8 @@ EOF
|
|
136
147
|
def header
|
137
148
|
get_output.puts "#include <redfst.h>"
|
138
149
|
end
|
150
|
+
def preamble
|
151
|
+
end
|
139
152
|
def decl
|
140
153
|
get_output.puts "redfst_dev_t *_boast_energy=0;"
|
141
154
|
end
|
@@ -202,6 +215,8 @@ EOF
|
|
202
215
|
def header
|
203
216
|
get_output.puts "#include <eml.h>"
|
204
217
|
end
|
218
|
+
def preamble
|
219
|
+
end
|
205
220
|
def decl
|
206
221
|
get_output.puts "emlData_t **_boast_energy=0;";
|
207
222
|
get_output.puts "size_t _boast_energy_count=0;";
|
@@ -111,7 +111,7 @@ EOF
|
|
111
111
|
ev_set.destroy
|
112
112
|
end
|
113
113
|
end
|
114
|
-
results = { :start => start, :
|
114
|
+
results = { :start => start, :end => stop, :duration => stop - start, :return => ret }
|
115
115
|
results[:PAPI] = Hash[[options[:PAPI]].flatten.zip(counters)] if ev_set
|
116
116
|
if r_args.length > 0 then
|
117
117
|
ref_return = {}
|
@@ -44,16 +44,26 @@ module BOAST
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
def create_procedure_indirect_call_parameters
|
48
|
+
return @procedure.parameters.collect { |param|
|
49
|
+
par = "#{param_struct.struct_reference(param_struct.type.members[param.name.to_s])}".gsub("_boast_params.","_boast_params->")
|
50
|
+
if param.dimension then
|
51
|
+
"#{par}"
|
52
|
+
else
|
53
|
+
"&#{par}"
|
54
|
+
end
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
47
58
|
def create_procedure_call_parameters
|
48
|
-
|
49
|
-
|
59
|
+
return @procedure.parameters.collect { |param|
|
60
|
+
par = param_struct.struct_reference(param_struct.type.members[param.name.to_s])
|
50
61
|
if param.dimension then
|
51
|
-
|
62
|
+
"#{par}"
|
52
63
|
else
|
53
|
-
|
64
|
+
"&#{par}"
|
54
65
|
end
|
55
66
|
}
|
56
|
-
return params
|
57
67
|
end
|
58
68
|
|
59
69
|
end
|
@@ -11,6 +11,9 @@ module BOAST
|
|
11
11
|
get_output.puts "#include <mppa_mon.h>"
|
12
12
|
end
|
13
13
|
|
14
|
+
def preamble
|
15
|
+
end
|
16
|
+
|
14
17
|
def decl
|
15
18
|
get_output.print <<EOF
|
16
19
|
float _mppa_avg_pwr;
|
@@ -47,6 +50,11 @@ EOF
|
|
47
50
|
_mppa_duration = _mppa_report->total_time;
|
48
51
|
mppa_mon_measure_free_report(_mppa_report);
|
49
52
|
mppa_mon_close(_mppa_ctx);
|
53
|
+
EOF
|
54
|
+
end
|
55
|
+
|
56
|
+
def store
|
57
|
+
get_output.print <<EOF
|
50
58
|
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_avg_pwr")),rb_float_new(_mppa_avg_pwr));
|
51
59
|
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_energy")),rb_float_new(_mppa_energy));
|
52
60
|
rb_hash_aset(_boast_stats,ID2SYM(rb_intern("mppa_duration")), rb_float_new(_mppa_duration));
|
@@ -111,7 +119,7 @@ EOF
|
|
111
119
|
end
|
112
120
|
|
113
121
|
def set_io
|
114
|
-
set_output(@
|
122
|
+
set_output(@code)
|
115
123
|
end
|
116
124
|
|
117
125
|
def set_comp
|
@@ -151,8 +159,8 @@ EOF
|
|
151
159
|
f.close
|
152
160
|
end
|
153
161
|
|
154
|
-
def create_targets( linker, ldshared, ldflags, kernel_files )
|
155
|
-
create_targets_old( linker, ldshared, ldflags, kernel_files )
|
162
|
+
def create_targets( linker, ldshared, ldshared_flags, ldflags, kernel_files )
|
163
|
+
create_targets_old( linker, ldshared, ldshared_flags, ldflags, kernel_files )
|
156
164
|
file multibinary_path => [io_bin, comp_bin] do
|
157
165
|
sh "k1-create-multibinary --clusters #{comp_bin} --clusters-names \"comp-part\" --boot #{io_bin} --bootname \"io-part\" -T #{multibinary_path}"
|
158
166
|
end
|
@@ -392,7 +400,7 @@ EOF
|
|
392
400
|
EOF
|
393
401
|
end
|
394
402
|
|
395
|
-
def copy_array_param_from_ruby( param, ruby_param )
|
403
|
+
def copy_array_param_from_ruby(par, param, ruby_param )
|
396
404
|
rb_ptr = Variable::new("_boast_rb_ptr", CustomType, :type_name => "VALUE")
|
397
405
|
(rb_ptr === ruby_param).pr
|
398
406
|
get_output.print <<EOF
|
@@ -402,23 +410,23 @@ EOF
|
|
402
410
|
Data_Get_Struct(_boast_rb_ptr, struct NARRAY, _boast_n_ary);
|
403
411
|
_boast_array_size = _boast_n_ary->total * na_sizeof[_boast_n_ary->type];
|
404
412
|
mppa_write(_mppa_fd_size, &_boast_array_size, sizeof(_boast_array_size));
|
405
|
-
#{
|
406
|
-
mppa_write(_mppa_fd_var, #{
|
413
|
+
#{par} = (void *) _boast_n_ary->ptr;
|
414
|
+
mppa_write(_mppa_fd_var, #{par}, _boast_array_size);
|
407
415
|
} else {
|
408
416
|
rb_raise(rb_eArgError, "Wrong type of argument for %s, expecting array!", "#{param}");
|
409
417
|
}
|
410
418
|
EOF
|
411
419
|
end
|
412
420
|
|
413
|
-
def copy_scalar_param_from_ruby( param, ruby_param )
|
421
|
+
def copy_scalar_param_from_ruby(par, param, ruby_param )
|
414
422
|
case param.type
|
415
423
|
when Int
|
416
|
-
(
|
417
|
-
(
|
424
|
+
(par === FuncCall::new("NUM2INT", ruby_param)).pr if param.type.size == 4
|
425
|
+
(par === FuncCall::new("NUM2LONG", ruby_param)).pr if param.type.size == 8
|
418
426
|
when Real
|
419
|
-
(
|
427
|
+
(par === FuncCall::new("NUM2DBL", ruby_param)).pr
|
420
428
|
end
|
421
|
-
get_output.puts " mppa_write(_mppa_fd_var, &#{
|
429
|
+
get_output.puts " mppa_write(_mppa_fd_var, &#{par}, sizeof(#{par}));"
|
422
430
|
end
|
423
431
|
|
424
432
|
def get_params_value
|
@@ -460,7 +468,7 @@ EOF
|
|
460
468
|
def create_procedure_call
|
461
469
|
end
|
462
470
|
|
463
|
-
def copy_array_param_to_ruby(param, ruby_param)
|
471
|
+
def copy_array_param_to_ruby(par, param, ruby_param)
|
464
472
|
rb_ptr = Variable::new("_boast_rb_ptr", CustomType, :type_name => "VALUE")
|
465
473
|
(rb_ptr === ruby_param).pr
|
466
474
|
get_output.print <<EOF
|
@@ -472,7 +480,7 @@ EOF
|
|
472
480
|
size_t _boast_array_size;
|
473
481
|
Data_Get_Struct(_boast_rb_ptr, struct NARRAY, _boast_n_ary);
|
474
482
|
_boast_array_size = _boast_n_ary->total * na_sizeof[_boast_n_ary->type];
|
475
|
-
mppa_read(_mppa_fd_var, #{
|
483
|
+
mppa_read(_mppa_fd_var, #{par}, _boast_array_size);
|
476
484
|
EOF
|
477
485
|
end
|
478
486
|
get_output.print <<EOF
|
@@ -482,17 +490,20 @@ EOF
|
|
482
490
|
EOF
|
483
491
|
end
|
484
492
|
|
485
|
-
def copy_scalar_param_to_ruby(param, ruby_param)
|
493
|
+
def copy_scalar_param_to_ruby(par, param, ruby_param)
|
486
494
|
if param.scalar_output? then
|
487
495
|
get_output.print <<EOF
|
488
|
-
mppa_read(_mppa_fd_var, &#{
|
496
|
+
mppa_read(_mppa_fd_var, &#{par}, sizeof(#{par}));
|
489
497
|
EOF
|
490
498
|
case param.type
|
491
499
|
when Int
|
492
|
-
|
493
|
-
|
500
|
+
if param.type.signed? then
|
501
|
+
get_output.puts " rb_hash_aset(_boast_refs, ID2SYM(rb_intern(\"#{param}\")),rb_int_new((long long)#{par}));"
|
502
|
+
else
|
503
|
+
get_output.puts " rb_hash_aset(_boast_refs, ID2SYM(rb_intern(\"#{param}\")),rb_int_new((unsigned long long)#{par}));"
|
504
|
+
end
|
494
505
|
when Real
|
495
|
-
get_output.puts " rb_hash_aset(_boast_refs, ID2SYM(rb_intern(\"#{param}\")),rb_float_new((double)#{
|
506
|
+
get_output.puts " rb_hash_aset(_boast_refs, ID2SYM(rb_intern(\"#{param}\")),rb_float_new((double)#{par}));"
|
496
507
|
end
|
497
508
|
end
|
498
509
|
end
|
@@ -502,7 +513,7 @@ EOF
|
|
502
513
|
_mppa_fd_var = mppa_open(\"/mppa/buffer/host#4/board0#mppa0#pcie0#4\", O_RDONLY);
|
503
514
|
EOF
|
504
515
|
get_results_old
|
505
|
-
get_output.puts " mppa_read(_mppa_fd_var, &_boast_ret, sizeof(_boast_ret));" if @procedure.properties[:return]
|
516
|
+
get_output.puts " mppa_read(_mppa_fd_var, &_boast_params._boast_ret, sizeof(_boast_params._boast_ret));" if @procedure.properties[:return]
|
506
517
|
get_output.puts " mppa_read(_mppa_fd_var, &_boast_duration, sizeof(_boast_duration));"
|
507
518
|
get_output.print <<EOF
|
508
519
|
mppa_close(_mppa_fd_var);
|