summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2017-12-27 12:04:22 +0100
committerCedric Nugteren <web@cedricnugteren.nl>2017-12-27 12:04:22 +0100
commit1e738db6dd84d552550a15473abdda83e88f4c80 (patch)
tree44bd0c99699ed66203348fd1401e3b5bb3497eee
parent4a2fc4aa989ce84dc476cf9508adb676a042896b (diff)
Split the database into multiple small compilation units
-rw-r--r--CHANGELOG1
-rw-r--r--CMakeLists.txt1
-rw-r--r--scripts/database/database/clblast.py28
-rw-r--r--src/database/database_structure.hpp7
-rw-r--r--src/database/kernels/copy/copy.cpp15
-rw-r--r--src/database/kernels/copy/copy.hpp18
-rw-r--r--src/database/kernels/gemm_routine/gemm_routine.cpp15
-rw-r--r--src/database/kernels/gemm_routine/gemm_routine.hpp18
-rw-r--r--src/database/kernels/invert/invert.cpp15
-rw-r--r--src/database/kernels/invert/invert.hpp18
-rw-r--r--src/database/kernels/pad/pad.cpp15
-rw-r--r--src/database/kernels/pad/pad.hpp18
-rw-r--r--src/database/kernels/padtranspose/padtranspose.cpp15
-rw-r--r--src/database/kernels/padtranspose/padtranspose.hpp18
-rw-r--r--src/database/kernels/transpose/transpose.cpp15
-rw-r--r--src/database/kernels/transpose/transpose.hpp18
-rw-r--r--src/database/kernels/trsv_routine/trsv_routine.cpp15
-rw-r--r--src/database/kernels/trsv_routine/trsv_routine.hpp18
-rw-r--r--src/database/kernels/xaxpy/xaxpy.cpp15
-rw-r--r--src/database/kernels/xaxpy/xaxpy.hpp18
-rw-r--r--src/database/kernels/xdot/xdot.cpp15
-rw-r--r--src/database/kernels/xdot/xdot.hpp18
-rw-r--r--src/database/kernels/xgemm/xgemm.cpp15
-rw-r--r--src/database/kernels/xgemm/xgemm.hpp18
-rw-r--r--src/database/kernels/xgemm_direct/xgemm_direct.cpp15
-rw-r--r--src/database/kernels/xgemm_direct/xgemm_direct.hpp18
-rw-r--r--src/database/kernels/xgemv/xgemv.cpp15
-rw-r--r--src/database/kernels/xgemv/xgemv.hpp18
-rw-r--r--src/database/kernels/xgemv_fast/xgemv_fast.cpp15
-rw-r--r--src/database/kernels/xgemv_fast/xgemv_fast.hpp18
-rw-r--r--src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.cpp15
-rw-r--r--src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.hpp18
-rw-r--r--src/database/kernels/xger/xger.cpp15
-rw-r--r--src/database/kernels/xger/xger.hpp18
34 files changed, 454 insertions, 78 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 83d5178b..e2f0d872 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@ Development (next version)
- Added OpenCL pre-processor to unroll loops and perform array-to-register promotions for compilers
which don't do this themselves (ARM Mali) - greatly improves performance on these platforms
- Added first tuners for the TRSV (block size) and TRSM (invert kernel) routines
+- Improved compilation time by splitting the tuning database into multiple compilation units
- Various minor fixes and enhancements
- Added tuned parameters for various devices (see README)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b0a2759c..53944b25 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -285,6 +285,7 @@ foreach(ROUTINE ${LEVELX_ROUTINES})
set(HEADERS ${HEADERS} src/routines/levelx/${ROUTINE}.hpp)
endforeach()
foreach(DATABASE ${DATABASES})
+ set(SOURCES ${SOURCES} src/database/kernels/${DATABASE}/${DATABASE}.cpp)
set(HEADERS ${HEADERS} src/database/kernels/${DATABASE}/${DATABASE}.hpp)
set(HEADERS ${HEADERS} src/database/kernels/${DATABASE}/${DATABASE}_16.hpp)
set(HEADERS ${HEADERS} src/database/kernels/${DATABASE}/${DATABASE}_32.hpp)
diff --git a/scripts/database/database/clblast.py b/scripts/database/database/clblast.py
index 40e67b55..6625c808 100644
--- a/scripts/database/database/clblast.py
+++ b/scripts/database/database/clblast.py
@@ -90,13 +90,29 @@ def get_cpp_device_vendor(vendor, device_type):
def get_cpp_family_includes(family, precisions):
result = "\n"
- # result += "#include \"clblast.h\"\n"
- # result += "#include \"database/database_structure.hpp\"\n"
+ result += "#include \"database/kernels/%s/%s.hpp\"\n" % (family, family)
for precision in precisions:
result += "#include \"database/kernels/%s/%s_%s.hpp\"\n" % (family, family, precision)
return result
+def get_hpp_family_includes(family, precisions):
+ result = "\n"
+ result += "#include \"database/database_structure.hpp\"\n"
+ result += "\n"
+ result += "namespace clblast {\n"
+ result += "namespace database {\n"
+ result += "\n"
+ camelcase_name = family.title().replace("_", "")
+ for precision in precisions:
+ precision_string = precision_to_string(precision)
+ result += "extern const DatabaseEntry %s%s;\n" % (camelcase_name, precision_string)
+ result += "\n"
+ result += "} // namespace database\n"
+ result += "} // namespace clblast\n"
+ return result
+
+
def print_as_name(name):
return "Name{\"%-50s\"}" % name.strip()[:STRING_LENGTH]
@@ -238,8 +254,14 @@ def print_cpp_database(database, output_dir):
# Prints the file footer
f.write(get_cpp_footer())
+ # Creates the combined family sources
+ full_path = os.path.join(family_path, family_name + ".cpp")
+ with open(full_path, 'w+') as f:
+ f.write(get_cpp_header(family_name, ""))
+ f.write(get_cpp_family_includes(family_name, precisions))
+
# Creates the combined family includes header
full_path = os.path.join(family_path, family_name + ".hpp")
with open(full_path, 'w+') as f:
f.write(get_cpp_header(family_name, ""))
- f.write(get_cpp_family_includes(family_name, precisions))
+ f.write(get_hpp_family_includes(family_name, precisions))
diff --git a/src/database/database_structure.hpp b/src/database/database_structure.hpp
index 176fc556..663b69ce 100644
--- a/src/database/database_structure.hpp
+++ b/src/database/database_structure.hpp
@@ -19,6 +19,13 @@
#include <vector>
#include <map>
+// Just needed for 'Precision'
+#ifdef OPENCL_API
+ #include "clblast.h"
+#elif CUDA_API
+ #include "clblast_cuda.h"
+#endif
+
namespace clblast {
// A special namespace to hold all the global constant variables (including the database entries)
namespace database {
diff --git a/src/database/kernels/copy/copy.cpp b/src/database/kernels/copy/copy.cpp
new file mode 100644
index 00000000..21057ae3
--- /dev/null
+++ b/src/database/kernels/copy/copy.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Copy' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/copy/copy.hpp"
+#include "database/kernels/copy/copy_16.hpp"
+#include "database/kernels/copy/copy_32.hpp"
+#include "database/kernels/copy/copy_3232.hpp"
+#include "database/kernels/copy/copy_64.hpp"
+#include "database/kernels/copy/copy_6464.hpp"
diff --git a/src/database/kernels/copy/copy.hpp b/src/database/kernels/copy/copy.hpp
index 8c6e7e03..7fa06ee5 100644
--- a/src/database/kernels/copy/copy.hpp
+++ b/src/database/kernels/copy/copy.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/copy/copy_16.hpp"
-#include "database/kernels/copy/copy_32.hpp"
-#include "database/kernels/copy/copy_3232.hpp"
-#include "database/kernels/copy/copy_64.hpp"
-#include "database/kernels/copy/copy_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry CopyHalf;
+extern const DatabaseEntry CopySingle;
+extern const DatabaseEntry CopyComplexSingle;
+extern const DatabaseEntry CopyDouble;
+extern const DatabaseEntry CopyComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/gemm_routine/gemm_routine.cpp b/src/database/kernels/gemm_routine/gemm_routine.cpp
new file mode 100644
index 00000000..7dadf83e
--- /dev/null
+++ b/src/database/kernels/gemm_routine/gemm_routine.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Gemm_Routine' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/gemm_routine/gemm_routine.hpp"
+#include "database/kernels/gemm_routine/gemm_routine_16.hpp"
+#include "database/kernels/gemm_routine/gemm_routine_32.hpp"
+#include "database/kernels/gemm_routine/gemm_routine_3232.hpp"
+#include "database/kernels/gemm_routine/gemm_routine_64.hpp"
+#include "database/kernels/gemm_routine/gemm_routine_6464.hpp"
diff --git a/src/database/kernels/gemm_routine/gemm_routine.hpp b/src/database/kernels/gemm_routine/gemm_routine.hpp
index f1470252..4b304d92 100644
--- a/src/database/kernels/gemm_routine/gemm_routine.hpp
+++ b/src/database/kernels/gemm_routine/gemm_routine.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/gemm_routine/gemm_routine_16.hpp"
-#include "database/kernels/gemm_routine/gemm_routine_32.hpp"
-#include "database/kernels/gemm_routine/gemm_routine_3232.hpp"
-#include "database/kernels/gemm_routine/gemm_routine_64.hpp"
-#include "database/kernels/gemm_routine/gemm_routine_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry GemmRoutineHalf;
+extern const DatabaseEntry GemmRoutineSingle;
+extern const DatabaseEntry GemmRoutineComplexSingle;
+extern const DatabaseEntry GemmRoutineDouble;
+extern const DatabaseEntry GemmRoutineComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/invert/invert.cpp b/src/database/kernels/invert/invert.cpp
new file mode 100644
index 00000000..6e372e4a
--- /dev/null
+++ b/src/database/kernels/invert/invert.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Invert' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/invert/invert.hpp"
+#include "database/kernels/invert/invert_16.hpp"
+#include "database/kernels/invert/invert_32.hpp"
+#include "database/kernels/invert/invert_3232.hpp"
+#include "database/kernels/invert/invert_64.hpp"
+#include "database/kernels/invert/invert_6464.hpp"
diff --git a/src/database/kernels/invert/invert.hpp b/src/database/kernels/invert/invert.hpp
index 9b7c2d30..5a1e5e76 100644
--- a/src/database/kernels/invert/invert.hpp
+++ b/src/database/kernels/invert/invert.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/invert/invert_16.hpp"
-#include "database/kernels/invert/invert_32.hpp"
-#include "database/kernels/invert/invert_3232.hpp"
-#include "database/kernels/invert/invert_64.hpp"
-#include "database/kernels/invert/invert_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry InvertHalf;
+extern const DatabaseEntry InvertSingle;
+extern const DatabaseEntry InvertComplexSingle;
+extern const DatabaseEntry InvertDouble;
+extern const DatabaseEntry InvertComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/pad/pad.cpp b/src/database/kernels/pad/pad.cpp
new file mode 100644
index 00000000..4a4fa6e1
--- /dev/null
+++ b/src/database/kernels/pad/pad.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Pad' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/pad/pad.hpp"
+#include "database/kernels/pad/pad_16.hpp"
+#include "database/kernels/pad/pad_32.hpp"
+#include "database/kernels/pad/pad_3232.hpp"
+#include "database/kernels/pad/pad_64.hpp"
+#include "database/kernels/pad/pad_6464.hpp"
diff --git a/src/database/kernels/pad/pad.hpp b/src/database/kernels/pad/pad.hpp
index bc91c09f..b87fca0b 100644
--- a/src/database/kernels/pad/pad.hpp
+++ b/src/database/kernels/pad/pad.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/pad/pad_16.hpp"
-#include "database/kernels/pad/pad_32.hpp"
-#include "database/kernels/pad/pad_3232.hpp"
-#include "database/kernels/pad/pad_64.hpp"
-#include "database/kernels/pad/pad_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry PadHalf;
+extern const DatabaseEntry PadSingle;
+extern const DatabaseEntry PadComplexSingle;
+extern const DatabaseEntry PadDouble;
+extern const DatabaseEntry PadComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/padtranspose/padtranspose.cpp b/src/database/kernels/padtranspose/padtranspose.cpp
new file mode 100644
index 00000000..9fb88a9a
--- /dev/null
+++ b/src/database/kernels/padtranspose/padtranspose.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Padtranspose' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/padtranspose/padtranspose.hpp"
+#include "database/kernels/padtranspose/padtranspose_16.hpp"
+#include "database/kernels/padtranspose/padtranspose_32.hpp"
+#include "database/kernels/padtranspose/padtranspose_3232.hpp"
+#include "database/kernels/padtranspose/padtranspose_64.hpp"
+#include "database/kernels/padtranspose/padtranspose_6464.hpp"
diff --git a/src/database/kernels/padtranspose/padtranspose.hpp b/src/database/kernels/padtranspose/padtranspose.hpp
index c395653a..786b7270 100644
--- a/src/database/kernels/padtranspose/padtranspose.hpp
+++ b/src/database/kernels/padtranspose/padtranspose.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/padtranspose/padtranspose_16.hpp"
-#include "database/kernels/padtranspose/padtranspose_32.hpp"
-#include "database/kernels/padtranspose/padtranspose_3232.hpp"
-#include "database/kernels/padtranspose/padtranspose_64.hpp"
-#include "database/kernels/padtranspose/padtranspose_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry PadtransposeHalf;
+extern const DatabaseEntry PadtransposeSingle;
+extern const DatabaseEntry PadtransposeComplexSingle;
+extern const DatabaseEntry PadtransposeDouble;
+extern const DatabaseEntry PadtransposeComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/transpose/transpose.cpp b/src/database/kernels/transpose/transpose.cpp
new file mode 100644
index 00000000..f6df080c
--- /dev/null
+++ b/src/database/kernels/transpose/transpose.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Transpose' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/transpose/transpose.hpp"
+#include "database/kernels/transpose/transpose_16.hpp"
+#include "database/kernels/transpose/transpose_32.hpp"
+#include "database/kernels/transpose/transpose_3232.hpp"
+#include "database/kernels/transpose/transpose_64.hpp"
+#include "database/kernels/transpose/transpose_6464.hpp"
diff --git a/src/database/kernels/transpose/transpose.hpp b/src/database/kernels/transpose/transpose.hpp
index fa262c50..e8bd35c7 100644
--- a/src/database/kernels/transpose/transpose.hpp
+++ b/src/database/kernels/transpose/transpose.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/transpose/transpose_16.hpp"
-#include "database/kernels/transpose/transpose_32.hpp"
-#include "database/kernels/transpose/transpose_3232.hpp"
-#include "database/kernels/transpose/transpose_64.hpp"
-#include "database/kernels/transpose/transpose_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry TransposeHalf;
+extern const DatabaseEntry TransposeSingle;
+extern const DatabaseEntry TransposeComplexSingle;
+extern const DatabaseEntry TransposeDouble;
+extern const DatabaseEntry TransposeComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/trsv_routine/trsv_routine.cpp b/src/database/kernels/trsv_routine/trsv_routine.cpp
new file mode 100644
index 00000000..bb5b5fc6
--- /dev/null
+++ b/src/database/kernels/trsv_routine/trsv_routine.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Trsv_Routine' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/trsv_routine/trsv_routine.hpp"
+#include "database/kernels/trsv_routine/trsv_routine_16.hpp"
+#include "database/kernels/trsv_routine/trsv_routine_32.hpp"
+#include "database/kernels/trsv_routine/trsv_routine_3232.hpp"
+#include "database/kernels/trsv_routine/trsv_routine_64.hpp"
+#include "database/kernels/trsv_routine/trsv_routine_6464.hpp"
diff --git a/src/database/kernels/trsv_routine/trsv_routine.hpp b/src/database/kernels/trsv_routine/trsv_routine.hpp
index c4659ad1..95bb28c4 100644
--- a/src/database/kernels/trsv_routine/trsv_routine.hpp
+++ b/src/database/kernels/trsv_routine/trsv_routine.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/trsv_routine/trsv_routine_16.hpp"
-#include "database/kernels/trsv_routine/trsv_routine_32.hpp"
-#include "database/kernels/trsv_routine/trsv_routine_3232.hpp"
-#include "database/kernels/trsv_routine/trsv_routine_64.hpp"
-#include "database/kernels/trsv_routine/trsv_routine_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry TrsvRoutineHalf;
+extern const DatabaseEntry TrsvRoutineSingle;
+extern const DatabaseEntry TrsvRoutineComplexSingle;
+extern const DatabaseEntry TrsvRoutineDouble;
+extern const DatabaseEntry TrsvRoutineComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/xaxpy/xaxpy.cpp b/src/database/kernels/xaxpy/xaxpy.cpp
new file mode 100644
index 00000000..71247b68
--- /dev/null
+++ b/src/database/kernels/xaxpy/xaxpy.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Xaxpy' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/xaxpy/xaxpy.hpp"
+#include "database/kernels/xaxpy/xaxpy_16.hpp"
+#include "database/kernels/xaxpy/xaxpy_32.hpp"
+#include "database/kernels/xaxpy/xaxpy_3232.hpp"
+#include "database/kernels/xaxpy/xaxpy_64.hpp"
+#include "database/kernels/xaxpy/xaxpy_6464.hpp"
diff --git a/src/database/kernels/xaxpy/xaxpy.hpp b/src/database/kernels/xaxpy/xaxpy.hpp
index aa920183..803dcc21 100644
--- a/src/database/kernels/xaxpy/xaxpy.hpp
+++ b/src/database/kernels/xaxpy/xaxpy.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/xaxpy/xaxpy_16.hpp"
-#include "database/kernels/xaxpy/xaxpy_32.hpp"
-#include "database/kernels/xaxpy/xaxpy_3232.hpp"
-#include "database/kernels/xaxpy/xaxpy_64.hpp"
-#include "database/kernels/xaxpy/xaxpy_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry XaxpyHalf;
+extern const DatabaseEntry XaxpySingle;
+extern const DatabaseEntry XaxpyComplexSingle;
+extern const DatabaseEntry XaxpyDouble;
+extern const DatabaseEntry XaxpyComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/xdot/xdot.cpp b/src/database/kernels/xdot/xdot.cpp
new file mode 100644
index 00000000..611af223
--- /dev/null
+++ b/src/database/kernels/xdot/xdot.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Xdot' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/xdot/xdot.hpp"
+#include "database/kernels/xdot/xdot_16.hpp"
+#include "database/kernels/xdot/xdot_32.hpp"
+#include "database/kernels/xdot/xdot_3232.hpp"
+#include "database/kernels/xdot/xdot_64.hpp"
+#include "database/kernels/xdot/xdot_6464.hpp"
diff --git a/src/database/kernels/xdot/xdot.hpp b/src/database/kernels/xdot/xdot.hpp
index 5d54cdc9..ac3a3bcf 100644
--- a/src/database/kernels/xdot/xdot.hpp
+++ b/src/database/kernels/xdot/xdot.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/xdot/xdot_16.hpp"
-#include "database/kernels/xdot/xdot_32.hpp"
-#include "database/kernels/xdot/xdot_3232.hpp"
-#include "database/kernels/xdot/xdot_64.hpp"
-#include "database/kernels/xdot/xdot_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry XdotHalf;
+extern const DatabaseEntry XdotSingle;
+extern const DatabaseEntry XdotComplexSingle;
+extern const DatabaseEntry XdotDouble;
+extern const DatabaseEntry XdotComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/xgemm/xgemm.cpp b/src/database/kernels/xgemm/xgemm.cpp
new file mode 100644
index 00000000..1f42e0e0
--- /dev/null
+++ b/src/database/kernels/xgemm/xgemm.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Xgemm' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/xgemm/xgemm.hpp"
+#include "database/kernels/xgemm/xgemm_16.hpp"
+#include "database/kernels/xgemm/xgemm_32.hpp"
+#include "database/kernels/xgemm/xgemm_3232.hpp"
+#include "database/kernels/xgemm/xgemm_64.hpp"
+#include "database/kernels/xgemm/xgemm_6464.hpp"
diff --git a/src/database/kernels/xgemm/xgemm.hpp b/src/database/kernels/xgemm/xgemm.hpp
index d5d382f0..1bf0413d 100644
--- a/src/database/kernels/xgemm/xgemm.hpp
+++ b/src/database/kernels/xgemm/xgemm.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/xgemm/xgemm_16.hpp"
-#include "database/kernels/xgemm/xgemm_32.hpp"
-#include "database/kernels/xgemm/xgemm_3232.hpp"
-#include "database/kernels/xgemm/xgemm_64.hpp"
-#include "database/kernels/xgemm/xgemm_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry XgemmHalf;
+extern const DatabaseEntry XgemmSingle;
+extern const DatabaseEntry XgemmComplexSingle;
+extern const DatabaseEntry XgemmDouble;
+extern const DatabaseEntry XgemmComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/xgemm_direct/xgemm_direct.cpp b/src/database/kernels/xgemm_direct/xgemm_direct.cpp
new file mode 100644
index 00000000..b9560563
--- /dev/null
+++ b/src/database/kernels/xgemm_direct/xgemm_direct.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Xgemm_Direct' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/xgemm_direct/xgemm_direct.hpp"
+#include "database/kernels/xgemm_direct/xgemm_direct_16.hpp"
+#include "database/kernels/xgemm_direct/xgemm_direct_32.hpp"
+#include "database/kernels/xgemm_direct/xgemm_direct_3232.hpp"
+#include "database/kernels/xgemm_direct/xgemm_direct_64.hpp"
+#include "database/kernels/xgemm_direct/xgemm_direct_6464.hpp"
diff --git a/src/database/kernels/xgemm_direct/xgemm_direct.hpp b/src/database/kernels/xgemm_direct/xgemm_direct.hpp
index 9a26e7ce..1247b152 100644
--- a/src/database/kernels/xgemm_direct/xgemm_direct.hpp
+++ b/src/database/kernels/xgemm_direct/xgemm_direct.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/xgemm_direct/xgemm_direct_16.hpp"
-#include "database/kernels/xgemm_direct/xgemm_direct_32.hpp"
-#include "database/kernels/xgemm_direct/xgemm_direct_3232.hpp"
-#include "database/kernels/xgemm_direct/xgemm_direct_64.hpp"
-#include "database/kernels/xgemm_direct/xgemm_direct_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry XgemmDirectHalf;
+extern const DatabaseEntry XgemmDirectSingle;
+extern const DatabaseEntry XgemmDirectComplexSingle;
+extern const DatabaseEntry XgemmDirectDouble;
+extern const DatabaseEntry XgemmDirectComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/xgemv/xgemv.cpp b/src/database/kernels/xgemv/xgemv.cpp
new file mode 100644
index 00000000..5944aabd
--- /dev/null
+++ b/src/database/kernels/xgemv/xgemv.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Xgemv' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/xgemv/xgemv.hpp"
+#include "database/kernels/xgemv/xgemv_16.hpp"
+#include "database/kernels/xgemv/xgemv_32.hpp"
+#include "database/kernels/xgemv/xgemv_3232.hpp"
+#include "database/kernels/xgemv/xgemv_64.hpp"
+#include "database/kernels/xgemv/xgemv_6464.hpp"
diff --git a/src/database/kernels/xgemv/xgemv.hpp b/src/database/kernels/xgemv/xgemv.hpp
index 081c995f..d8867d70 100644
--- a/src/database/kernels/xgemv/xgemv.hpp
+++ b/src/database/kernels/xgemv/xgemv.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/xgemv/xgemv_16.hpp"
-#include "database/kernels/xgemv/xgemv_32.hpp"
-#include "database/kernels/xgemv/xgemv_3232.hpp"
-#include "database/kernels/xgemv/xgemv_64.hpp"
-#include "database/kernels/xgemv/xgemv_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry XgemvHalf;
+extern const DatabaseEntry XgemvSingle;
+extern const DatabaseEntry XgemvComplexSingle;
+extern const DatabaseEntry XgemvDouble;
+extern const DatabaseEntry XgemvComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/xgemv_fast/xgemv_fast.cpp b/src/database/kernels/xgemv_fast/xgemv_fast.cpp
new file mode 100644
index 00000000..fabd6003
--- /dev/null
+++ b/src/database/kernels/xgemv_fast/xgemv_fast.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Xgemv_Fast' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/xgemv_fast/xgemv_fast.hpp"
+#include "database/kernels/xgemv_fast/xgemv_fast_16.hpp"
+#include "database/kernels/xgemv_fast/xgemv_fast_32.hpp"
+#include "database/kernels/xgemv_fast/xgemv_fast_3232.hpp"
+#include "database/kernels/xgemv_fast/xgemv_fast_64.hpp"
+#include "database/kernels/xgemv_fast/xgemv_fast_6464.hpp"
diff --git a/src/database/kernels/xgemv_fast/xgemv_fast.hpp b/src/database/kernels/xgemv_fast/xgemv_fast.hpp
index 5cc2ca6e..22a8a2d3 100644
--- a/src/database/kernels/xgemv_fast/xgemv_fast.hpp
+++ b/src/database/kernels/xgemv_fast/xgemv_fast.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/xgemv_fast/xgemv_fast_16.hpp"
-#include "database/kernels/xgemv_fast/xgemv_fast_32.hpp"
-#include "database/kernels/xgemv_fast/xgemv_fast_3232.hpp"
-#include "database/kernels/xgemv_fast/xgemv_fast_64.hpp"
-#include "database/kernels/xgemv_fast/xgemv_fast_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry XgemvFastHalf;
+extern const DatabaseEntry XgemvFastSingle;
+extern const DatabaseEntry XgemvFastComplexSingle;
+extern const DatabaseEntry XgemvFastDouble;
+extern const DatabaseEntry XgemvFastComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.cpp b/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.cpp
new file mode 100644
index 00000000..586b9c27
--- /dev/null
+++ b/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Xgemv_Fast_Rot' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot.hpp"
+#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_16.hpp"
+#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_32.hpp"
+#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_3232.hpp"
+#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_64.hpp"
+#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_6464.hpp"
diff --git a/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.hpp b/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.hpp
index 7379eba9..be2978b5 100644
--- a/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.hpp
+++ b/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_16.hpp"
-#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_32.hpp"
-#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_3232.hpp"
-#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_64.hpp"
-#include "database/kernels/xgemv_fast_rot/xgemv_fast_rot_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry XgemvFastRotHalf;
+extern const DatabaseEntry XgemvFastRotSingle;
+extern const DatabaseEntry XgemvFastRotComplexSingle;
+extern const DatabaseEntry XgemvFastRotDouble;
+extern const DatabaseEntry XgemvFastRotComplexDouble;
+
+} // namespace database
+} // namespace clblast
diff --git a/src/database/kernels/xger/xger.cpp b/src/database/kernels/xger/xger.cpp
new file mode 100644
index 00000000..7217701f
--- /dev/null
+++ b/src/database/kernels/xger/xger.cpp
@@ -0,0 +1,15 @@
+
+// =================================================================================================
+// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. It
+// is auto-generated by the 'scripts/database/database.py' Python script.
+//
+// This file populates the database with best-found tuning parameters for the 'Xger' kernels.
+//
+// =================================================================================================
+
+#include "database/kernels/xger/xger.hpp"
+#include "database/kernels/xger/xger_16.hpp"
+#include "database/kernels/xger/xger_32.hpp"
+#include "database/kernels/xger/xger_3232.hpp"
+#include "database/kernels/xger/xger_64.hpp"
+#include "database/kernels/xger/xger_6464.hpp"
diff --git a/src/database/kernels/xger/xger.hpp b/src/database/kernels/xger/xger.hpp
index 284d1fc6..70c9a0ad 100644
--- a/src/database/kernels/xger/xger.hpp
+++ b/src/database/kernels/xger/xger.hpp
@@ -7,8 +7,16 @@
//
// =================================================================================================
-#include "database/kernels/xger/xger_16.hpp"
-#include "database/kernels/xger/xger_32.hpp"
-#include "database/kernels/xger/xger_3232.hpp"
-#include "database/kernels/xger/xger_64.hpp"
-#include "database/kernels/xger/xger_6464.hpp"
+#include "database/database_structure.hpp"
+
+namespace clblast {
+namespace database {
+
+extern const DatabaseEntry XgerHalf;
+extern const DatabaseEntry XgerSingle;
+extern const DatabaseEntry XgerComplexSingle;
+extern const DatabaseEntry XgerDouble;
+extern const DatabaseEntry XgerComplexDouble;
+
+} // namespace database
+} // namespace clblast