cxx11_tensor_device_sycl.cpp File Reference
#include "main.h"
#include "OffByOneScalar.h"
#include <unsupported/Eigen/CXX11/Tensor>
#include <stdint.h>
#include <iostream>

Macros

#define EIGEN_TEST_NO_LONGDOUBLE
 
#define EIGEN_TEST_NO_COMPLEX
 
#define EIGEN_DEFAULT_DENSE_INDEX_TYPE   int64_t
 
#define EIGEN_USE_SYCL
 

Functions

template<typename DataType , int DataLayout, typename IndexType >
void test_device_memory (const Eigen::SyclDevice &sycl_device)
 
template<typename DataType , int DataLayout, typename IndexType >
void test_device_exceptions (const Eigen::SyclDevice &sycl_device)
 
template<typename DataType >
void sycl_device_test_per_device (const cl::sycl::device &d)
 
 EIGEN_DECLARE_TEST (cxx11_tensor_device_sycl)
 

Macro Definition Documentation

◆ EIGEN_DEFAULT_DENSE_INDEX_TYPE

#define EIGEN_DEFAULT_DENSE_INDEX_TYPE   int64_t

◆ EIGEN_TEST_NO_COMPLEX

#define EIGEN_TEST_NO_COMPLEX

◆ EIGEN_TEST_NO_LONGDOUBLE

#define EIGEN_TEST_NO_LONGDOUBLE

◆ EIGEN_USE_SYCL

#define EIGEN_USE_SYCL

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( cxx11_tensor_device_sycl  )
84  {
85  for (const auto& device : Eigen::get_sycl_supported_devices()) {
86  CALL_SUBTEST(sycl_device_test_per_device<half>(device));
87  CALL_SUBTEST(sycl_device_test_per_device<float>(device));
89  }
90 }
Definition: OffByOneScalar.h:7
void sycl_device_test_per_device(const cl::sycl::device &d)
Definition: cxx11_tensor_device_sycl.cpp:72
#define CALL_SUBTEST(FUNC)
Definition: main.h:382

References CALL_SUBTEST, and sycl_device_test_per_device().

◆ sycl_device_test_per_device()

template<typename DataType >
void sycl_device_test_per_device ( const cl::sycl::device &  d)

this test throw an exception. enable it if you want to see the exception

this test throw an exception. enable it if you want to see the exception

72  {
73  std::cout << "Running on " << d.template get_info<cl::sycl::info::device::name>() << std::endl;
74  QueueInterface queueInterface(d);
75  auto sycl_device = Eigen::SyclDevice(&queueInterface);
76  test_device_memory<DataType, RowMajor, int64_t>(sycl_device);
77  test_device_memory<DataType, ColMajor, int64_t>(sycl_device);
79  // test_device_exceptions<DataType, RowMajor>(sycl_device);
81  // test_device_exceptions<DataType, ColMajor>(sycl_device);
82 }

Referenced by EIGEN_DECLARE_TEST().

◆ test_device_exceptions()

template<typename DataType , int DataLayout, typename IndexType >
void test_device_exceptions ( const Eigen::SyclDevice &  sycl_device)
55  {
56  VERIFY(sycl_device.ok());
57  IndexType sizeDim1 = 100;
58  array<IndexType, 1> tensorDims = {{sizeDim1}};
59  DataType* gpu_data = static_cast<DataType*>(sycl_device.allocate(sizeDim1 * sizeof(DataType)));
60  sycl_device.memset(gpu_data, 1, sizeDim1 * sizeof(DataType));
61 
64  out.device(sycl_device) = in / in.constant(0);
65 
66  sycl_device.synchronize();
67  VERIFY(!sycl_device.ok());
68  sycl_device.deallocate(gpu_data);
69 }
A tensor expression mapping an existing array of data.
Definition: TensorMap.h:33
#define VERIFY(a)
Definition: main.h:362
std::array< T, N > array
Definition: EmulateArray.h:231
std::ofstream out("Result.txt")

References out(), and VERIFY.

◆ test_device_memory()

template<typename DataType , int DataLayout, typename IndexType >
void test_device_memory ( const Eigen::SyclDevice &  sycl_device)
27  {
28  IndexType sizeDim1 = 100;
29  array<IndexType, 1> tensorRange = {{sizeDim1}};
32  DataType* gpu_in_data = static_cast<DataType*>(sycl_device.allocate(in.size() * sizeof(DataType)));
33 
34  // memset
35  memset(in1.data(), 1, in1.size() * sizeof(DataType));
36  sycl_device.memset(gpu_in_data, 1, in.size() * sizeof(DataType));
37  sycl_device.memcpyDeviceToHost(in.data(), gpu_in_data, in.size() * sizeof(DataType));
38  for (IndexType i = 0; i < in.size(); i++) {
39  VERIFY_IS_EQUAL(in(i), in1(i));
40  }
41 
42  // fill
43  DataType value = DataType(7);
44  std::fill_n(in1.data(), in1.size(), value);
45  sycl_device.fill(gpu_in_data, gpu_in_data + in.size(), value);
46  sycl_device.memcpyDeviceToHost(in.data(), gpu_in_data, in.size() * sizeof(DataType));
47  for (IndexType i = 0; i < in.size(); i++) {
48  VERIFY_IS_EQUAL(in(i), in1(i));
49  }
50 
51  sycl_device.deallocate(gpu_in_data);
52 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
The tensor class.
Definition: Tensor.h:68
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
squared absolute value
Definition: GlobalFunctions.h:87

References Eigen::Tensor< Scalar_, NumIndices_, Options_, IndexType_ >::data(), i, Eigen::Tensor< Scalar_, NumIndices_, Options_, IndexType_ >::size(), Eigen::value, and VERIFY_IS_EQUAL.