metacl 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -1
- data/lib/metacl/dsl.rb +1 -0
- data/lib/metacl/dsl/expression_applicator.rb +20 -4
- data/lib/metacl/dsl/gpu_transer.rb +21 -0
- data/lib/metacl/dsl/root.rb +15 -5
- data/lib/metacl/templates.rb +5 -1
- data/lib/metacl/templates/download_from_gpu.rb +14 -0
- data/lib/metacl/templates/expression_applicator_wrapper.cl.template +1 -21
- data/lib/metacl/templates/expression_applicator_wrapper.rb +4 -56
- data/lib/metacl/templates/iterate.any.template +1 -0
- data/lib/metacl/templates/iterate.rb +16 -0
- data/lib/metacl/templates/kernel.cl.template +1 -1
- data/lib/metacl/templates/kernel.rb +3 -2
- data/lib/metacl/templates/kernel_init.cl.template +16 -0
- data/lib/metacl/templates/kernel_init.rb +51 -0
- data/lib/metacl/templates/upload_to_gpu.rb +20 -0
- data/lib/metacl/templates/wrapper.cl.template +4 -1
- data/lib/metacl/templates/wrapper.cpp.template +1 -0
- data/lib/metacl/templates/wrapper.rb +3 -3
- data/lib/metacl/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f78c15cdb7d30650509f1fe663a854b9ffc5d5e9
|
4
|
+
data.tar.gz: 6225085ec4af69bb79757e38fc4472f6665104c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2073478d343372b2a74ca9448e0cbd7c4d60014c9883944f2e7e5730444140b24df908882c23478070120a18d14af0eb0868ca346d3ebf48a62628f38f7bf03c
|
7
|
+
data.tar.gz: 4c8efdd5cf387bea3f8866c29201028f631a4dbf47918d58778fe1d26b487ce1703633ca9b45ee3917ce01099fd845c25ba0913bd5547f81ec92fb5e8661a34b
|
data/README.md
CHANGED
@@ -18,7 +18,11 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
$ metacl some.mcl
|
22
|
+
|
23
|
+
Translates some.mcl to some.cpp. Example compile command for OS X (also you must have cl.hpp in OpenCL folder):
|
24
|
+
|
25
|
+
$ clang++ -framework OpenCL -stdlib=libc++ -std=gnu++11 some.cpp
|
22
26
|
|
23
27
|
## Contributing
|
24
28
|
|
data/lib/metacl/dsl.rb
CHANGED
@@ -1,10 +1,19 @@
|
|
1
1
|
module MetaCL
|
2
2
|
module DSL
|
3
3
|
class ExpressionApplicator
|
4
|
-
|
4
|
+
@@counter = 0
|
5
|
+
attr_reader :code, :init_code
|
5
6
|
|
6
7
|
def initialize(program, expr, result_matrix, options = {})
|
7
|
-
|
8
|
+
@@counter += 1
|
9
|
+
@program = program
|
10
|
+
@expr = if expr.kind_of? Logic::Node
|
11
|
+
expr.deep_clone
|
12
|
+
elsif expr.kind_of? Symbol
|
13
|
+
Logic::Node.new :data, nil, nil, name: expr
|
14
|
+
elsif expr.kind_of? Numeric
|
15
|
+
Logic::Node.new :const, nil, nil, data: expr
|
16
|
+
end
|
8
17
|
@result_matrix = program.resources.matrices_hash[result_matrix]
|
9
18
|
|
10
19
|
@left_border = options[:from] || [0, 0]
|
@@ -15,11 +24,17 @@ module MetaCL
|
|
15
24
|
prepare_tree
|
16
25
|
code_generation
|
17
26
|
|
18
|
-
@
|
27
|
+
@init_code = if @program.platform == :cl
|
28
|
+
Templates::KernelInit.render(@left_border, @right_border, @expr.params.code || '', @result_matrix, @expr.objects, @@counter, @program.platform)
|
29
|
+
else
|
30
|
+
''
|
31
|
+
end
|
32
|
+
@code = Templates::ExpressionApplicatorWrapper.render(@left_border, @right_border, @expr.params.code || '', @expr.objects, @result_matrix, @@counter, @program.platform)
|
19
33
|
end
|
20
34
|
|
21
35
|
def self.construct(program, expr, result_matrix, options = {})
|
22
|
-
ExpressionApplicator.new(program, expr, result_matrix, options)
|
36
|
+
e = ExpressionApplicator.new(program, expr, result_matrix, options)
|
37
|
+
[e.code, e.init_code]
|
23
38
|
end
|
24
39
|
|
25
40
|
def prepare_tree
|
@@ -85,6 +100,7 @@ module MetaCL
|
|
85
100
|
end
|
86
101
|
end
|
87
102
|
|
103
|
+
@expr.params.code ||= ''
|
88
104
|
@expr.params.code += "#{@result_matrix.name}[i*#{@result_matrix.size_m} + j] = #{@expr.params.var};\n"
|
89
105
|
end
|
90
106
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module MetaCL
|
2
|
+
module DSL
|
3
|
+
module GPUTransfers
|
4
|
+
def upload_to_gpu(*args)
|
5
|
+
args.each do |name|
|
6
|
+
object = @program.resources[name]
|
7
|
+
@inner_code << Templates::UploadToGPU.render(object, @program.platform)
|
8
|
+
end
|
9
|
+
@inner_code << "\n"
|
10
|
+
end
|
11
|
+
|
12
|
+
def download_from_gpu(*args)
|
13
|
+
args.each do |name|
|
14
|
+
object = @program.resources[name]
|
15
|
+
@inner_code << Templates::DownloadFromGPU.render(object, @program.platform)
|
16
|
+
end
|
17
|
+
@inner_code << "\n"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/metacl/dsl/root.rb
CHANGED
@@ -5,18 +5,20 @@ module MetaCL
|
|
5
5
|
|
6
6
|
include Directs
|
7
7
|
include DataDefinitions
|
8
|
+
include GPUTransfers
|
8
9
|
|
9
10
|
using Refinements
|
10
11
|
|
11
12
|
def initialize(program, filename)
|
12
13
|
@program = program
|
13
14
|
super() # call initializers from modules
|
14
|
-
@inner_code
|
15
|
-
@
|
15
|
+
@inner_code = ""
|
16
|
+
@post_init_code = ""
|
17
|
+
@outer_code = ""
|
16
18
|
|
17
19
|
instance_eval IO.read(filename), filename
|
18
20
|
|
19
|
-
@code = Templates::Wrapper.render(@inner_code, @outer_code, @program.platform)
|
21
|
+
@code = Templates::Wrapper.render(@inner_code, @post_init_code, @outer_code, @program.platform)
|
20
22
|
end
|
21
23
|
|
22
24
|
def platform(name)
|
@@ -24,7 +26,7 @@ module MetaCL
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def prints(string)
|
27
|
-
@inner_code << Templates::Prints.render(string, @program.platform) << "\n"
|
29
|
+
@inner_code << Templates::Prints.render(string, @program.platform) << "\n\n"
|
28
30
|
end
|
29
31
|
|
30
32
|
def expression(name, *args, &block)
|
@@ -34,13 +36,21 @@ module MetaCL
|
|
34
36
|
|
35
37
|
def apply_expression(matrix_name, options = {}, &block)
|
36
38
|
expr = Expression.construct(@program, &block)
|
37
|
-
|
39
|
+
code, init_code = ExpressionApplicator.construct(@program, expr, matrix_name, options)
|
40
|
+
@inner_code << code << "\n\n"
|
41
|
+
@post_init_code << init_code << "\n\n"
|
38
42
|
end
|
39
43
|
|
40
44
|
def print_matrix(name)
|
41
45
|
matrix = @program.resources.matrices_hash[name]
|
42
46
|
@inner_code << Templates::PrintMatrix.render(matrix.name, matrix.size_n, matrix.size_m, @program.platform)
|
43
47
|
end
|
48
|
+
|
49
|
+
def repeat(count, &block)
|
50
|
+
@inner_code << Templates::Iterate.render(count) << "\n"
|
51
|
+
instance_eval(&block)
|
52
|
+
@inner_code << "}\n\n"
|
53
|
+
end
|
44
54
|
end
|
45
55
|
end
|
46
56
|
end
|
data/lib/metacl/templates.rb
CHANGED
@@ -6,4 +6,8 @@ require 'metacl/templates/init_matrix'
|
|
6
6
|
require 'metacl/templates/kernel'
|
7
7
|
require 'metacl/templates/expression_applicator_wrapper'
|
8
8
|
require 'metacl/templates/print_matrix'
|
9
|
-
require 'metacl/templates/aggregator'
|
9
|
+
require 'metacl/templates/aggregator'
|
10
|
+
require 'metacl/templates/upload_to_gpu'
|
11
|
+
require 'metacl/templates/download_from_gpu'
|
12
|
+
require 'metacl/templates/kernel_init'
|
13
|
+
require 'metacl/templates/iterate'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module MetaCL
|
2
|
+
module Templates
|
3
|
+
class DownloadFromGPU < Mustache
|
4
|
+
|
5
|
+
def render(object, platform)
|
6
|
+
if platform == :cl
|
7
|
+
"queue.enqueueReadBuffer(buffer_#{object.name},CL_TRUE,0,sizeof(#{object.type})*#{object.size_n}*#{object.size_m},#{object.name}.data());\n"
|
8
|
+
else
|
9
|
+
""
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,21 +1 @@
|
|
1
|
-
|
2
|
-
{{{kernel_code}}}
|
3
|
-
|
4
|
-
sources.push_back({kernel_code.c_str(),kernel_code.length()});
|
5
|
-
|
6
|
-
cl::Program program(context,sources);
|
7
|
-
if(program.build({default_device})!=CL_SUCCESS){
|
8
|
-
std::cout<<" Error building: "<<program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(default_device)<<"\n";
|
9
|
-
exit(1);
|
10
|
-
}
|
11
|
-
|
12
|
-
//create queue to which we will push commands for the device.
|
13
|
-
cl::CommandQueue queue(context,default_device);
|
14
|
-
|
15
|
-
{{{push_buffers}}}
|
16
|
-
|
17
|
-
auto metacl_program = cl::make_kernel<{{{template_params}}}>(program, "metacl_program");
|
18
|
-
cl::EnqueueArgs eargs(queue, cl::NullRange, cl::NDRange({{n_to}} - {{n_from}}, {{m_to}} - {{m_from}}), cl::NullRange);
|
19
|
-
metacl_program(eargs, {{{kernel_params}}}).wait();
|
20
|
-
|
21
|
-
{{{pop_buffer}}}
|
1
|
+
metacl_program{{counter}}(eargs{{counter}}, {{{kernel_params}}}).wait();
|
@@ -2,54 +2,23 @@ module MetaCL
|
|
2
2
|
module Templates
|
3
3
|
class ExpressionApplicatorWrapper < Mustache
|
4
4
|
attr_reader :n_from, :n_to, :m_from, :m_to, :code
|
5
|
-
attr_reader :
|
5
|
+
attr_reader :kernel_params, :counter
|
6
6
|
|
7
|
-
def render(from_border, to_border, code, objects, result_object, platform)
|
7
|
+
def render(from_border, to_border, code, objects, result_object, counter, platform)
|
8
8
|
@n_from, @m_from = from_border
|
9
9
|
@n_to, @m_to = to_border
|
10
|
-
@code = Utils.tab_text(code, platform == :cl ? 1 : 2)
|
11
10
|
@objects = objects
|
12
11
|
@result_object = result_object
|
12
|
+
@code = Utils.tab_text(code, platform == :cl ? 1 : 2)
|
13
|
+
@counter = counter
|
13
14
|
|
14
15
|
if platform == :cl
|
15
|
-
gen_push_buffers
|
16
|
-
gen_template_params
|
17
16
|
gen_kernel_params
|
18
|
-
gen_pop_buffer
|
19
|
-
gen_kernel_code
|
20
17
|
end
|
21
18
|
|
22
19
|
super IO.read("#{__dir__}/expression_applicator_wrapper.#{platform}.template")
|
23
20
|
end
|
24
21
|
|
25
|
-
def gen_push_buffers
|
26
|
-
@push_buffers = ""
|
27
|
-
@objects.each do |x|
|
28
|
-
case x.klass
|
29
|
-
when :matrix
|
30
|
-
@push_buffers << "queue.enqueueWriteBuffer(buffer_#{x.name},CL_TRUE,0,sizeof(#{x.type})*#{x.size_n}*#{x.size_m},#{x.name}.data());\n"
|
31
|
-
when :array
|
32
|
-
@push_buffers << "queue.enqueueWriteBuffer(buffer_#{x.name},CL_TRUE,0,sizeof(#{x.type})*#{x.length},#{x.name}.data());\n"
|
33
|
-
when :numeric
|
34
|
-
# TODO: @push_buffers << "queue.enqueueWriteBuffer(buffer_#{x.name},CL_TRUE,0,sizeof(#{x.type}),#{x.name};\n"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def gen_template_params
|
40
|
-
params = []
|
41
|
-
@objects.each do |x|
|
42
|
-
case x.klass
|
43
|
-
when :matrix, :array
|
44
|
-
params << "cl::Buffer&"
|
45
|
-
when :numeric
|
46
|
-
# TODO
|
47
|
-
end
|
48
|
-
end
|
49
|
-
params << "cl::Buffer&" # for result
|
50
|
-
@template_params = params.join(', ')
|
51
|
-
end
|
52
|
-
|
53
22
|
def gen_kernel_params
|
54
23
|
params = []
|
55
24
|
@objects.each do |x|
|
@@ -64,27 +33,6 @@ module MetaCL
|
|
64
33
|
params << "buffer_#{@result_object.name}"
|
65
34
|
@kernel_params = params.join(', ')
|
66
35
|
end
|
67
|
-
|
68
|
-
def gen_pop_buffer
|
69
|
-
x = @result_object
|
70
|
-
@pop_buffer = "queue.enqueueReadBuffer(buffer_#{x.name},CL_TRUE,0,sizeof(#{x.type})*#{x.size_n}*#{x.size_m},#{x.name}.data());\n"
|
71
|
-
end
|
72
|
-
|
73
|
-
def gen_kernel_code
|
74
|
-
params = []
|
75
|
-
@objects.each do |x|
|
76
|
-
case x.klass
|
77
|
-
when :matrix, :array
|
78
|
-
params << "global const #{x.type}* #{x.name}"
|
79
|
-
when :numeric
|
80
|
-
# TODO
|
81
|
-
end
|
82
|
-
end
|
83
|
-
params << "global #{@result_object.type}* #{@result_object.name}"
|
84
|
-
|
85
|
-
@kernel_code = Templates::Kernel.render(params.join(', '), @code, @n_from, @m_from)
|
86
|
-
@kernel_code = Utils.stringify_text(@kernel_code)
|
87
|
-
end
|
88
36
|
end
|
89
37
|
end
|
90
38
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
for (int iterator{{counter}} = 0; iterator{{counter}} < {{repeats}}; ++iterator{{counter}}) {
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module MetaCL
|
2
|
+
module Templates
|
3
|
+
class Iterate < Mustache
|
4
|
+
@@counter = 0
|
5
|
+
attr_reader :counter, :repeats
|
6
|
+
|
7
|
+
def render(repeats)
|
8
|
+
@@counter += 1
|
9
|
+
@counter = @@counter
|
10
|
+
@repeats = repeats
|
11
|
+
#@code = Utils.tab_text(code, 1)
|
12
|
+
super IO.read("#{__dir__}/iterate.any.template")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module MetaCL
|
2
2
|
module Templates
|
3
3
|
class Kernel < Mustache
|
4
|
-
attr_reader :params, :code, :n_from, :m_from
|
4
|
+
attr_reader :params, :code, :n_from, :m_from, :counter
|
5
5
|
|
6
|
-
def render(params, code, n_from, m_from)
|
6
|
+
def render(params, code, n_from, m_from, counter)
|
7
|
+
@counter = counter
|
7
8
|
@params, @code = params, code
|
8
9
|
@n_from, @m_from = n_from, m_from
|
9
10
|
super IO.read("#{__dir__}/kernel.cl.template")
|
@@ -0,0 +1,16 @@
|
|
1
|
+
cl::Program::Sources sources{{counter}};
|
2
|
+
|
3
|
+
std::string kernel_code{{counter}} =
|
4
|
+
{{{kernel_code}}}
|
5
|
+
|
6
|
+
sources{{counter}}.push_back({kernel_code{{counter}}.c_str(),kernel_code{{counter}}.length()});
|
7
|
+
|
8
|
+
cl::Program program{{counter}}(context,sources{{counter}});
|
9
|
+
if(program{{counter}}.build({default_device})!=CL_SUCCESS){
|
10
|
+
std::cout<<" Error building: "<<program{{counter}}.getBuildInfo<CL_PROGRAM_BUILD_LOG>(default_device)<<"\n";
|
11
|
+
exit(1);
|
12
|
+
}
|
13
|
+
|
14
|
+
auto metacl_program{{counter}} = cl::make_kernel<{{{template_params}}}>(program{{counter}}, "metacl_program{{counter}}");
|
15
|
+
|
16
|
+
cl::EnqueueArgs eargs{{counter}}(queue, cl::NullRange, cl::NDRange({{n_to}} - {{n_from}}, {{m_to}} - {{m_from}}), cl::NullRange);
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module MetaCL
|
2
|
+
module Templates
|
3
|
+
class KernelInit < Mustache
|
4
|
+
attr_reader :counter, :kernel_code, :n_from, :m_from, :n_to, :m_to, :template_params
|
5
|
+
|
6
|
+
def render(from_border, to_border, code, result_object, objects, counter, platform)
|
7
|
+
if platform == :cl
|
8
|
+
@counter = counter
|
9
|
+
@code = Utils.tab_text(code, 1)
|
10
|
+
@result_object = result_object
|
11
|
+
@objects = objects
|
12
|
+
@n_from, @m_from = from_border
|
13
|
+
@n_to, @m_to = to_border
|
14
|
+
gen_kernel_code
|
15
|
+
gen_template_params
|
16
|
+
super IO.read("#{__dir__}/kernel_init.cl.template")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def gen_kernel_code
|
21
|
+
params = []
|
22
|
+
@objects.each do |x|
|
23
|
+
case x.klass
|
24
|
+
when :matrix, :array
|
25
|
+
params << "global const #{x.type}* #{x.name}"
|
26
|
+
when :numeric
|
27
|
+
# TODO
|
28
|
+
end
|
29
|
+
end
|
30
|
+
params << "global #{@result_object.type}* #{@result_object.name}"
|
31
|
+
|
32
|
+
@kernel_code = Templates::Kernel.render(params.join(', '), @code, @n_from, @m_from, @counter)
|
33
|
+
@kernel_code = Utils.stringify_text(@kernel_code)
|
34
|
+
end
|
35
|
+
|
36
|
+
def gen_template_params
|
37
|
+
params = []
|
38
|
+
@objects.each do |x|
|
39
|
+
case x.klass
|
40
|
+
when :matrix, :array
|
41
|
+
params << "cl::Buffer&"
|
42
|
+
when :numeric
|
43
|
+
# TODO
|
44
|
+
end
|
45
|
+
end
|
46
|
+
params << "cl::Buffer&" # for result
|
47
|
+
@template_params = params.join(', ')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module MetaCL
|
2
|
+
module Templates
|
3
|
+
class UploadToGPU < Mustache
|
4
|
+
|
5
|
+
def render(object, platform)
|
6
|
+
if platform == :cl
|
7
|
+
case object.klass
|
8
|
+
when :matrix
|
9
|
+
@result = "queue.enqueueWriteBuffer(buffer_#{object.name},CL_TRUE,0,sizeof(#{object.type})*#{object.size_n}*#{object.size_m},#{object.name}.data());\n"
|
10
|
+
when :array
|
11
|
+
@result = "queue.enqueueWriteBuffer(buffer_#{object.name},CL_TRUE,0,sizeof(#{object.type})*#{object.length},#{object.name}.data());\n"
|
12
|
+
when :numeric
|
13
|
+
# TODO: @push_buffers << "queue.enqueueWriteBuffer(buffer_#{x.name},CL_TRUE,0,sizeof(#{x.type}),#{x.name};\n"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
@result || ''
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -31,7 +31,10 @@ int main(){
|
|
31
31
|
|
32
32
|
cl::Context context({default_device});
|
33
33
|
|
34
|
-
|
34
|
+
//create queue to which we will push commands for the device.
|
35
|
+
cl::CommandQueue queue(context,default_device);
|
36
|
+
|
37
|
+
{{{post_init_code}}}
|
35
38
|
|
36
39
|
{{{inner_code}}}
|
37
40
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module MetaCL
|
2
2
|
module Templates
|
3
3
|
class Wrapper < Mustache
|
4
|
-
attr_accessor :inner_code, :outer_code
|
4
|
+
attr_accessor :inner_code, :outer_code, :post_init_code
|
5
5
|
|
6
|
-
def render(inner_code, outer_code, platform)
|
7
|
-
@inner_code, @outer_code = Utils.tab_text(inner_code), outer_code
|
6
|
+
def render(inner_code, post_init_code, outer_code, platform)
|
7
|
+
@inner_code, @post_init_code, @outer_code = Utils.tab_text(inner_code), Utils.tab_text(post_init_code), outer_code
|
8
8
|
super IO.read("#{__dir__}/wrapper.#{platform}.template")
|
9
9
|
end
|
10
10
|
end
|
data/lib/metacl/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metacl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Kolesnev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mustache
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- lib/metacl/dsl/directs.rb
|
102
102
|
- lib/metacl/dsl/expression.rb
|
103
103
|
- lib/metacl/dsl/expression_applicator.rb
|
104
|
+
- lib/metacl/dsl/gpu_transer.rb
|
104
105
|
- lib/metacl/dsl/root.rb
|
105
106
|
- lib/metacl/logic.rb
|
106
107
|
- lib/metacl/logic/node.rb
|
@@ -110,6 +111,7 @@ files:
|
|
110
111
|
- lib/metacl/templates.rb
|
111
112
|
- lib/metacl/templates/aggregator.any.template
|
112
113
|
- lib/metacl/templates/aggregator.rb
|
114
|
+
- lib/metacl/templates/download_from_gpu.rb
|
113
115
|
- lib/metacl/templates/expression_applicator_wrapper.cl.template
|
114
116
|
- lib/metacl/templates/expression_applicator_wrapper.cpp.template
|
115
117
|
- lib/metacl/templates/expression_applicator_wrapper.rb
|
@@ -122,12 +124,17 @@ files:
|
|
122
124
|
- lib/metacl/templates/init_numeric.cl.template
|
123
125
|
- lib/metacl/templates/init_numeric.cpp.template
|
124
126
|
- lib/metacl/templates/init_numeric.rb
|
127
|
+
- lib/metacl/templates/iterate.any.template
|
128
|
+
- lib/metacl/templates/iterate.rb
|
125
129
|
- lib/metacl/templates/kernel.cl.template
|
126
130
|
- lib/metacl/templates/kernel.rb
|
131
|
+
- lib/metacl/templates/kernel_init.cl.template
|
132
|
+
- lib/metacl/templates/kernel_init.rb
|
127
133
|
- lib/metacl/templates/print_matrix.any.template
|
128
134
|
- lib/metacl/templates/print_matrix.rb
|
129
135
|
- lib/metacl/templates/prints.any.template
|
130
136
|
- lib/metacl/templates/prints.rb
|
137
|
+
- lib/metacl/templates/upload_to_gpu.rb
|
131
138
|
- lib/metacl/templates/wrapper.cl.template
|
132
139
|
- lib/metacl/templates/wrapper.cpp.template
|
133
140
|
- lib/metacl/templates/wrapper.rb
|