diff --git a/SYCL.make b/SYCL.make index 1e1c480..9320216 100644 --- a/SYCL.make +++ b/SYCL.make @@ -1,11 +1,11 @@ -COMPUTECPP_FLAGS = $(shell computecpp_info --dump-device-compiler-flags) +COMPUTECPP_FLAGS = $(shell $(COMPUTECPP_PREFIX)/bin/computecpp_info --dump-device-compiler-flags) sycl-stream: main.cpp SYCLStream.cpp SYCLStream.sycl - $(CXX) -O3 -std=c++11 -DSYCL main.cpp SYCLStream.cpp -include SYCLStream.sycl $(EXTRA_FLAGS) -lComputeCpp -lOpenCL -o $@ + $(CXX) -O3 -std=c++11 -DSYCL main.cpp SYCLStream.cpp -I$(COMPUTECPP_PREFIX)/include -include SYCLStream.sycl $(EXTRA_FLAGS) -L$(COMPUTECPP_PREFIX)/lib -lComputeCpp -lOpenCL -Wl,--rpath=$(COMPUTECPP_PREFIX)/lib/ -o $@ SYCLStream.sycl: SYCLStream.cpp - compute++ SYCLStream.cpp $(COMPUTECPP_FLAGS) -c + $(COMPUTECPP_PREFIX)/bin/compute++ SYCLStream.cpp $(COMPUTECPP_FLAGS) -c -I$(COMPUTECPP_PREFIX)/include -o $@ .PHONY: clean clean: diff --git a/SYCLStream.cpp b/SYCLStream.cpp index abe048c..9e228b9 100644 --- a/SYCLStream.cpp +++ b/SYCLStream.cpp @@ -47,16 +47,31 @@ SYCLStream::SYCLStream(const unsigned int ARRAY_SIZE, const int device_index) std::cout << "Driver: " << getDeviceDriver(device_index) << std::endl; std::cout << "Reduction kernel config: " << dot_num_groups << " groups of size " << dot_wgsize << std::endl; - queue = new cl::sycl::queue(dev); + queue = new cl::sycl::queue(dev, [&](cl::sycl::exception_list l) { + try { + for(auto e: l) { + std::rethrow_exception(e); + } + } catch (cl::sycl::exception e) { + std::cout << e.what(); + } + }); /* Pre-build the kernels */ - p = new program(queue->get_context()); - p->build_from_kernel_name(); - p->build_from_kernel_name(); - p->build_from_kernel_name(); - p->build_from_kernel_name(); - p->build_from_kernel_name(); - p->build_from_kernel_name(); + cl::sycl::vector_class v; + v.push_back(cl::sycl::program{queue->get_context()}); + v.back().compile_from_kernel_name(); + v.push_back(cl::sycl::program{queue->get_context()}); + v.back().compile_from_kernel_name(); + v.push_back(cl::sycl::program{queue->get_context()}); + v.back().compile_from_kernel_name(); + v.push_back(cl::sycl::program{queue->get_context()}); + v.back().compile_from_kernel_name(); + v.push_back(cl::sycl::program{queue->get_context()}); + v.back().compile_from_kernel_name(); + v.push_back(cl::sycl::program{queue->get_context()}); + v.back().compile_from_kernel_name(); + p = new program(v); // Create buffers d_a = new buffer(array_size);