[arrayfire] 26/75: BUGFIX: Fixed bug in CUDA and OpenCL when re-using same JIT nodes.
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Mon Feb 29 08:01:11 UTC 2016
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch dfsg-clean
in repository arrayfire.
commit 5be6cd78a869ad8fb3a147fb3ec793ca019391f8
Author: Pavan Yalamanchili <pavan at arrayfire.com>
Date: Fri Feb 12 17:29:26 2016 -0500
BUGFIX: Fixed bug in CUDA and OpenCL when re-using same JIT nodes.
---
src/backend/cuda/JIT/BinaryNode.hpp | 6 +-----
src/backend/cuda/JIT/BufferNode.hpp | 7 +------
src/backend/cuda/JIT/Node.hpp | 19 ++++++++++++++++++-
src/backend/cuda/JIT/ScalarNode.hpp | 7 +------
src/backend/cuda/JIT/UnaryNode.hpp | 6 +-----
src/backend/opencl/JIT/BinaryNode.hpp | 8 ++++----
src/backend/opencl/JIT/BufferNode.hpp | 9 +--------
src/backend/opencl/JIT/Node.hpp | 18 +++++++++++++++++-
src/backend/opencl/JIT/ScalarNode.hpp | 11 ++---------
src/backend/opencl/JIT/UnaryNode.hpp | 7 +++----
10 files changed, 49 insertions(+), 49 deletions(-)
diff --git a/src/backend/cuda/JIT/BinaryNode.hpp b/src/backend/cuda/JIT/BinaryNode.hpp
index 2a2abb0..f916d85 100644
--- a/src/backend/cuda/JIT/BinaryNode.hpp
+++ b/src/backend/cuda/JIT/BinaryNode.hpp
@@ -126,11 +126,7 @@ namespace JIT
void resetFlags()
{
- m_set_id = false;
- m_gen_func = false;
- m_gen_param = false;
- m_gen_offset = false;
- m_set_arg = false;
+ resetCommonFlags();
m_lhs->resetFlags();
m_rhs->resetFlags();
}
diff --git a/src/backend/cuda/JIT/BufferNode.hpp b/src/backend/cuda/JIT/BufferNode.hpp
index efe32f8..342e1ed 100644
--- a/src/backend/cuda/JIT/BufferNode.hpp
+++ b/src/backend/cuda/JIT/BufferNode.hpp
@@ -178,12 +178,7 @@ namespace JIT
void resetFlags()
{
- m_set_id = false;
- m_gen_func = false;
- m_gen_param = false;
- m_gen_offset = false;
- m_gen_name = false;
- m_set_arg = false;
+ resetCommonFlags();
}
void setArgs(std::vector<void *> &args, bool is_linear)
diff --git a/src/backend/cuda/JIT/Node.hpp b/src/backend/cuda/JIT/Node.hpp
index e30a1cf..00fed9f 100644
--- a/src/backend/cuda/JIT/Node.hpp
+++ b/src/backend/cuda/JIT/Node.hpp
@@ -37,6 +37,19 @@ namespace JIT
bool m_set_arg;
bool m_gen_name;
+ protected:
+
+ void resetCommonFlags()
+ {
+ m_set_id = false;
+ m_gen_func = false;
+ m_gen_param = false;
+ m_gen_offset = false;
+ m_set_arg = false;
+ m_gen_name = false;
+ }
+
+
public:
Node(const char *type_str, const char *name_str)
@@ -62,7 +75,11 @@ namespace JIT
virtual void setArgs(std::vector<void *> &args, bool is_linear) { m_set_arg = true; }
virtual bool isLinear(dim_t dims[4]) { return true; }
- virtual void resetFlags() {}
+ virtual void resetFlags()
+ {
+ resetCommonFlags();
+ }
+
virtual void getInfo(unsigned &len, unsigned &buf_count, unsigned &bytes)
{
len = 0;
diff --git a/src/backend/cuda/JIT/ScalarNode.hpp b/src/backend/cuda/JIT/ScalarNode.hpp
index 288af4d..34f316d 100644
--- a/src/backend/cuda/JIT/ScalarNode.hpp
+++ b/src/backend/cuda/JIT/ScalarNode.hpp
@@ -87,12 +87,7 @@ namespace JIT
void resetFlags()
{
- m_set_id = false;
- m_gen_func = false;
- m_gen_param = false;
- m_gen_offset = false;
- m_gen_name = false;
- m_set_arg = false;
+ resetCommonFlags();
}
void setArgs(std::vector<void *> &args, bool is_linear)
diff --git a/src/backend/cuda/JIT/UnaryNode.hpp b/src/backend/cuda/JIT/UnaryNode.hpp
index caa5731..94ee96e 100644
--- a/src/backend/cuda/JIT/UnaryNode.hpp
+++ b/src/backend/cuda/JIT/UnaryNode.hpp
@@ -118,11 +118,7 @@ namespace JIT
void resetFlags()
{
- m_set_id = false;
- m_gen_func = false;
- m_gen_param = false;
- m_gen_offset = false;
- m_set_arg = false;
+ resetCommonFlags();
m_child->resetFlags();
}
diff --git a/src/backend/opencl/JIT/BinaryNode.hpp b/src/backend/opencl/JIT/BinaryNode.hpp
index f087760..b1f6d11 100644
--- a/src/backend/opencl/JIT/BinaryNode.hpp
+++ b/src/backend/opencl/JIT/BinaryNode.hpp
@@ -51,6 +51,9 @@ namespace JIT
int setArgs(cl::Kernel &ker, int id)
{
+ if (m_set_arg) return id;
+ m_set_arg = true;
+
id = m_lhs->setArgs(ker, id);
id = m_rhs->setArgs(ker, id);
return id;
@@ -120,10 +123,7 @@ namespace JIT
void resetFlags()
{
- m_set_id = false;
- m_gen_func = false;
- m_gen_param = false;
- m_gen_offset = false;
+ resetCommonFlags();
m_lhs->resetFlags();
m_rhs->resetFlags();
}
diff --git a/src/backend/opencl/JIT/BufferNode.hpp b/src/backend/opencl/JIT/BufferNode.hpp
index 71723b9..9306d59 100644
--- a/src/backend/opencl/JIT/BufferNode.hpp
+++ b/src/backend/opencl/JIT/BufferNode.hpp
@@ -24,7 +24,6 @@ namespace JIT
const std::shared_ptr<cl::Buffer> m_data;
const Param m_param;
const unsigned m_bytes;
- bool m_set_arg;
bool m_linear;
public:
@@ -39,7 +38,6 @@ namespace JIT
m_data(data),
m_param(param),
m_bytes(bytes),
- m_set_arg(false),
m_linear(is_linear)
{}
@@ -140,12 +138,7 @@ namespace JIT
void resetFlags()
{
- m_set_id = false;
- m_gen_func = false;
- m_gen_param = false;
- m_gen_offset = false;
- m_gen_name = false;
- m_set_arg = false;
+ resetCommonFlags();
}
};
diff --git a/src/backend/opencl/JIT/Node.hpp b/src/backend/opencl/JIT/Node.hpp
index fedf7fb..fc34c09 100644
--- a/src/backend/opencl/JIT/Node.hpp
+++ b/src/backend/opencl/JIT/Node.hpp
@@ -32,8 +32,20 @@ namespace JIT
bool m_gen_func;
bool m_gen_param;
bool m_gen_offset;
+ bool m_set_arg;
bool m_gen_name;
+ protected:
+ void resetCommonFlags()
+ {
+ m_set_id = false;
+ m_gen_func = false;
+ m_gen_param = false;
+ m_gen_offset = false;
+ m_set_arg = false;
+ m_gen_name = false;
+ }
+
public:
Node(const char *type_str, const char *name_str)
@@ -44,6 +56,7 @@ namespace JIT
m_gen_func(false),
m_gen_param(false),
m_gen_offset(false),
+ m_set_arg(false),
m_gen_name(false)
{}
@@ -64,7 +77,10 @@ namespace JIT
}
- virtual void resetFlags() {}
+ virtual void resetFlags()
+ {
+ resetCommonFlags();
+ }
virtual bool isLinear(dim_t dims[4]) { return true; }
diff --git a/src/backend/opencl/JIT/ScalarNode.hpp b/src/backend/opencl/JIT/ScalarNode.hpp
index 9eaa544..0bba7a2 100644
--- a/src/backend/opencl/JIT/ScalarNode.hpp
+++ b/src/backend/opencl/JIT/ScalarNode.hpp
@@ -24,14 +24,12 @@ namespace JIT
{
private:
const T m_val;
- bool m_set_arg;
public:
ScalarNode(T val)
: Node(dtype_traits<T>::getName(), shortname<T>(false)),
- m_val(val),
- m_set_arg(false)
+ m_val(val)
{
}
@@ -101,12 +99,7 @@ namespace JIT
void resetFlags()
{
- m_set_id = false;
- m_gen_func = false;
- m_gen_param = false;
- m_gen_offset = false;
- m_gen_name = false;
- m_set_arg = false;
+ resetCommonFlags();
}
};
diff --git a/src/backend/opencl/JIT/UnaryNode.hpp b/src/backend/opencl/JIT/UnaryNode.hpp
index 78fda23..e1f32de 100644
--- a/src/backend/opencl/JIT/UnaryNode.hpp
+++ b/src/backend/opencl/JIT/UnaryNode.hpp
@@ -49,6 +49,8 @@ namespace JIT
int setArgs(cl::Kernel &ker, int id)
{
+ if (m_set_arg) return id;
+ m_set_arg = true;
return m_child->setArgs(ker, id);
}
@@ -108,10 +110,7 @@ namespace JIT
void resetFlags()
{
- m_set_id = false;
- m_gen_func = false;
- m_gen_param = false;
- m_gen_offset = false;
+ resetCommonFlags();
m_child->resetFlags();
}
};
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/arrayfire.git
More information about the debian-science-commits
mailing list