From 622805a0c5d216141eca3090e80d58c159e175ee Mon Sep 17 00:00:00 2001 From: Mehdi Goli Date: Fri, 18 Nov 2016 16:20:42 +0000 Subject: Modifying TensorDeviceSycl.h to always create buffer of type uint8_t and convert them to the actual type at the execution on the device; adding the queue interface class to separate the lifespan of sycl queue and buffers,created for that queue, from Eigen::SyclDevice; modifying sycl tests to support the evaluation of the results for both row major and column major data layout on all different devices that are supported by Sycl{CPU; GPU; and Host}. --- unsupported/test/cxx11_tensor_device_sycl.cpp | 65 +++++++++++++++++---------- 1 file changed, 41 insertions(+), 24 deletions(-) (limited to 'unsupported/test/cxx11_tensor_device_sycl.cpp') diff --git a/unsupported/test/cxx11_tensor_device_sycl.cpp b/unsupported/test/cxx11_tensor_device_sycl.cpp index 8289959eb..a51062d23 100644 --- a/unsupported/test/cxx11_tensor_device_sycl.cpp +++ b/unsupported/test/cxx11_tensor_device_sycl.cpp @@ -21,42 +21,59 @@ #include #include -void test_device_memory(const Eigen::SyclDevice &sycl_device) { - std::cout << "Running on: " - << sycl_device.m_queue.get_device(). template get_info() - << std::endl; +template +void test_device_sycl(const Eigen::SyclDevice &sycl_device) { + std::cout <<"Hello from ComputeCpp: the requested device exists and the device name is : " + << sycl_device.sycl_queue().get_device(). template get_info() < tensorRange = {{sizeDim1}}; - Tensor in(tensorRange); - Tensor in1(tensorRange); - memset(in1.data(), 1,in1.size()*sizeof(int)); - int* gpu_in_data = static_cast(sycl_device.allocate(in.size()*sizeof(int))); - sycl_device.memset(gpu_in_data, 1, in.size()*sizeof(int) ); - sycl_device.memcpyDeviceToHost(in.data(), gpu_in_data, in.size()*sizeof(int) ); + Tensor in(tensorRange); + Tensor in1(tensorRange); + memset(in1.data(), 1,in1.size()*sizeof(DataType)); + DataType * gpu_in_data = static_cast(sycl_device.allocate(in.size()*sizeof(DataType))); + sycl_device.memset(gpu_in_data, 1,in.size()*sizeof(DataType) ); + sycl_device.memcpyDeviceToHost(in.data(), gpu_in_data, in.size()*sizeof(DataType) ); for (int i=0; i void test_device_exceptions(const Eigen::SyclDevice &sycl_device) { - VERIFY(sycl_device.ok()); - array tensorDims = {{100}}; - int* gpu_data = static_cast(sycl_device.allocate(100*sizeof(int))); - TensorMap> in(gpu_data, tensorDims); - TensorMap> out(gpu_data, tensorDims); - out.device(sycl_device) = in / in.constant(0); - VERIFY(!sycl_device.ok()); + bool threw_exception = false; + int sizeDim1 = 100; + array tensorDims = {{sizeDim1}}; + DataType* gpu_data = static_cast(sycl_device.allocate(sizeDim1*sizeof(DataType))); + TensorMap> in(gpu_data, tensorDims); + TensorMap> out(gpu_data, tensorDims); + try { + out.device(sycl_device) = in / in.constant(0); + } catch(...) { + threw_exception = true; + } + VERIFY(threw_exception); sycl_device.deallocate(gpu_data); } +template void sycl_device_test_per_device(dev_Selector s){ + QueueInterface queueInterface(s); + auto sycl_device = Eigen::SyclDevice(&queueInterface); + test_device_sycl(sycl_device); + test_device_sycl(sycl_device); + /// this test throw an exeption. enable it if you want to see the exception + // test_device_exceptions(sycl_device); + /// this test throw an exeption. enable it if you want to see the exception + // test_device_exceptions(sycl_device); + +} void test_cxx11_tensor_device_sycl() { - cl::sycl::gpu_selector s; - Eigen::SyclDevice sycl_device(s); - CALL_SUBTEST(test_device_memory(sycl_device)); - // This deadlocks - //CALL_SUBTEST(test_device_exceptions(sycl_device)); + printf("Test on GPU: OpenCL\n"); + CALL_SUBTEST(sycl_device_test_per_device((cl::sycl::gpu_selector()))); + printf("repeating the test on CPU: OpenCL\n"); + CALL_SUBTEST(sycl_device_test_per_device((cl::sycl::cpu_selector()))); + printf("repeating the test on CPU: HOST\n"); + CALL_SUBTEST(sycl_device_test_per_device((cl::sycl::host_selector()))); + printf("Test Passed******************\n" ); } -- cgit v1.2.3