From fffb7ef1fb474cf3ae0734a58fe31aaad69bd37e Mon Sep 17 00:00:00 2001 From: Ellen Norris-Thompson Date: Thu, 11 Feb 2021 17:10:14 +0000 Subject: [PATCH] Add clGetDeviceAndHostTimer support check For OpenCL 3.0 clGetDeviceAndHostTimer is an optional feature. Check whether it is supported in profiling/profiling_timebase Fixes #753 Signed-off-by: Ellen Norris-Thompson --- test_conformance/profiling/main.cpp | 48 ++++++++++++------- .../profiling/profiling_timebase.cpp | 18 +++++-- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/test_conformance/profiling/main.cpp b/test_conformance/profiling/main.cpp index 60a235ea59..facf233864 100644 --- a/test_conformance/profiling/main.cpp +++ b/test_conformance/profiling/main.cpp @@ -25,22 +25,38 @@ // the following variables (): test_definition test_list[] = { - ADD_TEST(read_array_int), ADD_TEST(read_array_uint), - ADD_TEST(read_array_long), ADD_TEST(read_array_ulong), - ADD_TEST(read_array_short), ADD_TEST(read_array_ushort), - ADD_TEST(read_array_float), ADD_TEST(read_array_char), - ADD_TEST(read_array_uchar), ADD_TEST(read_array_struct), - ADD_TEST(write_array_int), ADD_TEST(write_array_uint), - ADD_TEST(write_array_long), ADD_TEST(write_array_ulong), - ADD_TEST(write_array_short), ADD_TEST(write_array_ushort), - ADD_TEST(write_array_float), ADD_TEST(write_array_char), - ADD_TEST(write_array_uchar), ADD_TEST(write_array_struct), - ADD_TEST(read_image_float), ADD_TEST(read_image_char), - ADD_TEST(read_image_uchar), ADD_TEST(write_image_float), - ADD_TEST(write_image_char), ADD_TEST(write_image_uchar), - ADD_TEST(copy_array), ADD_TEST(copy_partial_array), - ADD_TEST(copy_image), ADD_TEST(copy_array_to_image), - ADD_TEST(execute), ADD_TEST(profiling_timebase), + ADD_TEST(read_array_int), + ADD_TEST(read_array_uint), + ADD_TEST(read_array_long), + ADD_TEST(read_array_ulong), + ADD_TEST(read_array_short), + ADD_TEST(read_array_ushort), + ADD_TEST(read_array_float), + ADD_TEST(read_array_char), + ADD_TEST(read_array_uchar), + ADD_TEST(read_array_struct), + ADD_TEST(write_array_int), + ADD_TEST(write_array_uint), + ADD_TEST(write_array_long), + ADD_TEST(write_array_ulong), + ADD_TEST(write_array_short), + ADD_TEST(write_array_ushort), + ADD_TEST(write_array_float), + ADD_TEST(write_array_char), + ADD_TEST(write_array_uchar), + ADD_TEST(write_array_struct), + ADD_TEST(read_image_float), + ADD_TEST(read_image_char), + ADD_TEST(read_image_uchar), + ADD_TEST(write_image_float), + ADD_TEST(write_image_char), + ADD_TEST(write_image_uchar), + ADD_TEST(copy_array), + ADD_TEST(copy_partial_array), + ADD_TEST(copy_image), + ADD_TEST(copy_array_to_image), + ADD_TEST(execute), + ADD_TEST_VERSION(profiling_timebase, Version(2, 1)), }; const int test_num = ARRAY_SIZE( test_list ); diff --git a/test_conformance/profiling/profiling_timebase.cpp b/test_conformance/profiling/profiling_timebase.cpp index 44a7393ede..5b8cd5386b 100644 --- a/test_conformance/profiling/profiling_timebase.cpp +++ b/test_conformance/profiling/profiling_timebase.cpp @@ -21,7 +21,21 @@ const char *kernelCode = "__kernel void kernel_empty(){}"; int test_profiling_timebase(cl_device_id device, cl_context context, cl_command_queue queue, int num_elements) { - cl_int err; + Version version = get_device_cl_version(device); + cl_platform_id platform = getPlatformFromDevice(device); + cl_ulong timer_resolution = 0; + cl_int err = + clGetPlatformInfo(platform, CL_PLATFORM_HOST_TIMER_RESOLUTION, + sizeof(timer_resolution), &timer_resolution, NULL); + test_error(err, "Unable to query CL_PLATFORM_HOST_TIMER_RESOLUTION"); + + // If CL_PLATFORM_HOST_TIMER_RESOLUTION returns 0, clGetDeviceAndHostTimer + // is not a supported feature + if (timer_resolution == 0 && version >= Version(3, 0)) + { + return TEST_SKIPPED_ITSELF; + } + cl_ulong hostTime; clProgramWrapper program; clKernelWrapper kernel; @@ -86,7 +100,5 @@ int test_profiling_timebase(cl_device_id device, cl_context context, test_assert_error((eventStart < deviceTimeAfterCompletion) && (eventEnd < deviceTimeAfterCompletion), "Device timestamp was taken after kernel was execution"); - - return TEST_PASS; }