From 6a78d9887c13c9ccf205a2fe4bcd03c18ca89fbc Mon Sep 17 00:00:00 2001 From: Bernhard Manfred Gruber Date: Thu, 23 Dec 2021 18:29:00 +0100 Subject: [PATCH] add BitPacked mappings with compile time bits --- examples/daxpy/daxpy.cpp | 54 ++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/examples/daxpy/daxpy.cpp b/examples/daxpy/daxpy.cpp index 55248217ea..53531f7d81 100644 --- a/examples/daxpy/daxpy.cpp +++ b/examples/daxpy/daxpy.cpp @@ -15,6 +15,9 @@ constexpr auto alpha = 3.14; void daxpy(std::ofstream& plotFile) { + auto title = "std::vector"; + std::cout << title << "\n"; + Stopwatch watch; auto x = std::vector(PROBLEM_SIZE); auto y = std::vector(PROBLEM_SIZE); @@ -38,13 +41,14 @@ void daxpy(std::ofstream& plotFile) z[i] = alpha * x[i] + y[i]; sum = watch.printAndReset("daxpy"); } - plotFile << "\"std::vector\"\t" << sum / STEPS << '\n'; + plotFile << std::quoted(title) << "\t" << sum / STEPS << '\n'; } template -void daxpy_llama(std::string mappingName, Mapping mapping, std::ofstream& plotFile) +void daxpy_llama(std::string mappingName, std::ofstream& plotFile, Mapping mapping) { auto title = "LLAMA " + std::move(mappingName); + std::cout << title << "\n"; Stopwatch watch; auto x = llama::allocViewUninitialized(mapping); @@ -79,6 +83,16 @@ try const char* affinity = std::getenv("GOMP_CPU_AFFINITY"); // NOLINT(concurrency-mt-unsafe) affinity = affinity == nullptr ? "NONE - PLEASE PIN YOUR THREADS!" : affinity; + fmt::print( + R"({}Mi doubles ({}MiB) +Threads: {} +Affinity: {} +)", + PROBLEM_SIZE / 1024 / 1024, + PROBLEM_SIZE * sizeof(double) / 1024 / 1024, + numThreads, + affinity); + std::ofstream plotFile{"daxpy.sh"}; plotFile.exceptions(std::ios::badbit | std::ios::failbit); plotFile << fmt::format( @@ -101,24 +115,42 @@ set ylabel "runtime [s]" daxpy(plotFile); const auto extents = llama::ArrayExtents{PROBLEM_SIZE}; - daxpy_llama("AoS", llama::mapping::AoS{extents, double{}}, plotFile); - daxpy_llama("SoA", llama::mapping::SoA{extents, double{}}, plotFile); + daxpy_llama("AoS", plotFile, llama::mapping::AoS{extents, double{}}); + daxpy_llama("SoA", plotFile, llama::mapping::SoA{extents, double{}}); daxpy_llama( "Bytesplit", + plotFile, llama::mapping::Bytesplit, double, llama::mapping::PreconfiguredAoS<>::type>{ - extents}, - plotFile); + extents}); daxpy_llama( "ChangeType D->F", + plotFile, llama::mapping::ChangeType< llama::ArrayExtentsDynamic<1>, double, llama::mapping::PreconfiguredAoS<>::type, - boost::mp11::mp_list>>{extents}, - plotFile); - daxpy_llama("Bitpack 52^{11}", llama::mapping::BitPackedFloatSoA{extents, 11, 52, double{}}, plotFile); - daxpy_llama("Bitpack 23^{8}", llama::mapping::BitPackedFloatSoA{extents, 8, 23, double{}}, plotFile); - daxpy_llama("Bitpack 10^{5}", llama::mapping::BitPackedFloatSoA{extents, 5, 10, double{}}, plotFile); + boost::mp11::mp_list>>{extents}); + daxpy_llama("Bitpack 52^{11}", plotFile, llama::mapping::BitPackedFloatSoA{extents, 11, 52, double{}}); + daxpy_llama( + "Bitpack 52^{11} CT", + plotFile, + llama::mapping:: + BitPackedFloatSoA, double, llama::Constant<11>, llama::Constant<52>>{ + extents}); + daxpy_llama("Bitpack 23^{8}", plotFile, llama::mapping::BitPackedFloatSoA{extents, 8, 23, double{}}); + daxpy_llama( + "Bitpack 23^{8} CT", + plotFile, + llama::mapping:: + BitPackedFloatSoA, double, llama::Constant<8>, llama::Constant<23>>{ + extents}); + daxpy_llama("Bitpack 10^{5}", plotFile, llama::mapping::BitPackedFloatSoA{extents, 5, 10, double{}}); + daxpy_llama( + "Bitpack 10^{5} CT", + plotFile, + llama::mapping:: + BitPackedFloatSoA, double, llama::Constant<5>, llama::Constant<10>>{ + extents}); plotFile << R"(EOD plot $data using 2:xtic(1)