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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 36ff960759ff464e552e84ee45f3245cec255920
4
- data.tar.gz: f52d3d583ba030d9affb8bd4e903c10c7a6ddd97
3
+ metadata.gz: c85b9d3cf15ddaa43c8772daa563fc77ffa0e2d8
4
+ data.tar.gz: 2c3f92c1b64383ef09e28333f882bbeb2f717ee6
5
5
  SHA512:
6
- metadata.gz: 49d7f2414f2b8703c1cef9e13945c8d6eb19a28dc728d25d8bef58238fef5aa1707397f5ad49948a9696a308cf1b57fffe9c43f96d03f45721386ab785642a09
7
- data.tar.gz: a2d91030cb407b63743e24112eace210ae077865014567dd7f6d1e114e64dcc06e1830d471b11c932369ee1e65a565b0e17b24f0d4d1d539e04194dcdae3d169
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.5"
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
 
@@ -19,7 +19,7 @@ module BOAST
19
19
  attr_accessor :code
20
20
  attr_accessor :procedure
21
21
  attr_accessor :lang
22
- attr_accessor :binary
22
+ attr_accessor :architecture
23
23
  attr_accessor :kernels
24
24
  attr_accessor :cost_function
25
25
 
@@ -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
@@ -17,6 +17,7 @@ module BOAST
17
17
  :CLPLATFORM => nil,
18
18
  :CLDEVICE => nil,
19
19
  :CLDEVICETYPE => nil,
20
+ :MAQAO => 'maqao',
20
21
  :openmp => false
21
22
  }
22
23
 
@@ -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.5
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-10 00:00:00.000000000 Z
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