From 391e5757bdfbd37b7d15b6834a90749813a93369 Mon Sep 17 00:00:00 2001 From: Cedric Nugteren Date: Tue, 31 Jul 2018 21:44:28 +0200 Subject: Fixed the tests of OMATCOPY to include proper complex conjugation --- test/routines/levelx/xomatcopy.hpp | 4 +++- test/test_utilities.cpp | 10 ++++++++++ test/test_utilities.hpp | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/routines/levelx/xomatcopy.hpp b/test/routines/levelx/xomatcopy.hpp index ea35dbe2..4a93b29d 100644 --- a/test/routines/levelx/xomatcopy.hpp +++ b/test/routines/levelx/xomatcopy.hpp @@ -45,7 +45,9 @@ StatusCode RunReference(const Arguments &args, BuffersHost &buffers_host) const auto b_two = (b_rotated) ? id1 : id2; const auto a_index = a_two * args.a_ld + a_one + args.a_offset; const auto b_index = b_two * args.b_ld + b_one + args.b_offset; - buffers_host.b_mat[b_index] = args.alpha * buffers_host.a_mat[a_index]; + auto a_value = buffers_host.a_mat[a_index]; + if (args.a_transpose == Transpose::kConjugate) { a_value = ComplexConjugate(a_value); } + buffers_host.b_mat[b_index] = args.alpha * a_value; } } return StatusCode::kSuccess; diff --git a/test/test_utilities.cpp b/test/test_utilities.cpp index 59ec949d..c43200b9 100644 --- a/test/test_utilities.cpp +++ b/test/test_utilities.cpp @@ -31,6 +31,16 @@ template <> bool IsCloseToZero(const double2 value) { return IsCloseToZero(value // ================================================================================================= +// Performs a complex conjugate if complex +template T ComplexConjugate(const T value) { return value; } +template half ComplexConjugate(const half); +template float ComplexConjugate(const float); +template double ComplexConjugate(const double); +template <> float2 ComplexConjugate(const float2 value) { return float2{value.real(), -value.imag()}; } +template <> double2 ComplexConjugate(const double2 value) { return double2{value.real(), -value.imag()}; } + +// ================================================================================================= + template void DeviceToHost(const Arguments &args, Buffers &buffers, BuffersHost &buffers_host, Queue &queue, const std::vector &names) { diff --git a/test/test_utilities.hpp b/test/test_utilities.hpp index 42660bdb..7bf5e65f 100644 --- a/test/test_utilities.hpp +++ b/test/test_utilities.hpp @@ -70,6 +70,10 @@ struct BuffersHost { // ================================================================================================= +template T ComplexConjugate(const T value); + +// ================================================================================================= + // Converts a value (e.g. an integer) to a string. This also covers special cases for CLBlast // data-types such as the Layout and Transpose data-types. template -- cgit v1.2.3