#include "mixed_precision.hpp" saw::interface listen_mixed_precision(cl::sycl::event& mixed_ev, cl::sycl::event& float64_ev, cl::sycl::event& float32_ev){ return { /** * Mixed */ [&](saw::data& in, cl::sycl::queue* cmd) -> saw::error_or { mixed_ev = cmd->submit([&](cl::sycl::handler& h){ auto acc_buff = in.template access(h); h.parallel_for(cl::sycl::range<1>(in.size()), [=] (cl::sycl::id<1> it){ acc_buff[0u].at(it[0u]) = acc_buff[0u].at(it[0u]) * saw::data{2.0}; }); }); return saw::void_t{}; }, [&](saw::data& in, cl::sycl::queue* cmd) -> saw::error_or { float64_ev = cmd->submit([&](cl::sycl::handler& h){ auto acc_buff = in.template access(h); h.parallel_for(cl::sycl::range<1>(in.size()), [=] (cl::sycl::id<1> it){ acc_buff[0u].at(it[0u]) = acc_buff[0u].at(it[0u]) * saw::data{2.0}; }); }); return saw::void_t{}; }, [&](saw::data& in, cl::sycl::queue* cmd) -> saw::error_or { float32_ev = cmd->submit([&](cl::sycl::handler& h){ auto acc_buff = in.template access(h); h.parallel_for(cl::sycl::range<1>(in.size()), [=] (cl::sycl::id<1> it){ acc_buff[0u].at(it[0u]) = acc_buff[0u].at(it[0u]) * saw::data{2.0f}; }); }); return saw::void_t{}; } }; }