BOAST 0.9995 → 0.9996

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/BOAST.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'BOAST'
3
- s.version = "0.9995"
3
+ s.version = "0.9996"
4
4
  s.author = "Brice Videau"
5
5
  s.email = "brice.videau@imag.fr"
6
6
  s.homepage = "https://forge.imag.fr/projects/boast/"
@@ -30,6 +30,8 @@ Gem::Specification.new do |s|
30
30
  lib/BOAST/Inspectable.rb
31
31
  lib/BOAST/Functors.rb
32
32
  lib/BOAST/ControlStructure.rb
33
+ lib/BOAST/Print.rb
34
+ lib/BOAST/State.rb
33
35
  )
34
36
  s.has_rdoc = true
35
37
  s.license = 'BSD'
@@ -9,20 +9,67 @@ module BOAST
9
9
  X86 = 1
10
10
  ARM = 2
11
11
 
12
- def self.get_default_lang
13
- lang = BOAST::const_get(ENV["BOAST_LANG"]) if ENV["BOAST_LANG"]
12
+ module PrivateStateAccessor
13
+
14
+ private_state_accessor :output, :lang, :architecture
15
+ private_state_accessor :default_int_size, :default_real_size
16
+ private_state_accessor :array_start
17
+ private_state_accessor :indent_level, :indent_increment
18
+
19
+ private_boolean_state_accessor :replace_constants
20
+ private_boolean_state_accessor :default_int_signed
21
+ private_boolean_state_accessor :chain_code
22
+ private_boolean_state_accessor :debug
23
+
24
+ private
25
+ def push_env(*args)
26
+ BOAST::push_env(*args)
27
+ end
28
+
29
+ def pop_env(*args)
30
+ BOAST::pop_env(*args)
31
+ end
32
+
33
+ def increment_indent_level(*args)
34
+ BOAST::increment_indent_level(*args)
35
+ end
36
+
37
+ def decrement_indent_level(*args)
38
+ BOAST::decrement_indent_level(*args)
39
+ end
40
+
41
+ def indent
42
+ BOAST::indent
43
+ end
44
+
45
+ end
46
+
47
+ state_accessor :output, :lang, :architecture
48
+ state_accessor :default_int_size, :default_real_size
49
+ state_accessor :array_start
50
+ state_accessor :indent_level, :indent_increment
51
+
52
+ boolean_state_accessor :replace_constants
53
+ boolean_state_accessor :default_int_signed
54
+ boolean_state_accessor :chain_code
55
+ boolean_state_accessor :debug
56
+
57
+ module_function
58
+
59
+ def get_default_lang
60
+ lang = const_get(ENV["BOAST_LANG"]) if ENV["BOAST_LANG"]
14
61
  return lang if lang
15
- return BOAST::FORTRAN
62
+ return FORTRAN
16
63
  end
17
64
 
18
- def self.get_default_debug
65
+ def get_default_debug
19
66
  debug = false
20
67
  debug = ENV["DEBUG"] if ENV["DEBUG"]
21
68
  return debug
22
69
  end
23
70
 
24
71
  @@output = STDOUT
25
- @@lang = BOAST::get_default_lang
72
+ @@lang = get_default_lang
26
73
  @@replace_constants = true
27
74
  @@default_int_size = 4
28
75
  @@default_int_signed = true
@@ -32,224 +79,70 @@ module BOAST
32
79
  @@array_start = 1
33
80
  @@chain_code = false
34
81
  @@architecture = X86
35
- @@debug = BOAST::get_default_debug
82
+ @@debug = get_default_debug
36
83
 
37
84
  @@env = Hash::new{|h, k| h[k] = []}
38
85
 
39
- def self.push_env(vars = {})
86
+ def push_env(vars = {})
40
87
  vars.each { |key,value|
41
88
  var = nil
42
89
  begin
43
- var = BOAST::class_variable_get("@@"+key.to_s)
90
+ var = class_variable_get("@@"+key.to_s)
44
91
  rescue
45
92
  raise "Unknown module variable #{key}!"
46
93
  end
47
94
  @@env[key].push(var)
48
- BOAST::class_variable_set("@@"+key.to_s, value)
95
+ class_variable_set("@@"+key.to_s, value)
49
96
  }
50
97
  end
51
98
 
52
- def self.pop_env(*vars)
99
+ def pop_env(*vars)
53
100
  vars.each { |key|
54
101
  raise "Unknown module variable #{key}!" unless @@env.has_key?(key)
55
102
  ret = @@env[key].pop
56
103
  raise "No stored value for #{key}!" if ret.nil?
57
- BOAST::class_variable_set("@@"+key.to_s, ret)
58
- }
59
- end
60
-
61
- def self.print(a)
62
- a.print
63
- end
64
-
65
- def self.decl(*a)
66
- a.each { |d|
67
- d.decl
104
+ class_variable_set("@@"+key.to_s, ret)
68
105
  }
69
106
  end
70
107
 
71
- def self.close(a)
72
- a.close
73
- end
74
-
75
- def self.open(a)
76
- a.open
77
- end
78
-
79
- def self.debug=(debug)
80
- @@debug = debug
81
- end
82
-
83
- def self.debug
84
- return @@debug
85
- end
86
-
87
- def self.architecture=(arch)
88
- @@architecture = arch
89
- end
90
-
91
- def self.set_architecture(arch)
92
- @@architecture = arch
93
- end
94
-
95
- def self.architecture
96
- return @@architecture
97
- end
98
-
99
- def self.get_architecture
100
- return @@architecture
101
- end
102
-
103
- def self.indent_level=(level)
104
- @@indent_level = level
105
- end
106
-
107
- def self.set_indent_level(level)
108
- @@indent_level = level
109
- end
110
-
111
- def self.indent_level
112
- return @@indent_level
113
- end
114
-
115
- def self.get_indent_level
116
- return @@indent_level
117
- end
118
-
119
- def self.indent_increment
120
- return @@indent_increment
121
- end
122
-
123
- def self.get_indent_increment
124
- return @@indent_increment
125
- end
126
-
127
- def self.increment_indent_level(increment = @@indent_increment)
128
- @@indent_level += increment
108
+ def increment_indent_level(increment = get_indent_increment)
109
+ set_indent_level( get_indent_level + increment )
129
110
  end
130
111
 
131
- def self.decrement_indent_level(increment = @@indent_increment)
132
- @@indent_level -= increment
112
+ def decrement_indent_level(increment = get_indent_increment)
113
+ set_indent_level( get_indent_level - increment )
133
114
  end
134
115
 
135
- def self.indent
136
- return " "*BOAST::get_indent_level
137
- end
138
-
139
- def self.set_replace_constants(replace_constants)
140
- @@replace_constants = replace_constants
141
- end
142
-
143
- def self.replace_constants?
144
- return @@replace_constants
145
- end
146
-
147
- def self.get_replace_constants
148
- return @@replace_constants
149
- end
150
-
151
- def self.default_int_signed=(signed)
152
- @@default_int_signed = signed
153
- end
154
-
155
- def self.set_default_int_signed(signed)
156
- @@default_int_signed = signed
157
- end
158
-
159
- def self.default_int_signed?
160
- return @@default_int_signed
161
- end
162
-
163
- def self.get_default_int_signed
164
- return @@default_int_signed
165
- end
166
-
167
- def self.default_int_size=(size)
168
- @@default_int_size = size
169
- end
170
-
171
- def self.set_default_int_size(size)
172
- @@default_int_size = size
173
- end
174
-
175
- def self.default_int_size
176
- return @@default_int_size
177
- end
178
-
179
- def self.get_default_int_size
180
- return @@default_int_size
181
- end
182
-
183
- def self.default_real_size=(size)
184
- @@default_real_size = size
185
- end
186
-
187
- def self.set_default_real_size(size)
188
- @@default_real_size = size
189
- end
190
-
191
- def self.default_real_size
192
- return @@default_real_size
193
- end
194
-
195
- def self.get_default_real_size
196
- return @@default_real_size
197
- end
198
-
199
- def self.lang=(lang)
200
- @@lang = lang
201
- end
202
-
203
- def self.set_lang(lang)
204
- @@lang = lang
116
+ def indent
117
+ return " "*get_indent_level
205
118
  end
206
119
 
207
- def self.lang
208
- return @@lang
120
+ def pr(a)
121
+ a.pr
209
122
  end
210
123
 
211
- def self.get_lang
212
- return @@lang
213
- end
214
-
215
- def self.output(output)
216
- @@output = output
217
- end
218
-
219
- def self.set_output(output)
220
- @@output = output
221
- end
222
-
223
- def self.output
224
- return @@output
225
- end
226
-
227
- def self.get_output
228
- return @@output
229
- end
230
-
231
- def self.set_chain_code(chain_code)
232
- @@chain_code = chain_code
233
- end
234
-
235
- def self.get_chain_code
236
- return @@chain_code
124
+ def decl(*a)
125
+ a.each { |d|
126
+ d.decl
127
+ }
237
128
  end
238
129
 
239
- def self.array_start=(array_start)
240
- @@array_start = array_start
130
+ def close(a)
131
+ a.close
241
132
  end
242
133
 
243
- def self.set_array_start(array_start)
244
- @@array_start = array_start
134
+ def open(a)
135
+ a.open
245
136
  end
246
137
 
247
- def self.array_start
248
- return @@array_start
249
- end
138
+ alias :Var :Variable
139
+ alias :Dim :Dimension
140
+ alias :Call :FuncCall
250
141
 
251
- def self.get_array_start
252
- return @@array_start
142
+ class << self
143
+ alias :Var :Variable
144
+ alias :Dim :Dimension
145
+ alias :Call :FuncCall
253
146
  end
254
147
 
255
148
  Var = Variable
@@ -263,7 +156,7 @@ module BOAST
263
156
  set_transition(Sizet, Sizet, :default, Sizet)
264
157
  set_transition(Sizet, Int, :default, Sizet)
265
158
  set_transition(Int, Sizet, :default, Sizet)
266
-
159
+
267
160
  end
268
161
 
269
162
  ConvolutionGenerator = BOAST
@@ -2,64 +2,64 @@ module BOAST
2
2
  module Arithmetic
3
3
 
4
4
  def ===(x)
5
- return BOAST::Expression::new(BOAST::Affectation,self,x)
5
+ return Expression::new(Affectation,self,x)
6
6
  end
7
7
 
8
8
  def !
9
- return BOAST::Expression::new(BOAST::Not,nil,self)
9
+ return Expression::new(Not,nil,self)
10
10
  end
11
11
 
12
12
  def ==(x)
13
- return BOAST::Expression::new("==",self,x)
13
+ return Expression::new("==",self,x)
14
14
  end
15
15
 
16
16
  def !=(x)
17
- return BOAST::Expression::new(BOAST::Different,self,x)
17
+ return Expression::new(Different,self,x)
18
18
  end
19
19
 
20
20
  def >(x)
21
- return BOAST::Expression::new(">",self,x)
21
+ return Expression::new(">",self,x)
22
22
  end
23
23
 
24
24
  def <(x)
25
- return BOAST::Expression::new("<",self,x)
25
+ return Expression::new("<",self,x)
26
26
  end
27
27
 
28
28
  def >=(x)
29
- return BOAST::Expression::new(">=",self,x)
29
+ return Expression::new(">=",self,x)
30
30
  end
31
31
 
32
32
  def <=(x)
33
- return BOAST::Expression::new("<=",self,x)
33
+ return Expression::new("<=",self,x)
34
34
  end
35
35
 
36
36
  def +(x)
37
- return BOAST::Expression::new(BOAST::Addition,self,x)
37
+ return Expression::new(Addition,self,x)
38
38
  end
39
39
 
40
40
  def -(x)
41
- return BOAST::Expression::new(BOAST::Substraction,self,x)
41
+ return Expression::new(Substraction,self,x)
42
42
  end
43
43
 
44
44
  def *(x)
45
- return BOAST::Expression::new(BOAST::Multiplication,self,x)
45
+ return Expression::new(Multiplication,self,x)
46
46
  end
47
47
 
48
48
  def /(x)
49
- return BOAST::Expression::new(BOAST::Division,self,x)
49
+ return Expression::new(Division,self,x)
50
50
  end
51
51
 
52
52
  def -@
53
- return BOAST::Expression::new(BOAST::Minus,nil,self)
53
+ return Expression::new(Minus,nil,self)
54
54
  end
55
55
 
56
56
  def address
57
- return BOAST::Expression::new("&",nil,self)
57
+ return Expression::new("&",nil,self)
58
58
  end
59
59
 
60
60
  def dereference
61
- return BOAST::Expression::new("*",nil,self)
61
+ return Expression::new("*",nil,self)
62
62
  end
63
-
63
+
64
64
  end
65
65
  end
@@ -1,13 +1,16 @@
1
1
  module BOAST
2
- @@ocl_cuda_dim_assoc = { 0 => "x", 1 => "y", 2 => "z" }
3
2
 
4
- @@cuda_threadIdx = CStruct("threadIdx",:type_name => "cuda_trheadIdx", :members => [Int("x", :signed => false),Int("y", :signed => false),Int("z", :signed => false)])
5
- @@cuda_blockIdx = CStruct("blockIdx",:type_name => "cuda_blockIdx", :members => [Int("x", :signed => false),Int("y", :signed => false),Int("z", :signed => false)])
6
- @@cuda_blockDim = CStruct("blockDim",:type_name => "cuda_blockDim", :members => [Int("x", :signed => false),Int("y", :signed => false),Int("z", :signed => false)])
7
- @@cuda_gridDim = CStruct("gridDim",:type_name => "cuda_gridDim", :members => [Int("x", :signed => false),Int("y", :signed => false),Int("z", :signed => false)])
3
+ OCL_CUDA_DIM_ASSOC = { 0 => "x", 1 => "y", 2 => "z" }
8
4
 
9
- def self.barrier(*locality)
10
- if @@lang == CL then
5
+ CUDA_THREADIDX = CStruct("threadIdx",:type_name => "cuda_trheadIdx", :members => [Int("x", :signed => false),Int("y", :signed => false),Int("z", :signed => false)])
6
+ CUDA_BLOCKIDX = CStruct("blockIdx",:type_name => "cuda_blockIdx", :members => [Int("x", :signed => false),Int("y", :signed => false),Int("z", :signed => false)])
7
+ CUDA_BLOCKDIM = CStruct("blockDim",:type_name => "cuda_blockDim", :members => [Int("x", :signed => false),Int("y", :signed => false),Int("z", :signed => false)])
8
+ CUDA_GRIDDIM = CStruct("gridDim",:type_name => "cuda_gridDim", :members => [Int("x", :signed => false),Int("y", :signed => false),Int("z", :signed => false)])
9
+
10
+ module_function
11
+
12
+ def barrier(*locality)
13
+ if lang == CL then
11
14
  loc=""
12
15
  if locality.include?(:local) and locality.include?(:global) then
13
16
  return FuncCall::new("barrier","CLK_LOCAL_MEM_FENCE | CLK_GLOBAL_MEM_FENCE")
@@ -18,7 +21,7 @@ module BOAST
18
21
  else
19
22
  raise "Unsupported locality"
20
23
  end
21
- elsif @@lang == CUDA then
24
+ elsif lang == CUDA then
22
25
  return FuncCall::new("__syncthreads")
23
26
  else
24
27
  raise "Unsupported language!"
@@ -26,84 +29,84 @@ module BOAST
26
29
  end
27
30
 
28
31
 
29
- def self.get_work_dim
30
- if @@lang == CL then
32
+ def get_work_dim
33
+ if lang == CL then
31
34
  return FuncCall::new("get_work_dim", :returns => Int("wd", :signed => false))
32
35
  else
33
36
  raise "Unsupported language!"
34
37
  end
35
38
  end
36
39
 
37
- def self.get_global_size(dim)
38
- if @@lang == CL then
40
+ def get_global_size(dim)
41
+ if lang == CL then
39
42
  return FuncCall::new("get_global_size", dim, :returns => Sizet)
40
- elsif @@lang == CUDA then
41
- d = @@ocl_cuda_dim_assoc[dim]
43
+ elsif lang == CUDA then
44
+ d = OCL_CUDA_DIM_ASSOC[dim]
42
45
  raise "Unsupported dimension!" if not d
43
- return eval "@@cuda_gridDim.#{d}*@@cuda_blockDim.#{d}"
46
+ return eval "CUDA_GRIDDIM.#{d}*CUDA_BLOCKDIM.#{d}"
44
47
  else
45
48
  raise "Unsupported language!"
46
49
  end
47
50
  end
48
51
 
49
- def self.get_global_id(dim)
50
- if @@lang == CL then
52
+ def get_global_id(dim)
53
+ if lang == CL then
51
54
  return FuncCall::new("get_global_id",dim, :returns => Sizet)
52
- elsif @@lang == CUDA then
53
- d = @@ocl_cuda_dim_assoc[dim]
55
+ elsif lang == CUDA then
56
+ d = OCL_CUDA_DIM_ASSOC[dim]
54
57
  raise "Unsupported dimension!" if not d
55
- return eval "@@cuda_threadIdx.#{d}+@@cuda_blockIdx.#{d}*@@cuda_blockDim.#{d}"
58
+ return eval "CUDA_THREADIDX.#{d}+CUDA_BLOCKIDX.#{d}*CUDA_BLOCKDIM.#{d}"
56
59
  else
57
60
  raise "Unsupported language!"
58
61
  end
59
62
  end
60
63
 
61
- def self.get_local_size(dim)
62
- if @@lang == CL then
64
+ def get_local_size(dim)
65
+ if lang == CL then
63
66
  return FuncCall::new("get_local_size",dim, :returns => Sizet)
64
- elsif @@lang == CUDA then
65
- d = @@ocl_cuda_dim_assoc[dim]
67
+ elsif lang == CUDA then
68
+ d = OCL_CUDA_DIM_ASSOC[dim]
66
69
  raise "Unsupported dimension!" if not d
67
- return eval "@@cuda_blockDim.#{d}"
70
+ return eval "CUDA_BLOCKDIM.#{d}"
68
71
  else
69
72
  raise "Unsupported language!"
70
73
  end
71
74
  end
72
75
 
73
- def self.get_local_id(dim)
74
- if @@lang == CL then
76
+ def get_local_id(dim)
77
+ if lang == CL then
75
78
  return FuncCall::new("get_local_id",dim, :returns => Sizet)
76
- elsif @@lang == CUDA then
77
- d = @@ocl_cuda_dim_assoc[dim]
79
+ elsif lang == CUDA then
80
+ d = OCL_CUDA_DIM_ASSOC[dim]
78
81
  raise "Unsupported dimension!" if not d
79
- return eval "@@cuda_threadIdx.#{d}"
82
+ return eval "CUDA_THREADIDX.#{d}"
80
83
  else
81
84
  raise "Unsupported language!"
82
85
  end
83
86
  end
84
87
 
85
- def self.get_num_groups(dim)
86
- if @@lang == CL then
88
+ def get_num_groups(dim)
89
+ if lang == CL then
87
90
  return FuncCall::new("get_num_groups",dim, :returns => Sizet)
88
- elsif @@lang == CUDA then
89
- d = @@ocl_cuda_dim_assoc[dim]
91
+ elsif lang == CUDA then
92
+ d = OCL_CUDA_DIM_ASSOC[dim]
90
93
  raise "Unsupported dimension!" if not d
91
- return eval "@@cuda_gridDim.#{d}"
94
+ return eval "CUDA_GRIDDIM.#{d}"
92
95
  else
93
96
  raise "Unsupported language!"
94
97
  end
95
98
  end
96
99
 
97
- def self.get_group_id(dim)
98
- if @@lang == CL then
100
+ def get_group_id(dim)
101
+ if lang == CL then
99
102
  return FuncCall::new("get_group_id",dim, :returns => Sizet)
100
- elsif @@lang == CUDA then
101
- d = @@ocl_cuda_dim_assoc[dim]
103
+ elsif lang == CUDA then
104
+ d = OCL_CUDA_DIM_ASSOC[dim]
102
105
  raise "Unsupported dimension!" if not d
103
- return eval "@@cuda_blockIdx.#{d}"
106
+ return eval "CUDA_BLOCKIDX.#{d}"
104
107
  else
105
108
  raise "Unsupported language!"
106
109
  end
107
110
  end
108
-
111
+
109
112
  end