From 5e1b2e021f4b746a77619e0ad5ab35d9a0d4df54 Mon Sep 17 00:00:00 2001 From: Cedric Nugteren Date: Sat, 14 May 2016 18:06:00 +0200 Subject: Set kernel arguments for AXPY as constant memory buffers, making it possible to transfer half-precision values as well --- src/routines/level1/xaxpy.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/routines') diff --git a/src/routines/level1/xaxpy.cc b/src/routines/level1/xaxpy.cc index b7956bf2..66aa2336 100644 --- a/src/routines/level1/xaxpy.cc +++ b/src/routines/level1/xaxpy.cc @@ -68,16 +68,20 @@ StatusCode Xaxpy::DoAxpy(const size_t n, const T alpha, const auto program = GetProgramFromCache(); auto kernel = Kernel(program, kernel_name); + // Upload the scalar argument as a constant buffer to the device (needed for half-precision) + auto alpha_buffer = Buffer(context_, 1); + alpha_buffer.Write(queue_, 1, &alpha); + // Sets the kernel arguments if (use_fast_kernel) { kernel.SetArgument(0, static_cast(n)); - kernel.SetArgument(1, static_cast::Type>(alpha)); + kernel.SetArgument(1, alpha_buffer()); kernel.SetArgument(2, x_buffer()); kernel.SetArgument(3, y_buffer()); } else { kernel.SetArgument(0, static_cast(n)); - kernel.SetArgument(1, static_cast::Type>(alpha)); + kernel.SetArgument(1, alpha_buffer()); kernel.SetArgument(2, x_buffer()); kernel.SetArgument(3, static_cast(x_offset)); kernel.SetArgument(4, static_cast(x_inc)); -- cgit v1.2.3