summaryrefslogtreecommitdiff
path: root/src/clblast_netlib_c.cpp
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2017-05-12 20:01:33 -0700
committerCedric Nugteren <web@cedricnugteren.nl>2017-05-12 20:01:33 -0700
commitf151e56daa617e3327826f06f0765d1673fa8cfd (patch)
tree66396978988720155adf4f6eb21b921758ccd8aa /src/clblast_netlib_c.cpp
parent86e8df60f1598760511b059b42a9e4f9dddfa150 (diff)
Added the IxAMIN routines: absolute minimum version of IxAMAX
Diffstat (limited to 'src/clblast_netlib_c.cpp')
-rw-r--r--src/clblast_netlib_c.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/clblast_netlib_c.cpp b/src/clblast_netlib_c.cpp
index 3fbabd43..d3b9b5e6 100644
--- a/src/clblast_netlib_c.cpp
+++ b/src/clblast_netlib_c.cpp
@@ -1191,6 +1191,96 @@ int cblas_izamax(const int n,
return imax[0];
}
+// AMIN
+int cblas_isamin(const int n,
+ const float* x, const int x_inc) {
+ auto device = get_device();
+ auto context = clblast::Context(device);
+ auto queue = clblast::Queue(context, device);
+ const auto x_size = n * x_inc;
+ const auto imin_size = 1;
+ auto x_buffer = clblast::Buffer<float>(context, x_size);
+ auto imin_buffer = clblast::Buffer<int>(context, imin_size);
+ x_buffer.Write(queue, x_size, reinterpret_cast<const float*>(x));
+ auto queue_cl = queue();
+ auto s = clblast::Amin<float>(n,
+ imin_buffer(), 0,
+ x_buffer(), 0, x_inc,
+ &queue_cl);
+ if (s != clblast::StatusCode::kSuccess) {
+ throw std::runtime_error("CLBlast returned with error code " + clblast::ToString(s));
+ }
+ int imin[imin_size];
+ imin_buffer.Read(queue, imin_size, reinterpret_cast<int*>(imin));
+ return imin[0];
+}
+int cblas_idamin(const int n,
+ const double* x, const int x_inc) {
+ auto device = get_device();
+ auto context = clblast::Context(device);
+ auto queue = clblast::Queue(context, device);
+ const auto x_size = n * x_inc;
+ const auto imin_size = 1;
+ auto x_buffer = clblast::Buffer<double>(context, x_size);
+ auto imin_buffer = clblast::Buffer<int>(context, imin_size);
+ x_buffer.Write(queue, x_size, reinterpret_cast<const double*>(x));
+ auto queue_cl = queue();
+ auto s = clblast::Amin<double>(n,
+ imin_buffer(), 0,
+ x_buffer(), 0, x_inc,
+ &queue_cl);
+ if (s != clblast::StatusCode::kSuccess) {
+ throw std::runtime_error("CLBlast returned with error code " + clblast::ToString(s));
+ }
+ int imin[imin_size];
+ imin_buffer.Read(queue, imin_size, reinterpret_cast<int*>(imin));
+ return imin[0];
+}
+int cblas_icamin(const int n,
+ const void* x, const int x_inc) {
+ auto device = get_device();
+ auto context = clblast::Context(device);
+ auto queue = clblast::Queue(context, device);
+ const auto x_size = n * x_inc;
+ const auto imin_size = 1;
+ auto x_buffer = clblast::Buffer<float2>(context, x_size);
+ auto imin_buffer = clblast::Buffer<int>(context, imin_size);
+ x_buffer.Write(queue, x_size, reinterpret_cast<const float2*>(x));
+ auto queue_cl = queue();
+ auto s = clblast::Amin<float2>(n,
+ imin_buffer(), 0,
+ x_buffer(), 0, x_inc,
+ &queue_cl);
+ if (s != clblast::StatusCode::kSuccess) {
+ throw std::runtime_error("CLBlast returned with error code " + clblast::ToString(s));
+ }
+ int imin[imin_size];
+ imin_buffer.Read(queue, imin_size, reinterpret_cast<int*>(imin));
+ return imin[0];
+}
+int cblas_izamin(const int n,
+ const void* x, const int x_inc) {
+ auto device = get_device();
+ auto context = clblast::Context(device);
+ auto queue = clblast::Queue(context, device);
+ const auto x_size = n * x_inc;
+ const auto imin_size = 1;
+ auto x_buffer = clblast::Buffer<double2>(context, x_size);
+ auto imin_buffer = clblast::Buffer<int>(context, imin_size);
+ x_buffer.Write(queue, x_size, reinterpret_cast<const double2*>(x));
+ auto queue_cl = queue();
+ auto s = clblast::Amin<double2>(n,
+ imin_buffer(), 0,
+ x_buffer(), 0, x_inc,
+ &queue_cl);
+ if (s != clblast::StatusCode::kSuccess) {
+ throw std::runtime_error("CLBlast returned with error code " + clblast::ToString(s));
+ }
+ int imin[imin_size];
+ imin_buffer.Read(queue, imin_size, reinterpret_cast<int*>(imin));
+ return imin[0];
+}
+
// MAX
int cblas_ismax(const int n,
const float* x, const int x_inc) {