[clblas] 11/54: Fix teardown of UserGemmClKernels

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Thu Jan 14 20:07:33 UTC 2016


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch debian/sid
in repository clblas.

commit 2ea8c8a21c049606b0a9d702d1773cd790ee4bc5
Author: Hugh Perkins <hughperkins at gmail.com>
Date:   Thu Oct 29 23:14:48 2015 +0800

    Fix teardown of UserGemmClKernels
---
 src/library/CMakeLists.txt                         |  1 +
 .../UserGemmKernelSources/UserGemmClKernels.cc     | 54 ++++++++++++++++++++++
 .../UserGemmKernelSources/UserGemmClKernels.h      | 22 ++++++---
 .../create_user_gemm_cl_kernels.py                 | 44 ++++++++++++++++++
 src/library/blas/init.c                            |  2 +
 5 files changed, 116 insertions(+), 7 deletions(-)

diff --git a/src/library/CMakeLists.txt b/src/library/CMakeLists.txt
index 16fc54d..0bc5089 100644
--- a/src/library/CMakeLists.txt
+++ b/src/library/CMakeLists.txt
@@ -43,6 +43,7 @@ set(AUTOGEMM_HEADERS
 )
 
 set(AUTOGEMM_SRC
+  ${CMAKE_SOURCE_DIR}/library/blas/AutoGemm/UserGemmKernelSources/UserGemmClKernels.cc
   ${CMAKE_BINARY_DIR}/include/AutoGemmIncludes/AutoGemmClKernels.cpp
   ${CMAKE_BINARY_DIR}/include/AutoGemmIncludes/AutoGemmKernelBuildOptionsBinary.cpp
   ${CMAKE_BINARY_DIR}/include/AutoGemmIncludes/AutoGemmKernelBinaries.cpp
diff --git a/src/library/blas/AutoGemm/UserGemmKernelSources/UserGemmClKernels.cc b/src/library/blas/AutoGemm/UserGemmKernelSources/UserGemmClKernels.cc
new file mode 100644
index 0000000..3354fa0
--- /dev/null
+++ b/src/library/blas/AutoGemm/UserGemmKernelSources/UserGemmClKernels.cc
@@ -0,0 +1,54 @@
+// GENERATED using create_user_gemm_cl_kernels.py
+
+#if defined( __APPLE__ ) || defined( __MACOSX )
+#include <OpenCL/cl.h>
+#else
+#include <CL/cl.h>
+#endif
+
+cl_kernel sgemm_Col_NT_B1_MX128_NX128_KX16_clKernel = NULL;
+cl_kernel sgemm_Col_NT_B1_MX032_NX064_KX16_ROW_clKernel = NULL;
+cl_kernel sgemm_Col_NT_B1_MX064_NX032_KX16_COLUMN_clKernel = NULL;
+cl_kernel sgemm_Col_NT_B1_MX032_NX032_KX16_SINGLE_clKernel = NULL;
+cl_kernel sgemm_Col_NN_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
+cl_kernel sgemm_Col_NT_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
+cl_kernel sgemm_Col_TN_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    void initUserGemmClKernels(void);
+#ifdef __cplusplus
+}
+#endif
+
+void initUserGemmClKernels(void) {
+    if(sgemm_Col_NT_B1_MX128_NX128_KX16_clKernel != NULL) {
+        clReleaseKernel(sgemm_Col_NT_B1_MX128_NX128_KX16_clKernel);
+        sgemm_Col_NT_B1_MX128_NX128_KX16_clKernel = NULL;
+    }
+    if(sgemm_Col_NT_B1_MX032_NX064_KX16_ROW_clKernel != NULL) {
+        clReleaseKernel(sgemm_Col_NT_B1_MX032_NX064_KX16_ROW_clKernel);
+        sgemm_Col_NT_B1_MX032_NX064_KX16_ROW_clKernel = NULL;
+    }
+    if(sgemm_Col_NT_B1_MX064_NX032_KX16_COLUMN_clKernel != NULL) {
+        clReleaseKernel(sgemm_Col_NT_B1_MX064_NX032_KX16_COLUMN_clKernel);
+        sgemm_Col_NT_B1_MX064_NX032_KX16_COLUMN_clKernel = NULL;
+    }
+    if(sgemm_Col_NT_B1_MX032_NX032_KX16_SINGLE_clKernel != NULL) {
+        clReleaseKernel(sgemm_Col_NT_B1_MX032_NX032_KX16_SINGLE_clKernel);
+        sgemm_Col_NT_B1_MX032_NX032_KX16_SINGLE_clKernel = NULL;
+    }
+    if(sgemm_Col_NN_B1_MX032_NX032_KX16_BRANCH_clKernel != NULL) {
+        clReleaseKernel(sgemm_Col_NN_B1_MX032_NX032_KX16_BRANCH_clKernel);
+        sgemm_Col_NN_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
+    }
+    if(sgemm_Col_NT_B1_MX032_NX032_KX16_BRANCH_clKernel != NULL) {
+        clReleaseKernel(sgemm_Col_NT_B1_MX032_NX032_KX16_BRANCH_clKernel);
+        sgemm_Col_NT_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
+    }
+    if(sgemm_Col_TN_B1_MX032_NX032_KX16_BRANCH_clKernel != NULL) {
+        clReleaseKernel(sgemm_Col_TN_B1_MX032_NX032_KX16_BRANCH_clKernel);
+        sgemm_Col_TN_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
+    }
+}
diff --git a/src/library/blas/AutoGemm/UserGemmKernelSources/UserGemmClKernels.h b/src/library/blas/AutoGemm/UserGemmKernelSources/UserGemmClKernels.h
index a98c0ad..8961590 100644
--- a/src/library/blas/AutoGemm/UserGemmKernelSources/UserGemmClKernels.h
+++ b/src/library/blas/AutoGemm/UserGemmKernelSources/UserGemmClKernels.h
@@ -8,16 +8,24 @@
 #include <CL/cl.h>
 #endif
 
-static cl_kernel sgemm_Col_NT_B1_MX128_NX128_KX16_clKernel = NULL;
+extern cl_kernel sgemm_Col_NT_B1_MX128_NX128_KX16_clKernel;
 
-static cl_kernel sgemm_Col_NT_B1_MX032_NX064_KX16_ROW_clKernel = NULL;
-static cl_kernel sgemm_Col_NT_B1_MX064_NX032_KX16_COLUMN_clKernel = NULL;
-static cl_kernel sgemm_Col_NT_B1_MX032_NX032_KX16_SINGLE_clKernel = NULL;
+extern cl_kernel sgemm_Col_NT_B1_MX032_NX064_KX16_ROW_clKernel;
+extern cl_kernel sgemm_Col_NT_B1_MX064_NX032_KX16_COLUMN_clKernel;
+extern cl_kernel sgemm_Col_NT_B1_MX032_NX032_KX16_SINGLE_clKernel;
 
-static cl_kernel sgemm_Col_NN_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
-static cl_kernel sgemm_Col_NT_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
-static cl_kernel sgemm_Col_TN_B1_MX032_NX032_KX16_BRANCH_clKernel = NULL;
+extern cl_kernel sgemm_Col_NN_B1_MX032_NX032_KX16_BRANCH_clKernel;
+extern cl_kernel sgemm_Col_NT_B1_MX032_NX032_KX16_BRANCH_clKernel;
+extern cl_kernel sgemm_Col_TN_B1_MX032_NX032_KX16_BRANCH_clKernel;
 
 static const int user_kernel_count = 7;
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+    void initUserGemmClKernels(void);
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/src/library/blas/AutoGemm/UserGemmKernelSources/create_user_gemm_cl_kernels.py b/src/library/blas/AutoGemm/UserGemmKernelSources/create_user_gemm_cl_kernels.py
new file mode 100644
index 0000000..75a7731
--- /dev/null
+++ b/src/library/blas/AutoGemm/UserGemmKernelSources/create_user_gemm_cl_kernels.py
@@ -0,0 +1,44 @@
+"""
+Run from same directory as this file is in
+Generates UserGemmClKernels.cc
+
+Would be nice to use Jinja2 for this, but using print for now, for consistency
+"""
+
+kernelNames = []
+# lets just read the kernel names from UserGemmClKernels.h:
+ifile = open('UserGemmClKernels.h', 'r')
+contents = ifile.read()
+for line in contents.split('\n'):
+    if line.find('cl_kernel') < 0:
+        continue
+    kernelName = line.split()[2].split(';')[0]  # probably not terribly un-fragile, but works for now
+    kernelNames.append(kernelName)
+ifile.close()
+
+ofile = open('UserGemmClKernels.cc', 'w')
+
+ofile.write('// GENERATED using create_user_gemm_cl_kernels.py\n')
+ofile.write('\n')
+
+ofile.write('#if defined( __APPLE__ ) || defined( __MACOSX )\n')
+ofile.write('#include <OpenCL/cl.h>\n')
+ofile.write('#else\n')
+ofile.write('#include <CL/cl.h>\n')
+ofile.write('#endif\n')
+ofile.write('\n')
+
+for kernelName in kernelNames:
+    ofile.write('cl_kernel %s = NULL;\n' % kernelName)
+ofile.write('\n')
+
+ofile.write('void initUserGemmClKernels(void) {\n')
+
+for kernelName in kernelNames:
+    ofile.write('    if(%s != NULL) {\n' % kernelName)
+    ofile.write('        clReleaseKernel(%s);\n' % kernelName)
+    ofile.write('        %s = NULL;\n' % kernelName)
+    ofile.write('    }\n')
+
+ofile.write('}\n')
+ofile.close()
diff --git a/src/library/blas/init.c b/src/library/blas/init.c
index 3686e41..3833aca 100644
--- a/src/library/blas/init.c
+++ b/src/library/blas/init.c
@@ -27,6 +27,7 @@
 #include <stdio.h>
 #ifdef BUILDING_CLBLAS
 #include "AutoGemmTeardown.h"
+#include "UserGemmClKernels.h"
 #endif
 
 clblasStatus
@@ -254,6 +255,7 @@ clblasTeardown(void)
     releaseMallocTrace();
 
 #ifdef BUILDING_CLBLAS
+   initUserGemmClKernels();
    initAutoGemmClKernels();
 #endif
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/clblas.git



More information about the debian-science-commits mailing list