From 7f14b11f1e240f12f5f6bf93cbbeab26001e9a5c Mon Sep 17 00:00:00 2001 From: Cedric Nugteren Date: Sun, 5 Mar 2017 11:13:47 +0100 Subject: Changed the way the test-data is generated: now using a single MT generator and distribution for all data --- src/tuning/tuning.hpp | 15 +++++++++------ src/utilities/utilities.cpp | 37 ++++++++++++------------------------- src/utilities/utilities.hpp | 3 ++- 3 files changed, 23 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/tuning/tuning.hpp b/src/tuning/tuning.hpp index 1dd76894..7060fc9f 100644 --- a/src/tuning/tuning.hpp +++ b/src/tuning/tuning.hpp @@ -17,6 +17,7 @@ #include #include +#include #include @@ -77,12 +78,14 @@ void Tuner(int argc, char* argv[]) { auto b_mat = std::vector(C::GetSizeB(args)); auto c_mat = std::vector(C::GetSizeC(args)); auto temp = std::vector(C::GetSizeTemp(args)); - PopulateVector(x_vec, kSeed); - PopulateVector(y_vec, kSeed); - PopulateVector(a_mat, kSeed); - PopulateVector(b_mat, kSeed); - PopulateVector(c_mat, kSeed); - PopulateVector(temp, kSeed); + std::mt19937 mt(kSeed); + std::uniform_real_distribution dist(kTestDataLowerLimit, kTestDataUpperLimit); + PopulateVector(x_vec, mt, dist); + PopulateVector(y_vec, mt, dist); + PopulateVector(a_mat, mt, dist); + PopulateVector(b_mat, mt, dist); + PopulateVector(c_mat, mt, dist); + PopulateVector(temp, mt, dist); // Initializes the tuner for the chosen device cltune::Tuner tuner(args.platform_id, args.device_id); diff --git a/src/utilities/utilities.cpp b/src/utilities/utilities.cpp index d68cc1a6..89265bd6 100644 --- a/src/utilities/utilities.cpp +++ b/src/utilities/utilities.cpp @@ -326,42 +326,29 @@ unsigned int GetRandomSeed() { // Create a random number generator and populates a vector with samples from a random distribution template -void PopulateVector(std::vector &vector, const unsigned int seed) { - auto lower_limit = static_cast(kTestDataLowerLimit); - auto upper_limit = static_cast(kTestDataUpperLimit); - std::mt19937 mt(seed); - std::uniform_real_distribution dist(lower_limit, upper_limit); - for (auto &element: vector) { element = dist(mt); } +void PopulateVector(std::vector &vector, std::mt19937 &mt, std::uniform_real_distribution &dist) { + for (auto &element: vector) { element = static_cast(dist(mt)); } } -template void PopulateVector(std::vector&, const unsigned int); -template void PopulateVector(std::vector&, const unsigned int); +template void PopulateVector(std::vector&, std::mt19937&, std::uniform_real_distribution&); +template void PopulateVector(std::vector&, std::mt19937&, std::uniform_real_distribution&); // Specialized versions of the above for complex data-types template <> -void PopulateVector(std::vector &vector, const unsigned int seed) { - auto lower_limit = static_cast(kTestDataLowerLimit); - auto upper_limit = static_cast(kTestDataUpperLimit); - std::mt19937 mt(seed); - std::uniform_real_distribution dist(lower_limit, upper_limit); - for (auto &element: vector) { element.real(dist(mt)); element.imag(dist(mt)); } +void PopulateVector(std::vector &vector, std::mt19937 &mt, std::uniform_real_distribution &dist) { + for (auto &element: vector) { + element.real(static_cast(dist(mt))); + element.imag(static_cast(dist(mt))); + } } template <> -void PopulateVector(std::vector &vector, const unsigned int seed) { - auto lower_limit = static_cast(kTestDataLowerLimit); - auto upper_limit = static_cast(kTestDataUpperLimit); - std::mt19937 mt(seed); - std::uniform_real_distribution dist(lower_limit, upper_limit); +void PopulateVector(std::vector &vector, std::mt19937 &mt, std::uniform_real_distribution &dist) { for (auto &element: vector) { element.real(dist(mt)); element.imag(dist(mt)); } } // Specialized versions of the above for half-precision template <> -void PopulateVector(std::vector &vector, const unsigned int seed) { - const auto lower_limit = static_cast(kTestDataLowerLimit); - const auto upper_limit = static_cast(kTestDataUpperLimit); - std::mt19937 mt(seed); - std::uniform_real_distribution dist(lower_limit, upper_limit); - for (auto &element: vector) { element = FloatToHalf(dist(mt)); } +void PopulateVector(std::vector &vector, std::mt19937 &mt, std::uniform_real_distribution &dist) { + for (auto &element: vector) { element = FloatToHalf(static_cast(dist(mt))); } } // ================================================================================================= diff --git a/src/utilities/utilities.hpp b/src/utilities/utilities.hpp index 3c9be6a2..330db597 100644 --- a/src/utilities/utilities.hpp +++ b/src/utilities/utilities.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #include "clpp11.hpp" #include "clblast.h" @@ -234,7 +235,7 @@ constexpr auto kTestDataUpperLimit = 2.0; // Populates a vector with random data template -void PopulateVector(std::vector &vector, const unsigned int seed); +void PopulateVector(std::vector &vector, std::mt19937 &mt, std::uniform_real_distribution &dist); // ================================================================================================= -- cgit v1.2.3