mirror of
https://github.com/CNugteren/CLBlast.git
synced 2024-07-02 12:26:57 +02:00
Fixed the tests of OMATCOPY to include proper complex conjugation
This commit is contained in:
parent
713d0f96b3
commit
391e5757bd
|
@ -45,7 +45,9 @@ StatusCode RunReference(const Arguments<T> &args, BuffersHost<T> &buffers_host)
|
||||||
const auto b_two = (b_rotated) ? id1 : id2;
|
const auto b_two = (b_rotated) ? id1 : id2;
|
||||||
const auto a_index = a_two * args.a_ld + a_one + args.a_offset;
|
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;
|
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;
|
return StatusCode::kSuccess;
|
||||||
|
|
|
@ -31,6 +31,16 @@ template <> bool IsCloseToZero(const double2 value) { return IsCloseToZero(value
|
||||||
|
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
|
// Performs a complex conjugate if complex
|
||||||
|
template <typename T> 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 <typename T, typename U>
|
template <typename T, typename U>
|
||||||
void DeviceToHost(const Arguments<U> &args, Buffers<T> &buffers, BuffersHost<T> &buffers_host,
|
void DeviceToHost(const Arguments<U> &args, Buffers<T> &buffers, BuffersHost<T> &buffers_host,
|
||||||
Queue &queue, const std::vector<std::string> &names) {
|
Queue &queue, const std::vector<std::string> &names) {
|
||||||
|
|
|
@ -70,6 +70,10 @@ struct BuffersHost {
|
||||||
|
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
|
template <typename T> T ComplexConjugate(const T value);
|
||||||
|
|
||||||
|
// =================================================================================================
|
||||||
|
|
||||||
// Converts a value (e.g. an integer) to a string. This also covers special cases for CLBlast
|
// 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.
|
// data-types such as the Layout and Transpose data-types.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
Loading…
Reference in a new issue