summaryrefslogtreecommitdiff
path: root/scripts/generator
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2017-03-08 20:10:20 +0100
committerCedric Nugteren <web@cedricnugteren.nl>2017-03-08 20:10:20 +0100
commitfa0a9c689fc21a2a24aeadf82ae0acdf6d8bf831 (patch)
tree404e85900a4c9038d407addb38798d06bb48868c /scripts/generator
parent6aba0bbae71702c4eebd88d0fe17739b509185c1 (diff)
Make batched routines based on offsets instead of a vector of cl_mem objects - undoing many earlier changes
Diffstat (limited to 'scripts/generator')
-rw-r--r--scripts/generator/generator/routine.py31
1 files changed, 13 insertions, 18 deletions
diff --git a/scripts/generator/generator/routine.py b/scripts/generator/generator/routine.py
index 8807fd8e..59b2ed73 100644
--- a/scripts/generator/generator/routine.py
+++ b/scripts/generator/generator/routine.py
@@ -72,12 +72,12 @@ class Routine:
for scalar in self.scalars:
result.append("auto " + scalar + "s_cpp = std::vector<T>();")
for buffer_name in self.inputs + self.outputs:
- result.append("auto " + buffer_name + "_buffers_cpp = std::vector<Buffer<T>>();")
+ result.append("auto " + buffer_name + "_offsets_cpp = std::vector<size_t>();")
result.append("for (auto batch = size_t{0}; batch < batch_count; ++batch) {")
for scalar in self.scalars:
result.append(" " + scalar + "s_cpp.push_back(" + scalar + "s[batch]);")
for buffer_name in self.inputs + self.outputs:
- result.append(" " + buffer_name + "_buffers_cpp.push_back(Buffer<T>(" + buffer_name + "_buffers[batch]));")
+ result.append(" " + buffer_name + "_offsets_cpp.push_back(" + buffer_name + "_offsets[batch]);")
result.append("}")
return result
@@ -222,8 +222,8 @@ class Routine:
def buffer(self, name):
"""Retrieves a variable name for a specific input/output vector/matrix (e.g. 'x')"""
if name in self.inputs or name in self.outputs:
- a = [name + "_buffer" + self.b_s()]
- b = [name + "_offset"] if not self.batched else []
+ a = [name + "_buffer"]
+ b = [name + "_offset" + self.b_s()]
c = [name + "_" + self.postfix(name)] if (name not in self.buffers_without_ld_inc()) else []
return [", ".join(a + b + c)]
return []
@@ -250,8 +250,8 @@ class Routine:
"""As above but with data-types"""
prefix = "const " if name in self.inputs else ""
if name in self.inputs or name in self.outputs:
- a = [prefix + "cl_mem " + self.b_star() + name + "_buffer" + self.b_s()]
- b = ["const size_t " + name + "_offset"] if not self.batched else []
+ a = [prefix + "cl_mem " + name + "_buffer"]
+ b = ["const size_t " + self.b_star() + name + "_offset" + self.b_s()]
c = ["const size_t " + name + "_" + self.postfix(name)] if name not in self.buffers_without_ld_inc() else []
return [", ".join(a + b + c)]
return []
@@ -291,11 +291,8 @@ class Routine:
"""As above but with CLCudaAPI buffers"""
if name in self.inputs or name in self.outputs:
buffer_type = "unsigned int" if (name in self.index_buffers()) else self.template.buffer_type
- if self.batched:
- a = [name + "_buffers_cpp"]
- else:
- a = ["Buffer<" + buffer_type + ">(" + name + "_buffer)"]
- b = [name + "_offset"] if not self.batched else []
+ a = ["Buffer<" + buffer_type + ">(" + name + "_buffer)"]
+ b = [name + "_offsets_cpp"] if self.batched else [name + "_offset"]
c = [name + "_" + self.postfix(name)] if (name not in self.buffers_without_ld_inc()) else []
return [", ".join(a + b + c)]
return []
@@ -336,8 +333,8 @@ class Routine:
"""As above, but only data-types"""
prefix = "const " if (name in self.inputs) else ""
if (name in self.inputs) or (name in self.outputs):
- a = [prefix + "cl_mem" + self.b_star()]
- b = ["const size_t"] if not self.batched else []
+ a = [prefix + "cl_mem"]
+ b = ["const size_t" + self.b_star()]
c = ["const size_t"] if (name not in self.buffers_without_ld_inc()) else []
return [", ".join(a + b + c)]
return []
@@ -347,12 +344,10 @@ class Routine:
prefix = "const " if (name in self.inputs) else ""
inout = "input" if (name in self.inputs) else "output"
if (name in self.inputs) or (name in self.outputs):
- math_name = name.upper() + " matrix" + self.b_s() if (name in self.buffers_matrix()) else name + " vector" + self.b_s()
+ math_name = name.upper() + " matrix" if (name in self.buffers_matrix()) else name + " vector"
inc_ld_description = "Leading dimension " if (name in self.buffers_matrix()) else "Stride/increment "
- a = ["`" + prefix + "cl_mem " + self.b_star() + name + "_buffer" + self.b_s() + "`: OpenCL buffer" + self.b_s() + " to store the " + inout + " " + math_name + "."]
- b = []
- if not self.batched:
- b = ["`const size_t " + name + "_offset`: The offset in elements from the start of the " + inout + " " + math_name + "."]
+ a = ["`" + prefix + "cl_mem " + name + "_buffer`: OpenCL buffer to store the " + inout + " " + math_name + "."]
+ b = ["`const size_t " + self.b_star() + name + "_offset" + self.b_s() + "`: The offset" + self.b_s() + " in elements from the start of the " + inout + " " + math_name + "."]
c = []
if name not in self.buffers_without_ld_inc():
c = ["`const size_t " + name + "_" + self.postfix(name) + "`: " +