[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