// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2016 // Mehdi Goli Codeplay Software Ltd. // Ralph Potter Codeplay Software Ltd. // Luke Iwanski Codeplay Software Ltd. // Contact: // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #define EIGEN_TEST_NO_LONGDOUBLE #define EIGEN_TEST_NO_COMPLEX #define EIGEN_DEFAULT_DENSE_INDEX_TYPE int64_t #define EIGEN_USE_SYCL #include "main.h" #include template static void test_sycl_random_uniform(const Eigen::SyclDevice& sycl_device) { Tensor out(72,97); out.setZero(); std::size_t out_bytes = out.size() * sizeof(DataType); IndexType sizeDim0 = 72; IndexType sizeDim1 = 97; array tensorRange = {{sizeDim0, sizeDim1}}; DataType* d_out = static_cast(sycl_device.allocate(out_bytes)); TensorMap> gpu_out(d_out, tensorRange); gpu_out.device(sycl_device)=gpu_out.random(); sycl_device.memcpyDeviceToHost(out.data(), d_out,out_bytes); for(IndexType i=1; i void test_sycl_random_normal(const Eigen::SyclDevice& sycl_device) { Tensor out(72,97); out.setZero(); std::size_t out_bytes = out.size() * sizeof(DataType); IndexType sizeDim0 = 72; IndexType sizeDim1 = 97; array tensorRange = {{sizeDim0, sizeDim1}}; DataType* d_out = static_cast(sycl_device.allocate(out_bytes)); TensorMap> gpu_out(d_out, tensorRange); Eigen::internal::NormalRandomGenerator gen(true); gpu_out.device(sycl_device)=gpu_out.random(gen); sycl_device.memcpyDeviceToHost(out.data(), d_out,out_bytes); for(IndexType i=1; i void sycl_random_test_per_device(dev_Selector s){ QueueInterface queueInterface(s); auto sycl_device = Eigen::SyclDevice(&queueInterface); test_sycl_random_uniform(sycl_device); test_sycl_random_uniform(sycl_device); test_sycl_random_normal(sycl_device); test_sycl_random_normal(sycl_device); } EIGEN_DECLARE_TEST(cxx11_tensor_random_sycl) { for (const auto& device :Eigen::get_sycl_supported_devices()) { CALL_SUBTEST(sycl_random_test_per_device(device)); #ifdef EIGEN_SYCL_DOUBLE_SUPPORT CALL_SUBTEST(sycl_random_test_per_device(device)); #endif } }