BOAST 1.0.7 → 1.0.8
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 +33 -28
- data/lib/BOAST/Language/Architectures.rb +210 -0
- data/lib/BOAST/Language/CPUID_by_name.rb +5675 -0
- data/lib/BOAST/Language/DataTypes.rb +24 -85
- data/lib/BOAST/Language/Index.rb +12 -0
- data/lib/BOAST/Language/Inspectable.rb +1 -1
- data/lib/BOAST/Language/Intrinsics.rb +148 -10
- data/lib/BOAST/Language/Operators.rb +376 -136
- data/lib/BOAST/Language/Procedure.rb +1 -1
- data/lib/BOAST/Language/State.rb +14 -0
- data/lib/BOAST/Language/Transitions.rb +1 -1
- data/lib/BOAST/Language/Variable.rb +81 -31
- data/lib/BOAST/Runtime/CKernel.rb +6 -2
- data/lib/BOAST/Runtime/CRuntime.rb +1 -0
- data/lib/BOAST/Runtime/CompiledRuntime.rb +9 -12
- data/lib/BOAST/Runtime/Compilers.rb +3 -0
- data/lib/BOAST/Runtime/Config.rb +5 -7
- data/lib/BOAST/Runtime/FORTRANRuntime.rb +19 -11
- data/lib/BOAST/Runtime/MAQAO.rb +10 -3
- data/lib/BOAST.rb +2 -0
- metadata +24 -2
@@ -66,6 +66,8 @@ module BOAST
|
|
66
66
|
include PrivateStateAccessor
|
67
67
|
include Inspectable
|
68
68
|
|
69
|
+
attr_accessor :shape
|
70
|
+
|
69
71
|
def initialize(array,type = nil)
|
70
72
|
super(array)
|
71
73
|
@type = type::new if type
|
@@ -77,25 +79,30 @@ module BOAST
|
|
77
79
|
end
|
78
80
|
|
79
81
|
def to_s_fortran
|
82
|
+
arr = self.flatten
|
80
83
|
s = ""
|
81
|
-
return s if first.nil?
|
84
|
+
return s if arr.first.nil?
|
85
|
+
s += "reshape(" if @shape
|
82
86
|
s += "(/ &\n"
|
83
|
-
s += first.to_s
|
87
|
+
s += arr.first.to_s
|
84
88
|
s += @type.suffix if @type
|
85
|
-
|
89
|
+
arr[1..-1].each { |v|
|
86
90
|
s += ", &\n"+v.to_s
|
87
91
|
s += @type.suffix if @type
|
88
92
|
}
|
89
93
|
s += " /)"
|
94
|
+
s += ", shape(#{@shape}))" if @shape
|
95
|
+
return s
|
90
96
|
end
|
91
97
|
|
92
98
|
def to_s_c
|
99
|
+
arr = self.flatten
|
93
100
|
s = ""
|
94
|
-
return s if first.nil?
|
101
|
+
return s if arr.first.nil?
|
95
102
|
s += "{\n"
|
96
|
-
s += first.to_s
|
103
|
+
s += arr.first.to_s
|
97
104
|
s += @type.suffix if @type
|
98
|
-
|
105
|
+
arr[1..-1].each { |v|
|
99
106
|
s += ",\n"+v.to_s
|
100
107
|
s += @type.suffix if @type
|
101
108
|
}
|
@@ -259,7 +266,7 @@ module BOAST
|
|
259
266
|
end
|
260
267
|
|
261
268
|
def set(x)
|
262
|
-
return
|
269
|
+
return self === Set(x,self)
|
263
270
|
end
|
264
271
|
|
265
272
|
def dereference
|
@@ -294,13 +301,13 @@ module BOAST
|
|
294
301
|
s += "const " if constant? or @direction == :in
|
295
302
|
s += @type.decl
|
296
303
|
if dimension? then
|
297
|
-
s += " *" unless use_vla?
|
304
|
+
s += " *" unless (use_vla? and lang != FORTRAN)
|
298
305
|
end
|
299
306
|
if not dimension? and ( lang == FORTRAN or @direction == :out or @direction == :inout ) then
|
300
307
|
s += " *"
|
301
308
|
end
|
302
309
|
s += " #{@name}"
|
303
|
-
if dimension? and use_vla? then
|
310
|
+
if dimension? and use_vla? and lang != FORTRAN then
|
304
311
|
s += "["
|
305
312
|
s += @dimension.reverse.collect { |d|
|
306
313
|
dim = d.to_s
|
@@ -327,16 +334,57 @@ module BOAST
|
|
327
334
|
return decl_c if [C, CL, CUDA].include?( lang )
|
328
335
|
end
|
329
336
|
|
337
|
+
def __const?
|
338
|
+
return !!( constant? or @direction == :in )
|
339
|
+
end
|
340
|
+
|
341
|
+
def __global?
|
342
|
+
return !!( lang == CL and @direction and dimension? and not (@options[:register] or @options[:private] or local?) )
|
343
|
+
end
|
344
|
+
|
345
|
+
def __local?
|
346
|
+
return !!( lang == CL and local? )
|
347
|
+
end
|
348
|
+
|
349
|
+
def __shared?(device = false)
|
350
|
+
return !!( lang == CUDA and local? and not device )
|
351
|
+
end
|
352
|
+
|
353
|
+
def __vla_array?
|
354
|
+
return !!( use_vla? and dimension? and not decl_module? )
|
355
|
+
end
|
356
|
+
|
357
|
+
def __pointer_array?(device = false)
|
358
|
+
return !!( dimension? and not constant? and not ( allocate? and @allocate != :heap ) and (not local? or (local? and device)) )
|
359
|
+
end
|
360
|
+
|
361
|
+
def __pointer?(device = false)
|
362
|
+
return !!( ( not dimension? and ( @direction == :out or @direction == :inout ) ) or __pointer_array?(device) )
|
363
|
+
end
|
364
|
+
|
365
|
+
def __restrict?
|
366
|
+
return !!( restrict? and not decl_module? )
|
367
|
+
end
|
368
|
+
|
369
|
+
def __dimension?(device = false)
|
370
|
+
return !!( dimension? and ((local? and not device) or ( ( allocate? and @allocate != :heap ) and not constant?)) )
|
371
|
+
end
|
372
|
+
|
373
|
+
def __align?
|
374
|
+
return !!( dimension? and (align? or default_align > 1) and (constant? or (allocate? and @allocate != :heap ) ) )
|
375
|
+
end
|
376
|
+
|
330
377
|
def decl_c_s(device = false)
|
331
378
|
return decl_texture_s if texture?
|
332
379
|
s = ""
|
333
|
-
s += "const " if
|
334
|
-
s += "__global " if
|
335
|
-
s += "__local " if
|
336
|
-
s += "__shared__ " if
|
380
|
+
s += "const " if __const?
|
381
|
+
s += "__global " if __global?
|
382
|
+
s += "__local " if __local?
|
383
|
+
s += "__shared__ " if __shared?(device)
|
337
384
|
s += @type.decl
|
338
|
-
if
|
385
|
+
if __vla_array? then
|
339
386
|
s += " #{@name}["
|
387
|
+
s += "__restrict__ " if __restrict?
|
340
388
|
s += @dimension.reverse.collect { |d|
|
341
389
|
dim = d.to_s
|
342
390
|
if dim then
|
@@ -347,30 +395,25 @@ module BOAST
|
|
347
395
|
}.join("][")
|
348
396
|
s += "]"
|
349
397
|
else
|
350
|
-
|
351
|
-
|
352
|
-
if
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
s += " __restrict__" unless use_vla?
|
357
|
-
end
|
398
|
+
s += " *" if __pointer?(device)
|
399
|
+
if __pointer_array?(device) and __restrict? then
|
400
|
+
if lang == CL
|
401
|
+
s += " restrict"
|
402
|
+
else
|
403
|
+
s += " __restrict__" unless use_vla?
|
358
404
|
end
|
359
405
|
end
|
360
|
-
if not dimension? and ( @direction == :out or @direction == :inout ) then
|
361
|
-
s += " *"
|
362
|
-
end
|
363
406
|
s += " #{@name}"
|
364
407
|
if dimension? and constant? then
|
365
408
|
s += "[]"
|
366
409
|
end
|
367
|
-
if
|
410
|
+
if __dimension?(device) then
|
368
411
|
s +="[("
|
369
412
|
s += @dimension.collect{ |d| d.to_s }.reverse.join(")*(")
|
370
413
|
s +=")]"
|
371
414
|
end
|
372
415
|
end
|
373
|
-
if
|
416
|
+
if __align? then
|
374
417
|
a = ( align? ? align : 1 )
|
375
418
|
a = ( a >= default_align ? a : default_align )
|
376
419
|
s+= " __attribute((aligned(#{a})))"
|
@@ -459,10 +502,16 @@ module BOAST
|
|
459
502
|
return self
|
460
503
|
end
|
461
504
|
|
462
|
-
def alloc_c( dims = nil )
|
505
|
+
def alloc_c( dims = nil, align = get_address_size)
|
463
506
|
s = ""
|
464
507
|
s += indent
|
465
|
-
|
508
|
+
if align > (OS.bits/8) then
|
509
|
+
# check alignment is a power of 2
|
510
|
+
raise "Invalid alignment #{align}!" if align & (align - 1) != 0
|
511
|
+
s += "(#{@type.decl} *) posix_memalign( &#{name}, #{align}, sizeof(#{@type.decl})*("
|
512
|
+
else
|
513
|
+
s += "#{name} = (#{@type.decl} *) malloc( sizeof(#{@type.decl})*("
|
514
|
+
end
|
466
515
|
s += dims.collect { |d| d.to_s }.reverse.join(")*(")
|
467
516
|
s += ") )"
|
468
517
|
s += finalize
|
@@ -470,12 +519,12 @@ module BOAST
|
|
470
519
|
return self
|
471
520
|
end
|
472
521
|
|
473
|
-
def alloc( dims = nil )
|
522
|
+
def alloc( dims = nil, align = get_address_size )
|
474
523
|
@dimension = [dims].flatten if dims
|
475
524
|
dims = @dimension
|
476
525
|
raise "Cannot allocate array with unknown dimension!" unless dims
|
477
526
|
return alloc_fortran(dims) if lang == FORTRAN
|
478
|
-
return alloc_c(dims) if lang == C
|
527
|
+
return alloc_c(dims, align) if lang == C
|
479
528
|
end
|
480
529
|
|
481
530
|
def dealloc_fortran
|
@@ -525,6 +574,7 @@ module BOAST
|
|
525
574
|
end
|
526
575
|
s += " :: #{@name}"
|
527
576
|
if constant? then
|
577
|
+
@constant.shape = self if dimension? and @constant.kind_of?(ConstArray)
|
528
578
|
s += " = #{@constant}"
|
529
579
|
s += @type.suffix if not dimension? and @type
|
530
580
|
end
|
@@ -4,6 +4,7 @@ module BOAST
|
|
4
4
|
include CompiledRuntime
|
5
5
|
|
6
6
|
def fill_library_header
|
7
|
+
get_output.puts "#include <stdlib.h>"
|
7
8
|
get_output.puts "#include <inttypes.h>"
|
8
9
|
get_output.puts "#define __assume_aligned(lvalueptr, align) lvalueptr = __builtin_assume_aligned (lvalueptr, align)" if @compiler_options[:CC].match("gcc")
|
9
10
|
end
|
@@ -191,7 +191,7 @@ EOF
|
|
191
191
|
end
|
192
192
|
|
193
193
|
def fill_decl_module_params
|
194
|
-
|
194
|
+
push_env(:decl_module => true)
|
195
195
|
@procedure.parameters.each { |param|
|
196
196
|
param_copy = param.copy
|
197
197
|
param_copy.constant = nil
|
@@ -209,7 +209,7 @@ EOF
|
|
209
209
|
get_output.puts " VALUE _boast_refs = rb_hash_new();"
|
210
210
|
get_output.puts " rb_hash_aset(_boast_stats,ID2SYM(rb_intern(\"reference_return\")),_boast_refs);"
|
211
211
|
end
|
212
|
-
|
212
|
+
pop_env(:decl_module)
|
213
213
|
end
|
214
214
|
|
215
215
|
def copy_scalar_param_from_ruby( param, ruby_param )
|
@@ -242,7 +242,7 @@ EOF
|
|
242
242
|
argc = @procedure.parameters.length
|
243
243
|
argv = Variable::new("_boast_argv", CustomType, :type_name => "VALUE", :dimension => [ Dimension::new(0,argc-1) ] )
|
244
244
|
rb_ptr = Variable::new("_boast_rb_ptr", CustomType, :type_name => "VALUE")
|
245
|
-
|
245
|
+
push_env(:decl_module => true)
|
246
246
|
@procedure.parameters.each_index do |i|
|
247
247
|
param = @procedure.parameters[i]
|
248
248
|
if not param.dimension then
|
@@ -251,7 +251,7 @@ EOF
|
|
251
251
|
copy_array_param_from_ruby(param, argv[i])
|
252
252
|
end
|
253
253
|
end
|
254
|
-
|
254
|
+
pop_env(:decl_module)
|
255
255
|
end
|
256
256
|
|
257
257
|
def create_procedure_call
|
@@ -280,7 +280,7 @@ EOF
|
|
280
280
|
argc = @procedure.parameters.length
|
281
281
|
argv = Variable::new("_boast_argv", CustomType, :type_name => "VALUE", :dimension => [ Dimension::new(0,argc-1) ] )
|
282
282
|
rb_ptr = Variable::new("_boast_rb_ptr", CustomType, :type_name => "VALUE")
|
283
|
-
|
283
|
+
push_env(:decl_module => true)
|
284
284
|
@procedure.parameters.each_index do |i|
|
285
285
|
param = @procedure.parameters[i]
|
286
286
|
if not param.dimension then
|
@@ -289,7 +289,7 @@ EOF
|
|
289
289
|
copy_array_param_to_ruby(param, argv[i])
|
290
290
|
end
|
291
291
|
end
|
292
|
-
|
292
|
+
pop_env(:decl_module)
|
293
293
|
end
|
294
294
|
|
295
295
|
def store_results
|
@@ -341,10 +341,8 @@ EOF
|
|
341
341
|
|
342
342
|
def create_module_file_source
|
343
343
|
f = File::open(module_file_source, "w+")
|
344
|
-
|
345
|
-
|
346
|
-
set_output(f)
|
347
|
-
set_lang(C)
|
344
|
+
push_env(:lang => C)
|
345
|
+
push_env(:output => f)
|
348
346
|
|
349
347
|
fill_module_file_source
|
350
348
|
|
@@ -352,8 +350,7 @@ EOF
|
|
352
350
|
f.rewind
|
353
351
|
puts f.read
|
354
352
|
end
|
355
|
-
|
356
|
-
set_lang(previous_lang)
|
353
|
+
pop_env(:lang, :output)
|
357
354
|
f.close
|
358
355
|
end
|
359
356
|
|
@@ -46,6 +46,7 @@ module BOAST
|
|
46
46
|
c_mppa_compiler = "k1-gcc"
|
47
47
|
c_compiler = options[:CC]
|
48
48
|
cflags = options[:CFLAGS]
|
49
|
+
cflags += " -march=#{get_model}"
|
49
50
|
cflags += " -fPIC #{includes}"
|
50
51
|
cflags += " -DHAVE_NARRAY_H" if narray_path
|
51
52
|
cflags += " -I/usr/local/k1tools/include" if @architecture == MPPA
|
@@ -93,6 +94,7 @@ module BOAST
|
|
93
94
|
def setup_fortran_compiler(options, runner)
|
94
95
|
f_compiler = options[:FC]
|
95
96
|
fcflags = options[:FCFLAGS]
|
97
|
+
fcflags += " -march=#{get_model}"
|
96
98
|
fcflags += " -fPIC"
|
97
99
|
fcflags += " -fno-second-underscore" if f_compiler == 'g95'
|
98
100
|
if options[:openmp] and @lang == FORTRAN then
|
@@ -140,6 +142,7 @@ module BOAST
|
|
140
142
|
|
141
143
|
def setup_linker(options)
|
142
144
|
ldflags = options[:LDFLAGS]
|
145
|
+
ldflags += " -march=#{get_model}"
|
143
146
|
ldflags += " -L#{RbConfig::CONFIG["libdir"]} #{RbConfig::CONFIG["LIBRUBYARG"]}"
|
144
147
|
ldflags += " -lrt" if not OS.mac?
|
145
148
|
ldflags += " -lcudart" if @lang == CUDA
|
data/lib/BOAST/Runtime/Config.rb
CHANGED
@@ -40,10 +40,11 @@ module BOAST
|
|
40
40
|
boolean_state_accessor :verbose
|
41
41
|
boolean_state_accessor :debug_source
|
42
42
|
boolean_state_accessor :ffi
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
state_accessor :fortran_line_length
|
44
|
+
default_state_getter :ffi, false
|
45
|
+
default_state_getter :verbose, false
|
46
|
+
default_state_getter :debug_source, false
|
47
|
+
default_state_getter :fortran_line_length, 72
|
47
48
|
|
48
49
|
module_function
|
49
50
|
|
@@ -78,9 +79,6 @@ module BOAST
|
|
78
79
|
@@compiler_default_options[k] = ENV[k.to_s] if ENV[k.to_s]
|
79
80
|
}
|
80
81
|
@@compiler_default_options[:LD] = ENV["LD"] if ENV["LD"]
|
81
|
-
@@verbose = ENV["VERBOSE"] if ENV["VERBOSE"]
|
82
|
-
@@ffi = ENV["FFI"] if ENV["FFI"]
|
83
|
-
@@debug_source = ENV["DEBUG_SOURCE"] if ENV["DEBUG_SOURCE"]
|
84
82
|
end
|
85
83
|
|
86
84
|
read_boast_config
|
@@ -7,25 +7,33 @@ module BOAST
|
|
7
7
|
return @procedure.name + "_"
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def line_limited_source
|
11
|
+
s = ""
|
11
12
|
@code.rewind
|
12
13
|
@code.each_line { |line|
|
13
|
-
|
14
|
-
if line.match(/^\s*!\$/) then
|
14
|
+
if line.match(/^\s*!\w*?\$/) then
|
15
15
|
if line.match(/^\s*!\$(omp|OMP)/) then
|
16
|
-
chunks = line.scan(/.{1,#{
|
17
|
-
|
16
|
+
chunks = line.scan(/.{1,#{fortran_line_length-7}}/)
|
17
|
+
s += chunks.join("&\n!$omp&") + "\n"
|
18
|
+
elsif line.match(/^\s*!(DIR|dir)\$/) then
|
19
|
+
chunks = line.scan(/.{1,#{fortran_line_length-7}}/)
|
20
|
+
s += chunks.join("&\n!DIR$&") + "\n"
|
18
21
|
else
|
19
|
-
chunks = line.scan(/.{1,#{
|
20
|
-
|
22
|
+
chunks = line.scan(/.{1,#{fortran_line_length-4}}/)
|
23
|
+
s += chunks.join("&\n!$&") + "\n"
|
21
24
|
end
|
22
|
-
elsif line.match(/^\
|
23
|
-
|
25
|
+
elsif line.match(/^\s*!/) then
|
26
|
+
s += line
|
24
27
|
else
|
25
|
-
chunks = line.scan(/.{1,#{
|
26
|
-
|
28
|
+
chunks = line.scan(/.{1,#{fortran_line_length-2}}/)
|
29
|
+
s += chunks.join("&\n&") + "\n"
|
27
30
|
end
|
28
31
|
}
|
32
|
+
return s
|
33
|
+
end
|
34
|
+
|
35
|
+
def fill_library_source
|
36
|
+
get_output.print line_limited_source
|
29
37
|
end
|
30
38
|
|
31
39
|
def create_procedure_call_parameters
|
data/lib/BOAST/Runtime/MAQAO.rb
CHANGED
@@ -2,6 +2,13 @@ module BOAST
|
|
2
2
|
|
3
3
|
module CompiledRuntime
|
4
4
|
def maqao_analysis(options={})
|
5
|
+
maqao_models = {
|
6
|
+
"core2" => "CORE2_45",
|
7
|
+
"nehalem" => "NEHALEM",
|
8
|
+
"sandybridge" => "SANDY_BRIDGE",
|
9
|
+
"ivybridge" => "IVY_BRIDGE",
|
10
|
+
"haswell" => "HASWELL"
|
11
|
+
}
|
5
12
|
compiler_options = BOAST::get_compiler_options
|
6
13
|
compiler_options.update(options)
|
7
14
|
|
@@ -14,11 +21,11 @@ module BOAST
|
|
14
21
|
@source.rewind
|
15
22
|
f2.write( @source.read )
|
16
23
|
f2.close
|
17
|
-
|
24
|
+
maqao_model = maqao_models[get_model]
|
18
25
|
if verbose? then
|
19
|
-
puts "#{compiler_options[:MAQAO]} cqa #{f1.path} --fct=#{@procedure.name} #{compiler_options[:MAQAO_FLAGS]}"
|
26
|
+
puts "#{compiler_options[:MAQAO]} cqa #{maqao_model ? "--uarch=#{maqao_model} " : ""}#{f1.path} --fct=#{@procedure.name} #{compiler_options[:MAQAO_FLAGS]}"
|
20
27
|
end
|
21
|
-
result = `#{compiler_options[:MAQAO]} cqa #{f1.path} --fct=#{@procedure.name} #{compiler_options[:MAQAO_FLAGS]}`
|
28
|
+
result = `#{compiler_options[:MAQAO]} cqa #{maqao_model ? "--uarch=#{maqao_model} " : ""}#{f1.path} --fct=#{@procedure.name} #{compiler_options[:MAQAO_FLAGS]}`
|
22
29
|
File::unlink(library_object)
|
23
30
|
File::unlink(library_source)
|
24
31
|
return result
|
data/lib/BOAST.rb
CHANGED
@@ -3,6 +3,8 @@ require 'BOAST/Language/Functors.rb'
|
|
3
3
|
require 'BOAST/Language/Inspectable.rb'
|
4
4
|
require 'BOAST/Language/Transitions.rb'
|
5
5
|
require 'BOAST/Language/Arithmetic.rb'
|
6
|
+
require 'BOAST/Language/Architectures.rb'
|
7
|
+
require 'BOAST/Language/CPUID_by_name.rb'
|
6
8
|
require 'BOAST/Language/Intrinsics.rb'
|
7
9
|
require 'BOAST/Language/Operators.rb'
|
8
10
|
require 'BOAST/Language/DataTypes.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.8
|
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-
|
11
|
+
date: 2015-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: narray
|
@@ -150,6 +150,26 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 1.9.3
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rgl
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0.5'
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: 0.5.1
|
163
|
+
type: :runtime
|
164
|
+
prerelease: false
|
165
|
+
version_requirements: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - "~>"
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0.5'
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 0.5.1
|
153
173
|
- !ruby/object:Gem::Dependency
|
154
174
|
name: rake
|
155
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,8 +196,10 @@ files:
|
|
176
196
|
- README.md
|
177
197
|
- lib/BOAST.rb
|
178
198
|
- lib/BOAST/Language/Algorithm.rb
|
199
|
+
- lib/BOAST/Language/Architectures.rb
|
179
200
|
- lib/BOAST/Language/Arithmetic.rb
|
180
201
|
- lib/BOAST/Language/BOAST_OpenCL.rb
|
202
|
+
- lib/BOAST/Language/CPUID_by_name.rb
|
181
203
|
- lib/BOAST/Language/Case.rb
|
182
204
|
- lib/BOAST/Language/ControlStructure.rb
|
183
205
|
- lib/BOAST/Language/DataTypes.rb
|