diff options
author | cnugteren <web@cedricnugteren.nl> | 2016-04-13 21:44:49 -0600 |
---|---|---|
committer | cnugteren <web@cedricnugteren.nl> | 2016-04-13 21:44:49 -0600 |
commit | e0497807e297e38884efae67a0109a160dc693b7 (patch) | |
tree | de692ac023bca1b6d75e2251ecce7d7fa771ccbb /test | |
parent | a61724ece50ab895a67bc15ae3a132d0ecbe61bc (diff) |
Added prototype for xASUM routines
Diffstat (limited to 'test')
-rw-r--r-- | test/correctness/routines/level1/xasum.cc | 28 | ||||
-rw-r--r-- | test/performance/routines/level1/xasum.cc | 35 | ||||
-rw-r--r-- | test/wrapper_cblas.h | 26 | ||||
-rw-r--r-- | test/wrapper_clblas.h | 68 |
4 files changed, 157 insertions, 0 deletions
diff --git a/test/correctness/routines/level1/xasum.cc b/test/correctness/routines/level1/xasum.cc new file mode 100644 index 00000000..5ec20596 --- /dev/null +++ b/test/correctness/routines/level1/xasum.cc @@ -0,0 +1,28 @@ + +// ================================================================================================= +// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This +// project loosely follows the Google C++ styleguide and uses a tab-size of two spaces and a max- +// width of 100 characters per line. +// +// Author(s): +// Cedric Nugteren <www.cedricnugteren.nl> +// +// ================================================================================================= + +#include "correctness/testblas.h" +#include "routines/level1/xasum.h" + +// Shortcuts to the clblast namespace +using float2 = clblast::float2; +using double2 = clblast::double2; + +// Main function (not within the clblast namespace) +int main(int argc, char *argv[]) { + clblast::RunTests<clblast::TestXasum<float>, float, float>(argc, argv, false, "SASUM"); + clblast::RunTests<clblast::TestXasum<double>, double, double>(argc, argv, true, "DASUM"); + clblast::RunTests<clblast::TestXasum<float2>, float2, float2>(argc, argv, true, "ScASUM"); + clblast::RunTests<clblast::TestXasum<double2>, double2, double2>(argc, argv, true, "DzASUM"); + return 0; +} + +// ================================================================================================= diff --git a/test/performance/routines/level1/xasum.cc b/test/performance/routines/level1/xasum.cc new file mode 100644 index 00000000..2680966e --- /dev/null +++ b/test/performance/routines/level1/xasum.cc @@ -0,0 +1,35 @@ + +// ================================================================================================= +// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This +// project loosely follows the Google C++ styleguide and uses a tab-size of two spaces and a max- +// width of 100 characters per line. +// +// Author(s): +// Cedric Nugteren <www.cedricnugteren.nl> +// +// ================================================================================================= + +#include "performance/client.h" +#include "routines/level1/xasum.h" + +// Shortcuts to the clblast namespace +using float2 = clblast::float2; +using double2 = clblast::double2; + +// Main function (not within the clblast namespace) +int main(int argc, char *argv[]) { + switch(clblast::GetPrecision(argc, argv, clblast::Precision::kSingle)) { + case clblast::Precision::kHalf: throw std::runtime_error("Unsupported precision mode"); + case clblast::Precision::kSingle: + clblast::RunClient<clblast::TestXasum<float>, float, float>(argc, argv); break; + case clblast::Precision::kDouble: + clblast::RunClient<clblast::TestXasum<double>, double, double>(argc, argv); break; + case clblast::Precision::kComplexSingle: + clblast::RunClient<clblast::TestXasum<float2>, float2, float2>(argc, argv); break; + case clblast::Precision::kComplexDouble: + clblast::RunClient<clblast::TestXasum<double2>, double2, double2>(argc, argv); break; + } + return 0; +} + +// ================================================================================================= diff --git a/test/wrapper_cblas.h b/test/wrapper_cblas.h index dec272b0..af0eec9b 100644 --- a/test/wrapper_cblas.h +++ b/test/wrapper_cblas.h @@ -345,6 +345,32 @@ void cblasXnrm2(const size_t n, reinterpret_cast<const double*>(&x_buffer[x_offset]), static_cast<int>(x_inc)); } +// Forwards the Netlib BLAS calls for SASUM/DASUM/ScASUM/DzASUM +void cblasXasum(const size_t n, + std::vector<float>& asum_buffer, const size_t asum_offset, + const std::vector<float>& x_buffer, const size_t x_offset, const size_t x_inc) { + asum_buffer[asum_offset] = cblas_sasum(n, + &x_buffer[x_offset], static_cast<int>(x_inc)); +} +void cblasXasum(const size_t n, + std::vector<double>& asum_buffer, const size_t asum_offset, + const std::vector<double>& x_buffer, const size_t x_offset, const size_t x_inc) { + asum_buffer[asum_offset] = cblas_dasum(n, + &x_buffer[x_offset], static_cast<int>(x_inc)); +} +void cblasXasum(const size_t n, + std::vector<float2>& asum_buffer, const size_t asum_offset, + const std::vector<float2>& x_buffer, const size_t x_offset, const size_t x_inc) { + asum_buffer[asum_offset] = cblas_scasum(n, + reinterpret_cast<const float*>(&x_buffer[x_offset]), static_cast<int>(x_inc)); +} +void cblasXasum(const size_t n, + std::vector<double2>& asum_buffer, const size_t asum_offset, + const std::vector<double2>& x_buffer, const size_t x_offset, const size_t x_inc) { + asum_buffer[asum_offset] = cblas_dzasum(n, + reinterpret_cast<const double*>(&x_buffer[x_offset]), static_cast<int>(x_inc)); +} + // ================================================================================================= // BLAS level-2 (matrix-vector) routines // ================================================================================================= diff --git a/test/wrapper_clblas.h b/test/wrapper_clblas.h index 89b708b8..09b3310b 100644 --- a/test/wrapper_clblas.h +++ b/test/wrapper_clblas.h @@ -558,6 +558,74 @@ clblasStatus clblasXnrm2<double2>(const size_t n, num_queues, queues, num_wait_events, wait_events, events); } +// Forwards the clBLAS calls for SASUM/DASUM/ScASUM/DzASUM +template <typename T> +clblasStatus clblasXasum(const size_t n, + cl_mem asum_buffer, const size_t asum_offset, + const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, + cl_uint num_queues, cl_command_queue *queues, + cl_uint num_wait_events, const cl_event *wait_events, cl_event *events); +template <> +clblasStatus clblasXasum<float>(const size_t n, + cl_mem asum_buffer, const size_t asum_offset, + const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, + cl_uint num_queues, cl_command_queue *queues, + cl_uint num_wait_events, const cl_event *wait_events, cl_event *events) { + auto queue = Queue(queues[0]); + auto context = queue.GetContext(); + auto scratch_buffer = Buffer<float>(context, n); + return clblasSasum(n, + asum_buffer, asum_offset, + x_buffer, x_offset, static_cast<int>(x_inc), + scratch_buffer(), + num_queues, queues, num_wait_events, wait_events, events); +} +template <> +clblasStatus clblasXasum<double>(const size_t n, + cl_mem asum_buffer, const size_t asum_offset, + const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, + cl_uint num_queues, cl_command_queue *queues, + cl_uint num_wait_events, const cl_event *wait_events, cl_event *events) { + auto queue = Queue(queues[0]); + auto context = queue.GetContext(); + auto scratch_buffer = Buffer<double>(context, n); + return clblasDasum(n, + asum_buffer, asum_offset, + x_buffer, x_offset, static_cast<int>(x_inc), + scratch_buffer(), + num_queues, queues, num_wait_events, wait_events, events); +} +template <> +clblasStatus clblasXasum<float2>(const size_t n, + cl_mem asum_buffer, const size_t asum_offset, + const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, + cl_uint num_queues, cl_command_queue *queues, + cl_uint num_wait_events, const cl_event *wait_events, cl_event *events) { + auto queue = Queue(queues[0]); + auto context = queue.GetContext(); + auto scratch_buffer = Buffer<float2>(context, n); + return clblasScasum(n, + asum_buffer, asum_offset, + x_buffer, x_offset, static_cast<int>(x_inc), + scratch_buffer(), + num_queues, queues, num_wait_events, wait_events, events); +} +template <> +clblasStatus clblasXasum<double2>(const size_t n, + cl_mem asum_buffer, const size_t asum_offset, + const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, + cl_uint num_queues, cl_command_queue *queues, + cl_uint num_wait_events, const cl_event *wait_events, cl_event *events) { + auto queue = Queue(queues[0]); + auto context = queue.GetContext(); + auto scratch_buffer = Buffer<double2>(context, n); + return clblasDzasum(n, + asum_buffer, asum_offset, + x_buffer, x_offset, static_cast<int>(x_inc), + scratch_buffer(), + num_queues, queues, num_wait_events, wait_events, events); +} + // ================================================================================================= // BLAS level-2 (matrix-vector) routines // ================================================================================================= |