summaryrefslogtreecommitdiff
path: root/src/kernels
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernels')
-rw-r--r--src/kernels/common.opencl6
-rw-r--r--src/kernels/level3/xgemm_part2.opencl15
2 files changed, 15 insertions, 6 deletions
diff --git a/src/kernels/common.opencl b/src/kernels/common.opencl
index f0da5a47..01605f6e 100644
--- a/src/kernels/common.opencl
+++ b/src/kernels/common.opencl
@@ -43,9 +43,9 @@ R"(
typedef half4 real4;
typedef half8 real8;
typedef half16 real16;
- #define ZERO 0.0h
- #define ONE 1.0h
- #define SMALLEST -1.0e37h
+ #define ZERO 0
+ #define ONE 1
+ #define SMALLEST -1.0e14
// Single-precision
#elif PRECISION == 32
diff --git a/src/kernels/level3/xgemm_part2.opencl b/src/kernels/level3/xgemm_part2.opencl
index c0760db6..a8c8ebf5 100644
--- a/src/kernels/level3/xgemm_part2.opencl
+++ b/src/kernels/level3/xgemm_part2.opencl
@@ -263,10 +263,13 @@ inline void XgemmBody(const int kSizeM, const int kSizeN, const int kSizeK,
// Main entry point of the kernel. This is the upper-triangular version.
__attribute__((reqd_work_group_size(MDIMC, NDIMC, 1)))
__kernel void XgemmUpper(const int kSizeN, const int kSizeK,
- const real alpha, const real beta,
+ const __constant real* restrict arg_alpha,
+ const __constant real* restrict arg_beta,
const __global realM* restrict agm,
const __global realN* restrict bgm,
__global realM* cgm) {
+ const real alpha = arg_alpha[0];
+ const real beta = arg_beta[0];
// Skip these threads if they do not contain threads contributing to the upper-triangle
if (get_group_id(1)*NWG < get_group_id(0)*MWG) {
@@ -300,10 +303,13 @@ __kernel void XgemmUpper(const int kSizeN, const int kSizeK,
// Main entry point of the kernel. This is the lower-triangular version.
__attribute__((reqd_work_group_size(MDIMC, NDIMC, 1)))
__kernel void XgemmLower(const int kSizeN, const int kSizeK,
- const real alpha, const real beta,
+ const __constant real* restrict arg_alpha,
+ const __constant real* restrict arg_beta,
const __global realM* restrict agm,
const __global realN* restrict bgm,
__global realM* cgm) {
+ const real alpha = arg_alpha[0];
+ const real beta = arg_beta[0];
// Skip these threads if they do not contain threads contributing to the lower-triangle
if (get_group_id(1)*NWG > get_group_id(0)*MWG) {
@@ -341,10 +347,13 @@ __kernel void XgemmLower(const int kSizeN, const int kSizeK,
// Main entry point of the kernel. This is the regular full version.
__attribute__((reqd_work_group_size(MDIMC, NDIMC, 1)))
__kernel void Xgemm(const int kSizeM, const int kSizeN, const int kSizeK,
- const real alpha, const real beta,
+ const __constant real* restrict arg_alpha,
+ const __constant real* restrict arg_beta,
const __global realM* restrict agm,
const __global realN* restrict bgm,
__global realM* cgm) {
+ const real alpha = arg_alpha[0];
+ const real beta = arg_beta[0];
// Allocates workgroup-private memory (local memory)
#if SA == 1