#include "../c++/data.hpp" #include namespace sch { using namespace saw::schema; } template void inner_work(){ std::random_device r; std::default_random_engine e1{r()}; std::uniform_real_distribution<> dis{-3.0,-1.0}; acpp::sycl::queue sycl_q; acpp::sycl::event ev; auto time_eval = [](uint64_t & current_min_time, acpp::sycl::event& evt){ auto end = evt.get_profiling_info(); auto start = evt.get_profiling_info(); uint64_t curr_time = (end-start); current_min_time = std::min(curr_time, current_min_time); }; constexpr uint64_t arithmetic_intensity = 1024ul; /** * Warmup */ std::cout<<"Warming up ..."<, encode::Sycl> dat{{{test_size}},sycl_q}; data>, encode::Sycl> dat_ref{dat}; auto dat_ptr = dat_ref.get_internal_data(); for(uint64_t i = 0; i < test_size; ++i){ double gen_num = dis(e1); dat.at({{i}}) = {static_cast(gen_num)}; } sycl_q.parallel_for([=](acpp::sycl::id<1> idx){ data foo = {dat_ptr[idx[0u]].get()}; for(uint64_t i = 0; i < arithmetic_intensity; ++i){ if( foo.get() == 1.1e12 ){ dat_ptr[idx[0u]] = {}; } foo = foo + foo * saw::data{1.7342345}; } dat_ptr[idx[0u]] = foo; }).wait(); } } int main(){ using namespace saw; inner_work(); inner_work(); inner_work>(); return 0; }