[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