summaryrefslogtreecommitdiff
path: root/src/clblast_c.cc
diff options
context:
space:
mode:
authorCNugteren <web@cedricnugteren.nl>2015-08-22 17:11:20 +0200
committerCNugteren <web@cedricnugteren.nl>2015-08-22 17:11:20 +0200
commitff0c54c3865b45eff807315262e73d3f01cb19c3 (patch)
tree839e9def73fb068f988b07e1e879ecce48d884c8 /src/clblast_c.cc
parent75517353d505de1d3979866060261a666aebfd36 (diff)
Added the XSWAP, XSCAL and XCOPY level-1 routines
Diffstat (limited to 'src/clblast_c.cc')
-rw-r--r--src/clblast_c.cc198
1 files changed, 164 insertions, 34 deletions
diff --git a/src/clblast_c.cc b/src/clblast_c.cc
index 3b437aff..ab3994fb 100644
--- a/src/clblast_c.cc
+++ b/src/clblast_c.cc
@@ -19,10 +19,140 @@ extern "C" {
#include "clblast.h"
#include "internal/utilities.h"
+// Shortcuts to the clblast namespace
+using float2 = clblast::float2;
+using double2 = clblast::double2;
+
// =================================================================================================
// BLAS level-1 (vector-vector) routines
// =================================================================================================
+// SWAP
+StatusCode CLBlastSswap(const size_t n,
+ cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Swap<float>(n,
+ x_buffer, x_offset, x_inc,
+ y_buffer, y_offset, y_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastDswap(const size_t n,
+ cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Swap<double>(n,
+ x_buffer, x_offset, x_inc,
+ y_buffer, y_offset, y_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastCswap(const size_t n,
+ cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Swap<float2>(n,
+ x_buffer, x_offset, x_inc,
+ y_buffer, y_offset, y_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastZswap(const size_t n,
+ cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Swap<double2>(n,
+ x_buffer, x_offset, x_inc,
+ y_buffer, y_offset, y_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+
+// SCAL
+StatusCode CLBlastSscal(const size_t n,
+ const float alpha,
+ cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Scal(n,
+ alpha,
+ x_buffer, x_offset, x_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastDscal(const size_t n,
+ const double alpha,
+ cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Scal(n,
+ alpha,
+ x_buffer, x_offset, x_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastCscal(const size_t n,
+ const cl_float2 alpha,
+ cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Scal(n,
+ float2{alpha.s[0], alpha.s[1]},
+ x_buffer, x_offset, x_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastZscal(const size_t n,
+ const cl_double2 alpha,
+ cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Scal(n,
+ double2{alpha.s[0], alpha.s[1]},
+ x_buffer, x_offset, x_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+
+// COPY
+StatusCode CLBlastScopy(const size_t n,
+ const cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Copy<float>(n,
+ x_buffer, x_offset, x_inc,
+ y_buffer, y_offset, y_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastDcopy(const size_t n,
+ const cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Copy<double>(n,
+ x_buffer, x_offset, x_inc,
+ y_buffer, y_offset, y_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastCcopy(const size_t n,
+ const cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Copy<float2>(n,
+ x_buffer, x_offset, x_inc,
+ y_buffer, y_offset, y_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+StatusCode CLBlastZcopy(const size_t n,
+ const cl_mem x_buffer, const size_t x_offset, const size_t x_inc,
+ cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
+ cl_command_queue* queue, cl_event* event) {
+ auto status = clblast::Copy<double2>(n,
+ x_buffer, x_offset, x_inc,
+ y_buffer, y_offset, y_inc,
+ queue, event);
+ return static_cast<StatusCode>(status);
+}
+
// AXPY
StatusCode CLBlastSaxpy(const size_t n,
const float alpha,
@@ -54,7 +184,7 @@ StatusCode CLBlastCaxpy(const size_t n,
cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
cl_command_queue* queue, cl_event* event) {
auto status = clblast::Axpy(n,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
x_buffer, x_offset, x_inc,
y_buffer, y_offset, y_inc,
queue, event);
@@ -66,7 +196,7 @@ StatusCode CLBlastZaxpy(const size_t n,
cl_mem y_buffer, const size_t y_offset, const size_t y_inc,
cl_command_queue* queue, cl_event* event) {
auto status = clblast::Axpy(n,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
x_buffer, x_offset, x_inc,
y_buffer, y_offset, y_inc,
queue, event);
@@ -127,10 +257,10 @@ StatusCode CLBlastCgemv(const Layout layout, const Transpose a_transpose,
auto status = clblast::Gemv(static_cast<clblast::Layout>(layout),
static_cast<clblast::Transpose>(a_transpose),
m, n,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
x_buffer, x_offset, x_inc,
- clblast::float2{beta.s[0], beta.s[1]},
+ float2{beta.s[0], beta.s[1]},
y_buffer, y_offset, y_inc,
queue, event);
return static_cast<StatusCode>(status);
@@ -146,10 +276,10 @@ StatusCode CLBlastZgemv(const Layout layout, const Transpose a_transpose,
auto status = clblast::Gemv(static_cast<clblast::Layout>(layout),
static_cast<clblast::Transpose>(a_transpose),
m, n,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
x_buffer, x_offset, x_inc,
- clblast::double2{beta.s[0], beta.s[1]},
+ double2{beta.s[0], beta.s[1]},
y_buffer, y_offset, y_inc,
queue, event);
return static_cast<StatusCode>(status);
@@ -167,10 +297,10 @@ StatusCode CLBlastChemv(const Layout layout, const Triangle triangle,
auto status = clblast::Hemv(static_cast<clblast::Layout>(layout),
static_cast<clblast::Triangle>(triangle),
n,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
x_buffer, x_offset, x_inc,
- clblast::float2{beta.s[0], beta.s[1]},
+ float2{beta.s[0], beta.s[1]},
y_buffer, y_offset, y_inc,
queue, event);
return static_cast<StatusCode>(status);
@@ -186,10 +316,10 @@ StatusCode CLBlastZhemv(const Layout layout, const Triangle triangle,
auto status = clblast::Hemv(static_cast<clblast::Layout>(layout),
static_cast<clblast::Triangle>(triangle),
n,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
x_buffer, x_offset, x_inc,
- clblast::double2{beta.s[0], beta.s[1]},
+ double2{beta.s[0], beta.s[1]},
y_buffer, y_offset, y_inc,
queue, event);
return static_cast<StatusCode>(status);
@@ -292,10 +422,10 @@ StatusCode CLBlastCgemm(const Layout layout, const Transpose a_transpose, const
static_cast<clblast::Transpose>(a_transpose),
static_cast<clblast::Transpose>(b_transpose),
m, n, k,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
- clblast::float2{beta.s[0], beta.s[1]},
+ float2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -312,10 +442,10 @@ StatusCode CLBlastZgemm(const Layout layout, const Transpose a_transpose, const
static_cast<clblast::Transpose>(a_transpose),
static_cast<clblast::Transpose>(b_transpose),
m, n, k,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
- clblast::double2{beta.s[0], beta.s[1]},
+ double2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -374,10 +504,10 @@ StatusCode CLBlastCsymm(const Layout layout, const Side side, const Triangle tri
static_cast<clblast::Side>(side),
static_cast<clblast::Triangle>(triangle),
m, n,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
- clblast::float2{beta.s[0], beta.s[1]},
+ float2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -394,10 +524,10 @@ StatusCode CLBlastZsymm(const Layout layout, const Side side, const Triangle tri
static_cast<clblast::Side>(side),
static_cast<clblast::Triangle>(triangle),
m, n,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
- clblast::double2{beta.s[0], beta.s[1]},
+ double2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -416,10 +546,10 @@ StatusCode CLBlastChemm(const Layout layout, const Side side, const Triangle tri
static_cast<clblast::Side>(side),
static_cast<clblast::Triangle>(triangle),
m, n,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
- clblast::float2{beta.s[0], beta.s[1]},
+ float2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -436,10 +566,10 @@ StatusCode CLBlastZhemm(const Layout layout, const Side side, const Triangle tri
static_cast<clblast::Side>(side),
static_cast<clblast::Triangle>(triangle),
m, n,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
- clblast::double2{beta.s[0], beta.s[1]},
+ double2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -493,9 +623,9 @@ StatusCode CLBlastCsyrk(const Layout layout, const Triangle triangle, const Tran
static_cast<clblast::Triangle>(triangle),
static_cast<clblast::Transpose>(a_transpose),
n, k,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
- clblast::float2{beta.s[0], beta.s[1]},
+ float2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -511,9 +641,9 @@ StatusCode CLBlastZsyrk(const Layout layout, const Triangle triangle, const Tran
static_cast<clblast::Triangle>(triangle),
static_cast<clblast::Transpose>(a_transpose),
n, k,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
- clblast::double2{beta.s[0], beta.s[1]},
+ double2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -610,10 +740,10 @@ StatusCode CLBlastCsyr2k(const Layout layout, const Triangle triangle, const Tra
static_cast<clblast::Triangle>(triangle),
static_cast<clblast::Transpose>(ab_transpose),
n, k,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
- clblast::float2{beta.s[0], beta.s[1]},
+ float2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -630,10 +760,10 @@ StatusCode CLBlastZsyr2k(const Layout layout, const Triangle triangle, const Tra
static_cast<clblast::Triangle>(triangle),
static_cast<clblast::Transpose>(ab_transpose),
n, k,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
- clblast::double2{beta.s[0], beta.s[1]},
+ double2{beta.s[0], beta.s[1]},
c_buffer, c_offset, c_ld,
queue, event);
return static_cast<StatusCode>(status);
@@ -652,7 +782,7 @@ StatusCode CLBlastCher2k(const Layout layout, const Triangle triangle, const Tra
static_cast<clblast::Triangle>(triangle),
static_cast<clblast::Transpose>(ab_transpose),
n, k,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
beta,
@@ -672,7 +802,7 @@ StatusCode CLBlastZher2k(const Layout layout, const Triangle triangle, const Tra
static_cast<clblast::Triangle>(triangle),
static_cast<clblast::Transpose>(ab_transpose),
n, k,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
beta,
@@ -730,7 +860,7 @@ StatusCode CLBlastCtrmm(const Layout layout, const Side side, const Triangle tri
static_cast<clblast::Transpose>(a_transpose),
static_cast<clblast::Diagonal>(diagonal),
m, n,
- clblast::float2{alpha.s[0], alpha.s[1]},
+ float2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
queue, event);
@@ -748,7 +878,7 @@ StatusCode CLBlastZtrmm(const Layout layout, const Side side, const Triangle tri
static_cast<clblast::Transpose>(a_transpose),
static_cast<clblast::Diagonal>(diagonal),
m, n,
- clblast::double2{alpha.s[0], alpha.s[1]},
+ double2{alpha.s[0], alpha.s[1]},
a_buffer, a_offset, a_ld,
b_buffer, b_offset, b_ld,
queue, event);