From 3c248195ea42e49952565af4d5d9acfe6a8f91cb Mon Sep 17 00:00:00 2001 From: Tom Deakin Date: Tue, 28 Jul 2015 13:18:02 +0100 Subject: [PATCH] Add try/catch around kernel executions --- ocl-stream.cpp | 76 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 24 deletions(-) diff --git a/ocl-stream.cpp b/ocl-stream.cpp index 54c7a5c..5f1ddb8 100644 --- a/ocl-stream.cpp +++ b/ocl-stream.cpp @@ -262,45 +262,73 @@ int main(int argc, char *argv[]) { std::vector times; t1 = std::chrono::high_resolution_clock::now(); - copy( - cl::EnqueueArgs( - queue, - cl::NDRange(ARRAY_SIZE)), - d_a, d_c); - queue.finish(); + try + { + copy( + cl::EnqueueArgs( + queue, + cl::NDRange(ARRAY_SIZE)), + d_a, d_c); + queue.finish(); + } + catch (cl::Error &e) + { + die("Executing copy", e); + } t2 = std::chrono::high_resolution_clock::now(); times.push_back(std::chrono::duration_cast >(t2 - t1).count()); t1 = std::chrono::high_resolution_clock::now(); - mul( - cl::EnqueueArgs( - queue, - cl::NDRange(ARRAY_SIZE)), - d_b, d_c); - queue.finish(); + try + { + mul( + cl::EnqueueArgs( + queue, + cl::NDRange(ARRAY_SIZE)), + d_b, d_c); + queue.finish(); + } + catch (cl::Error &e) + { + die("Executing mul", e); + } t2 = std::chrono::high_resolution_clock::now(); times.push_back(std::chrono::duration_cast >(t2 - t1).count()); t1 = std::chrono::high_resolution_clock::now(); - add( - cl::EnqueueArgs( - queue, - cl::NDRange(ARRAY_SIZE)), - d_a, d_b, d_c); - queue.finish(); + try + { + add( + cl::EnqueueArgs( + queue, + cl::NDRange(ARRAY_SIZE)), + d_a, d_b, d_c); + queue.finish(); + } + catch (cl::Error &e) + { + die("Executing add", e); + } t2 = std::chrono::high_resolution_clock::now(); times.push_back(std::chrono::duration_cast >(t2 - t1).count()); t1 = std::chrono::high_resolution_clock::now(); - triad( - cl::EnqueueArgs( - queue, - cl::NDRange(ARRAY_SIZE)), - d_a, d_b, d_c); - queue.finish(); + try + { + triad( + cl::EnqueueArgs( + queue, + cl::NDRange(ARRAY_SIZE)), + d_a, d_b, d_c); + queue.finish(); + } + catch (cl::Error &e) + { + die("Executing triad", e); + } t2 = std::chrono::high_resolution_clock::now(); times.push_back(std::chrono::duration_cast >(t2 - t1).count());