From 91a58fe669623c80c08a625002e47a1938457c40 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Sat, 5 Jul 2025 12:05:14 +0200 Subject: Adding possible diverge --- modules/codec-json/tests/codec-json.cpp | 11 ++++ .../benchmarks/kernel_mixed_precision.cpp | 70 ++++++++++++++++++++++ modules/remote-sycl/benchmarks/mixed_precision.hpp | 12 ++++ 3 files changed, 93 insertions(+) diff --git a/modules/codec-json/tests/codec-json.cpp b/modules/codec-json/tests/codec-json.cpp index c5f08ec..ab33f5a 100644 --- a/modules/codec-json/tests/codec-json.cpp +++ b/modules/codec-json/tests/codec-json.cpp @@ -378,6 +378,17 @@ SAW_TEST("Struct Array Struct read and write"){ native.template get<"banana">() = {4u}; data json; + /** + * Usually I would do something like this + { + auto& banana = native.template get<"banana">(); + { + banana.at(0).get<"foo">().set(5); + banana.at(0).get<"bar">().set("baz"); + } + } + * But this also works. + */ native.template get<"banana">().at(0).get<"foo">().set(5); native.template get<"banana">().at(0).get<"bar">().set("baz"); diff --git a/modules/remote-sycl/benchmarks/kernel_mixed_precision.cpp b/modules/remote-sycl/benchmarks/kernel_mixed_precision.cpp index 2c87714..c71582e 100644 --- a/modules/remote-sycl/benchmarks/kernel_mixed_precision.cpp +++ b/modules/remote-sycl/benchmarks/kernel_mixed_precision.cpp @@ -63,3 +63,73 @@ saw::interface, saw::encode::Sycl, cl::sycl::queue*> listen_mixed_float_precision(cl::sycl::event& ev, uint64_t& arithmetic_intensity){ + return { + [&](saw::data>& in, cl::sycl::queue* cmd) -> saw::error_or { + auto in_size = in.size(); + + ev = cmd->submit([&](cl::sycl::handler& h){ + auto acc_buff = in.template access(h); + + h.parallel_for(cl::sycl::range<1>(in_size.get()), [=] (cl::sycl::id<1> it){ + + saw::data foo = {acc_buff[0u].at(it[0u]).get()}; + for(uint64_t i = 0; i < arithmetic_intensity; ++i){ + if( foo.get() == 1.1e12 ){ + acc_buff[0u].at(it[0u]) = 0.f; + } + foo = foo + foo * saw::data{1.7342345}; + } + acc_buff[0u].at(it[0u]) = foo; + }); + }); + return saw::void_t{}; + } + }; +} +saw::interface, saw::encode::Sycl, cl::sycl::queue*> listen_half_float_precision(cl::sycl::event& ev, uint64_t& arithmetic_intensity){ + return { + [&](saw::data>& in, cl::sycl::queue* cmd) -> saw::error_or { + auto in_size = in.size(); + float32_ev = cmd->submit([&](cl::sycl::handler& h){ + auto acc_buff = in.template access(h); + + h.parallel_for(cl::sycl::range<1>(in_size.get()), [=] (cl::sycl::id<1> it){ + saw::data foo = {acc_buff[0u].at(it[0u]).get()}; + for(uint64_t i = 0; i < arithmetic_intensity; ++i){ + if( foo == saw::data{1.1e12f} ){ + acc_buff[0u].at(it[0u]) = 0.f; + } + foo = foo + foo * saw::data{1.7342345f}; + } + acc_buff[0u].at(it[0u]) = foo; + }); + }); + return saw::void_t{}; + } + }; +} + +saw::interface, saw::encode::Sycl, cl::sycl::queue*> listen_full_precision(cl::sycl::event& ev, uint64_t& arithmetic_intensity){ + return { + [&](saw::data>& in, cl::sycl::queue* cmd) -> saw::error_or { + auto in_size = in.size(); + float64_ev = cmd->submit([&](cl::sycl::handler& h){ + auto acc_buff = in.template access(h); + + h.parallel_for(cl::sycl::range<1>(in_size.get()), [=] (cl::sycl::id<1> it){ + saw::data foo = {acc_buff[0u].at(it[0u]).get()}; + for(uint64_t i = 0; i < arithmetic_intensity; ++i){ + if( foo == saw::data{1.1e12} ){ + acc_buff[0u].at(it[0u]) = 0.f; + } + foo = foo +foo * saw::data{1.7342345}; + } + acc_buff[0u].at(it[0u]) = foo; + }); + }); + return saw::void_t{}; + } + }; +} diff --git a/modules/remote-sycl/benchmarks/mixed_precision.hpp b/modules/remote-sycl/benchmarks/mixed_precision.hpp index fc3fc46..e21a2e6 100644 --- a/modules/remote-sycl/benchmarks/mixed_precision.hpp +++ b/modules/remote-sycl/benchmarks/mixed_precision.hpp @@ -24,6 +24,18 @@ using MixedPrecisionBenchmarkInterface = Interface< Member, "float64">, Member, "float32"> >; + +/** + * This is more of a presentation + */ +template +using FloatPrecisionBenchmarkInterface = Interface< + Member, "float_arr"> +>; } saw::interface, cl::sycl::queue*> listen_mixed_precision(cl::sycl::event& mixed_ev, cl::sycl::event& float64_ev, cl::sycl::event& float32_ev, uint64_t& arithmetic_intensity); + +saw::interface, saw::encode::Sycl, cl::sycl::queue*> listen_mixed_float_precision(cl::sycl::event& ev, uint64_t& arithmetic_intensity); +saw::interface, saw::encode::Sycl, cl::sycl::queue*> listen_half_float_precision(cl::sycl::event& ev, uint64_t& arithmetic_intensity); +saw::interface, saw::encode::Sycl, cl::sycl::queue*> listen_full_precision(cl::sycl::event& ev, uint64_t& arithmetic_intensity); -- cgit v1.2.3