BOAST 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BOAST.gemspec +2 -1
- data/lib/BOAST/Language/Algorithm.rb +3 -0
- data/lib/BOAST/Language/Procedure.rb +6 -0
- data/lib/BOAST/Language/Variable.rb +56 -0
- data/lib/BOAST/Runtime/CKernel.rb +1 -1
- data/lib/BOAST/Runtime/CRuntime.rb +1 -0
- data/lib/BOAST/Runtime/CompiledRuntime.rb +27 -0
- data/lib/BOAST/Runtime/Config.rb +1 -0
- data/lib/BOAST/Runtime/MAQAO.rb +28 -0
- data/lib/BOAST/Runtime/MPPARuntime.rb +12 -0
- data/lib/BOAST.rb +1 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c85b9d3cf15ddaa43c8772daa563fc77ffa0e2d8
|
4
|
+
data.tar.gz: 2c3f92c1b64383ef09e28333f882bbeb2f717ee6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c48d0c7349a97e7d2ffb7a632e21d01e7af48d69009dbf635d95ba81d22aa76b24321b2d9bf0da83da77d114ccf11dae5272084334bd3aa76a633d339b37fe60
|
7
|
+
data.tar.gz: 12fa72007ca814bff99b9a0e3593113fde333f66a6194b7b853164c8e3e7fa47f9705095e75c37303ee9f60dbaf16eb74a1649be3e46c5889cc9007b5a7f8f1b
|
data/BOAST.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'BOAST'
|
3
|
-
s.version = "1.0.
|
3
|
+
s.version = "1.0.6"
|
4
4
|
s.author = "Brice Videau"
|
5
5
|
s.email = "brice.videau@imag.fr"
|
6
6
|
s.homepage = "https://github.com/Nanosim-LIG/boast"
|
@@ -11,6 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.license = 'BSD'
|
12
12
|
s.required_ruby_version = '>= 1.9.3'
|
13
13
|
s.add_dependency 'narray', '~> 0.6.0', '>=0.6.0.8'
|
14
|
+
s.add_dependency 'narray_ffi', '~> 1.2', '>=1.2.0'
|
14
15
|
s.add_dependency 'opencl_ruby_ffi', '~> 1.0', '>=1.0.0'
|
15
16
|
s.add_dependency 'systemu', '~> 2', '>=2.2.0'
|
16
17
|
s.add_dependency 'os', '~> 0.9', '>=0.9.6'
|
@@ -14,6 +14,7 @@ module BOAST
|
|
14
14
|
|
15
15
|
private_state_accessor :output, :lang, :architecture
|
16
16
|
private_state_accessor :default_int_size, :default_real_size
|
17
|
+
private_state_accessor :default_align
|
17
18
|
private_state_accessor :array_start
|
18
19
|
private_state_accessor :indent_level, :indent_increment
|
19
20
|
|
@@ -49,6 +50,7 @@ module BOAST
|
|
49
50
|
|
50
51
|
state_accessor :output, :lang, :architecture
|
51
52
|
state_accessor :default_int_size, :default_real_size
|
53
|
+
state_accessor :default_align
|
52
54
|
state_accessor :array_start
|
53
55
|
state_accessor :indent_level, :indent_increment
|
54
56
|
|
@@ -85,6 +87,7 @@ module BOAST
|
|
85
87
|
@@default_int_size = 4
|
86
88
|
@@default_int_signed = true
|
87
89
|
@@default_real_size = 8
|
90
|
+
@@default_align = 1
|
88
91
|
@@indent_level = 0
|
89
92
|
@@indent_increment = 2
|
90
93
|
@@array_start = 1
|
@@ -207,6 +207,11 @@ module BOAST
|
|
207
207
|
constants.each { |c|
|
208
208
|
c.decl
|
209
209
|
}
|
210
|
+
if lang == C then
|
211
|
+
parameters.each { |p|
|
212
|
+
p.align
|
213
|
+
}
|
214
|
+
end
|
210
215
|
return self
|
211
216
|
end
|
212
217
|
|
@@ -221,6 +226,7 @@ module BOAST
|
|
221
226
|
}
|
222
227
|
parameters.each { |p|
|
223
228
|
p.decl
|
229
|
+
p.align
|
224
230
|
}
|
225
231
|
return self
|
226
232
|
end
|
@@ -137,6 +137,7 @@ module BOAST
|
|
137
137
|
attr_reader :texture
|
138
138
|
attr_reader :sampler
|
139
139
|
attr_reader :restrict
|
140
|
+
attr_reader :align
|
140
141
|
attr_accessor :replace_constant
|
141
142
|
attr_accessor :force_replace_constant
|
142
143
|
|
@@ -176,6 +177,10 @@ module BOAST
|
|
176
177
|
!!@scalar_output
|
177
178
|
end
|
178
179
|
|
180
|
+
def align?
|
181
|
+
!!@align
|
182
|
+
end
|
183
|
+
|
179
184
|
def initialize(name,type,hash={})
|
180
185
|
@name = name.to_s
|
181
186
|
@direction = hash[:direction] ? hash[:direction] : hash[:dir]
|
@@ -185,6 +190,7 @@ module BOAST
|
|
185
190
|
@texture = hash[:texture]
|
186
191
|
@allocate = hash[:allocate]
|
187
192
|
@restrict = hash[:restrict]
|
193
|
+
@align = hash[:align]
|
188
194
|
@force_replace_constant = false
|
189
195
|
if not hash[:replace_constant].nil? then
|
190
196
|
@replace_constant = hash[:replace_constant]
|
@@ -352,6 +358,11 @@ module BOAST
|
|
352
358
|
s +=")]"
|
353
359
|
end
|
354
360
|
end
|
361
|
+
if dimension? and (align? or default_align > 1) and (constant? or allocate?) then
|
362
|
+
a = ( align? ? align : 1 )
|
363
|
+
a = ( a >= default_align ? a : default_align )
|
364
|
+
s+= " __attribute((aligned(#{a})))"
|
365
|
+
end
|
355
366
|
s += " = #{@constant}" if constant?
|
356
367
|
return s
|
357
368
|
end
|
@@ -388,6 +399,42 @@ module BOAST
|
|
388
399
|
return self
|
389
400
|
end
|
390
401
|
|
402
|
+
def align_c_s(a)
|
403
|
+
return "__assume_aligned(#{@name}, #{a})"
|
404
|
+
end
|
405
|
+
|
406
|
+
def align_c(a)
|
407
|
+
s = ""
|
408
|
+
s += indent
|
409
|
+
s += align_c_s(a)
|
410
|
+
s += finalize
|
411
|
+
output.print s
|
412
|
+
return self
|
413
|
+
end
|
414
|
+
|
415
|
+
def align_fortran_s(a)
|
416
|
+
return "!DIR$ ASSUME_ALIGNED #{@name}: #{a}"
|
417
|
+
end
|
418
|
+
|
419
|
+
def align_fortran(a)
|
420
|
+
s = ""
|
421
|
+
s += indent
|
422
|
+
s += align_fortran_s(a)
|
423
|
+
s += finalize
|
424
|
+
output.print s
|
425
|
+
return self
|
426
|
+
end
|
427
|
+
|
428
|
+
def align
|
429
|
+
if dimension? then
|
430
|
+
if align? or default_align > 1 then
|
431
|
+
a = ( align? ? align : 1 )
|
432
|
+
a = ( a >= default_align ? a : default_align )
|
433
|
+
return align_c(a) if lang == C
|
434
|
+
return align_fortran(a) if lang == FORTRAN
|
435
|
+
end
|
436
|
+
end
|
437
|
+
end
|
391
438
|
|
392
439
|
def decl_fortran
|
393
440
|
s = ""
|
@@ -414,6 +461,15 @@ module BOAST
|
|
414
461
|
end
|
415
462
|
s += finalize
|
416
463
|
output.print s
|
464
|
+
if dimension? and (align? or default_align > 1) and (constant? or allocate?) then
|
465
|
+
a = ( align? ? align : 1 )
|
466
|
+
a = ( a >= default_align ? a : default_align )
|
467
|
+
s = ""
|
468
|
+
s += indent
|
469
|
+
s += "!DIR$ ATTRIBUTES ALIGN: #{a}:: #{name}"
|
470
|
+
s += finalize
|
471
|
+
output.print s
|
472
|
+
end
|
417
473
|
return self
|
418
474
|
end
|
419
475
|
|
@@ -5,6 +5,7 @@ module BOAST
|
|
5
5
|
|
6
6
|
def fill_library_header
|
7
7
|
get_output.puts "#include <inttypes.h>"
|
8
|
+
get_output.puts "#define __assume_aligned(lvalueptr, align) lvalueptr = __builtin_assume_aligned (lvalueptr, align)" if @compiler_options[:CC].match("gcc")
|
8
9
|
end
|
9
10
|
|
10
11
|
def fill_library_source
|
@@ -31,6 +31,9 @@ end
|
|
31
31
|
module BOAST
|
32
32
|
|
33
33
|
module CompiledRuntime
|
34
|
+
attr_accessor :binary
|
35
|
+
attr_accessor :source
|
36
|
+
|
34
37
|
@@extensions = {
|
35
38
|
C => ".c",
|
36
39
|
CUDA => ".cu",
|
@@ -100,6 +103,13 @@ module BOAST
|
|
100
103
|
f.close
|
101
104
|
end
|
102
105
|
|
106
|
+
def save_source
|
107
|
+
f = File::open(library_source,"r")
|
108
|
+
@source = StringIO::new
|
109
|
+
@source.write( f.read )
|
110
|
+
f.close
|
111
|
+
end
|
112
|
+
|
103
113
|
def create_targets( linker, ldshared, ldflags, kernel_files)
|
104
114
|
file target => target_depends do
|
105
115
|
#puts "#{linker} #{ldshared} -o #{target} #{target_depends.join(" ")} #{(kernel_files.collect {|f| f.path}).join(" ")} #{ldflags}"
|
@@ -373,6 +383,7 @@ EOF
|
|
373
383
|
compiler_options = BOAST::get_compiler_options
|
374
384
|
compiler_options.update(options)
|
375
385
|
linker, ldshared, ldflags = setup_compilers(compiler_options)
|
386
|
+
@compiler_options = compiler_options
|
376
387
|
|
377
388
|
@marker = Tempfile::new([@procedure.name,""])
|
378
389
|
|
@@ -380,6 +391,8 @@ EOF
|
|
380
391
|
|
381
392
|
create_sources
|
382
393
|
|
394
|
+
save_source
|
395
|
+
|
383
396
|
create_targets(linker, ldshared, ldflags, kernel_files)
|
384
397
|
|
385
398
|
save_binary
|
@@ -393,6 +406,20 @@ EOF
|
|
393
406
|
return self
|
394
407
|
end
|
395
408
|
|
409
|
+
def dump_binary
|
410
|
+
f = File::open(library_object,"wb")
|
411
|
+
@binary.rewind
|
412
|
+
f.write( @binary.read )
|
413
|
+
f.close
|
414
|
+
end
|
415
|
+
|
416
|
+
def dump_source
|
417
|
+
f = File::open(library_source,"wb")
|
418
|
+
@source.rewind
|
419
|
+
f.write( @source.read )
|
420
|
+
f.close
|
421
|
+
end
|
422
|
+
|
396
423
|
end
|
397
424
|
|
398
425
|
end
|
data/lib/BOAST/Runtime/Config.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
module BOAST
|
2
|
+
|
3
|
+
module CompiledRuntime
|
4
|
+
def maqao_analysis(options={})
|
5
|
+
compiler_options = BOAST::get_compiler_options
|
6
|
+
compiler_options.update(options)
|
7
|
+
|
8
|
+
f1 = File::open(library_object,"wb")
|
9
|
+
@binary.rewind
|
10
|
+
f1.write( @binary.read )
|
11
|
+
f1.close
|
12
|
+
|
13
|
+
f2 = File::open(library_source,"wb")
|
14
|
+
@source.rewind
|
15
|
+
f2.write( @source.read )
|
16
|
+
f2.close
|
17
|
+
|
18
|
+
if verbose? then
|
19
|
+
puts "#{compiler_options[:MAQAO]} cqa #{f1.path} --fct=#{@procedure.name}"
|
20
|
+
end
|
21
|
+
result = `#{compiler_options[:MAQAO]} cqa #{f1.path} --fct=#{@procedure.name}`
|
22
|
+
File::unlink(library_object)
|
23
|
+
File::unlink(library_source)
|
24
|
+
return result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -120,8 +120,20 @@ EOF
|
|
120
120
|
attr_accessor :code_comp
|
121
121
|
attr_accessor :procedure_comp
|
122
122
|
attr_accessor :binary_comp
|
123
|
+
attr_accessor :source_comp
|
123
124
|
attr_accessor :multibinary
|
124
125
|
|
126
|
+
def save_source
|
127
|
+
f = File::open(io_source, "r")
|
128
|
+
@source = StringIO::new
|
129
|
+
@source.write( f.read )
|
130
|
+
f.close
|
131
|
+
f = File::open(comp_source, "r")
|
132
|
+
@source_comp = StringIO::new
|
133
|
+
@source_comp.write( f.read )
|
134
|
+
f.close
|
135
|
+
end
|
136
|
+
|
125
137
|
def save_binary
|
126
138
|
f = File::open(io_object,"rb")
|
127
139
|
@binary = StringIO::new
|
data/lib/BOAST.rb
CHANGED
@@ -24,6 +24,7 @@ require 'BOAST/Runtime/Probe.rb'
|
|
24
24
|
require 'BOAST/Runtime/Compilers.rb'
|
25
25
|
require 'BOAST/Runtime/OpenCLRuntime.rb'
|
26
26
|
require 'BOAST/Runtime/CompiledRuntime.rb'
|
27
|
+
require 'BOAST/Runtime/MAQAO.rb'
|
27
28
|
require 'BOAST/Runtime/CRuntime.rb'
|
28
29
|
require 'BOAST/Runtime/CUDARuntime.rb'
|
29
30
|
require 'BOAST/Runtime/FORTRANRuntime.rb'
|
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.6
|
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-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: narray
|
@@ -30,6 +30,26 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 0.6.0.8
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: narray_ffi
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.2'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.2.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.2'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.2.0
|
33
53
|
- !ruby/object:Gem::Dependency
|
34
54
|
name: opencl_ruby_ffi
|
35
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,6 +208,7 @@ files:
|
|
188
208
|
- lib/BOAST/Runtime/Config.rb
|
189
209
|
- lib/BOAST/Runtime/FFIRuntime.rb
|
190
210
|
- lib/BOAST/Runtime/FORTRANRuntime.rb
|
211
|
+
- lib/BOAST/Runtime/MAQAO.rb
|
191
212
|
- lib/BOAST/Runtime/MPPARuntime.rb
|
192
213
|
- lib/BOAST/Runtime/NonRegression.rb
|
193
214
|
- lib/BOAST/Runtime/OpenCLRuntime.rb
|