aboutsummaryrefslogtreecommitdiff
path: root/test_conformance/events/test_event_dependencies.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test_conformance/events/test_event_dependencies.cpp')
-rw-r--r--test_conformance/events/test_event_dependencies.cpp542
1 files changed, 363 insertions, 179 deletions
diff --git a/test_conformance/events/test_event_dependencies.cpp b/test_conformance/events/test_event_dependencies.cpp
index 41136548..45b260a6 100644
--- a/test_conformance/events/test_event_dependencies.cpp
+++ b/test_conformance/events/test_event_dependencies.cpp
@@ -1,6 +1,6 @@
//
// Copyright (c) 2017 The Khronos Group Inc.
-//
+//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -39,61 +39,79 @@ const char *write_kernels[] = {
/*
Tests event dependencies by running two kernels that use the same buffer.
If two_queues is set they are run in separate queues.
- If test_enqueue_wait_for_events is set then clEnqueueWaitForEvent is called between them.
- If test_barrier is set then clEnqueueBarrier is called between them (only for single queue).
- If neither are set, nothing is done to prevent them from executing in the wrong order. This can be used for verification.
+ If test_enqueue_wait_for_events is set then clEnqueueWaitForEvent is called
+ between them. If test_barrier is set then clEnqueueBarrier is called between
+ them (only for single queue). If neither are set, nothing is done to prevent
+ them from executing in the wrong order. This can be used for verification.
*/
-int test_event_enqueue_wait_for_events_run_test( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements, int two_queues, int two_devices,
- int test_enqueue_wait_for_events, int test_barrier, int use_waitlist, int use_marker)
+int test_event_enqueue_wait_for_events_run_test(
+ cl_device_id deviceID, cl_context context, cl_command_queue queue,
+ int num_elements, int two_queues, int two_devices,
+ int test_enqueue_wait_for_events, int test_barrier, int use_waitlist,
+ int use_marker)
{
cl_int error = CL_SUCCESS;
- size_t threads[3] = {TEST_SIZE,0,0};
+ size_t threads[3] = { TEST_SIZE, 0, 0 };
int i, loop_count, event_count, expected_value, failed;
int expected_if_only_queue[2];
int max_count = TEST_SIZE;
cl_platform_id platform;
- cl_command_queue queues[2]; // Not a wrapper so we don't autorelease if they are the same
- clCommandQueueWrapper queueWrappers[2]; // If they are different, we use the wrapper so it will auto release
+ cl_command_queue
+ queues[2]; // Not a wrapper so we don't autorelease if they are the same
+ clCommandQueueWrapper queueWrappers[2]; // If they are different, we use the
+ // wrapper so it will auto release
clContextWrapper context_to_use;
clMemWrapper data;
clProgramWrapper program;
clKernelWrapper kernel1[TEST_COUNT], kernel2[TEST_COUNT];
- clEventWrapper event[TEST_COUNT*4+2]; // If we usemarkers we get 2 more events per iteration
+ clEventWrapper event[TEST_COUNT * 4 + 2]; // If we usemarkers we get 2 more
+ // events per iteration
if (test_enqueue_wait_for_events)
- log_info("\tTesting with clEnqueueBarrierWithWaitList as barrier function.\n");
+ log_info("\tTesting with clEnqueueBarrierWithWaitList as barrier "
+ "function.\n");
if (test_barrier)
- log_info("\tTesting with clEnqueueBarrierWithWaitList as barrier function.\n");
+ log_info("\tTesting with clEnqueueBarrierWithWaitList as barrier "
+ "function.\n");
if (use_waitlist)
- log_info("\tTesting with waitlist-based depenednecies between kernels.\n");
+ log_info(
+ "\tTesting with waitlist-based depenednecies between kernels.\n");
if (use_marker)
log_info("\tTesting with clEnqueueMarker as a barrier function.\n");
- if (test_barrier && (two_queues || two_devices)) {
- log_error("\tTest requested with clEnqueueBarrier across two queues. This is not a valid combination.\n");
+ if (test_barrier && (two_queues || two_devices))
+ {
+ log_error("\tTest requested with clEnqueueBarrier across two queues. "
+ "This is not a valid combination.\n");
return -1;
}
error = clGetPlatformIDs(1, &platform, NULL);
test_error(error, "clGetPlatformIDs failed.");
- // If we are to use two devices, then get them and create a context with both.
+ // If we are to use two devices, then get them and create a context with
+ // both.
cl_device_id *two_device_ids;
- if (two_devices) {
- two_device_ids = (cl_device_id*)malloc(sizeof(cl_device_id)*2);
+ if (two_devices)
+ {
+ two_device_ids = (cl_device_id *)malloc(sizeof(cl_device_id) * 2);
cl_uint number_returned;
- error = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 2, two_device_ids, &number_returned);
- test_error( error, "clGetDeviceIDs for CL_DEVICE_TYPE_ALL failed.");
- if (number_returned != 2) {
+ error = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 2, two_device_ids,
+ &number_returned);
+ test_error(error, "clGetDeviceIDs for CL_DEVICE_TYPE_ALL failed.");
+ if (number_returned != 2)
+ {
log_info("Failed to obtain two devices. Test can not run.\n");
free(two_device_ids);
return 0;
}
- for (i=0; i<2; i++) {
+ for (i = 0; i < 2; i++)
+ {
cl_device_type type;
- error = clGetDeviceInfo(two_device_ids[i], CL_DEVICE_TYPE, sizeof(cl_device_type), &type, NULL);
- test_error( error, "clGetDeviceInfo failed.");
+ error = clGetDeviceInfo(two_device_ids[i], CL_DEVICE_TYPE,
+ sizeof(cl_device_type), &type, NULL);
+ test_error(error, "clGetDeviceInfo failed.");
if (type & CL_DEVICE_TYPE_CPU)
log_info("\tDevice %d is CL_DEVICE_TYPE_CPU.\n", i);
if (type & CL_DEVICE_TYPE_GPU)
@@ -104,12 +122,16 @@ int test_event_enqueue_wait_for_events_run_test( cl_device_id deviceID, cl_conte
log_info("\tDevice %d is CL_DEVICE_TYPE_DEFAULT.\n", i);
}
- context_to_use = clCreateContext(NULL, 2, two_device_ids, notify_callback, NULL, &error);
+ context_to_use = clCreateContext(NULL, 2, two_device_ids,
+ notify_callback, NULL, &error);
test_error(error, "clCreateContext failed for two devices.");
log_info("\tTesting with two devices.\n");
- } else {
- context_to_use = clCreateContext(NULL, 1, &deviceID, NULL, NULL, &error);
+ }
+ else
+ {
+ context_to_use =
+ clCreateContext(NULL, 1, &deviceID, NULL, NULL, &error);
test_error(error, "clCreateContext failed for one device.");
log_info("\tTesting with one device.\n");
@@ -117,41 +139,55 @@ int test_event_enqueue_wait_for_events_run_test( cl_device_id deviceID, cl_conte
// If we are using two queues then create them
cl_command_queue_properties props = CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE;
- if (two_queues) {
+ if (two_queues)
+ {
// Get a second queue
if (two_devices)
{
- if( !checkDeviceForQueueSupport( two_device_ids[ 0 ], props ) ||
- !checkDeviceForQueueSupport( two_device_ids[ 1 ], props ) )
+ if (!checkDeviceForQueueSupport(two_device_ids[0], props)
+ || !checkDeviceForQueueSupport(two_device_ids[1], props))
{
- log_info( "WARNING: One or more device for multi-device test does not support out-of-order exec mode; skipping test.\n" );
+ log_info(
+ "WARNING: One or more device for multi-device test does "
+ "not support out-of-order exec mode; skipping test.\n");
return -1942;
}
- queueWrappers[0] = clCreateCommandQueue(context_to_use, two_device_ids[0], props, &error);
- test_error(error, "clCreateCommandQueue for first queue on first device failed.");
- queueWrappers[1] = clCreateCommandQueue(context_to_use, two_device_ids[1], props, &error);
- test_error(error, "clCreateCommandQueue for second queue on second device failed.");
-
+ queueWrappers[0] = clCreateCommandQueue(
+ context_to_use, two_device_ids[0], props, &error);
+ test_error(
+ error,
+ "clCreateCommandQueue for first queue on first device failed.");
+ queueWrappers[1] = clCreateCommandQueue(
+ context_to_use, two_device_ids[1], props, &error);
+ test_error(error,
+ "clCreateCommandQueue for second queue on second device "
+ "failed.");
}
else
{
- // Single device has already been checked for out-of-order exec support
- queueWrappers[0] = clCreateCommandQueue(context_to_use, deviceID, props, &error);
+ // Single device has already been checked for out-of-order exec
+ // support
+ queueWrappers[0] =
+ clCreateCommandQueue(context_to_use, deviceID, props, &error);
test_error(error, "clCreateCommandQueue for first queue failed.");
- queueWrappers[1] = clCreateCommandQueue(context_to_use, deviceID, props, &error);
+ queueWrappers[1] =
+ clCreateCommandQueue(context_to_use, deviceID, props, &error);
test_error(error, "clCreateCommandQueue for second queue failed.");
}
- // Ugly hack to make sure we only have the wrapper auto-release if they are different queues
+ // Ugly hack to make sure we only have the wrapper auto-release if they
+ // are different queues
queues[0] = queueWrappers[0];
queues[1] = queueWrappers[1];
log_info("\tTesting with two queues.\n");
}
else
{
- // (Note: single device has already been checked for out-of-order exec support)
- // Otherwise create one queue and have the second one be the same
- queueWrappers[0] = clCreateCommandQueue(context_to_use, deviceID, props, &error);
+ // (Note: single device has already been checked for out-of-order exec
+ // support) Otherwise create one queue and have the second one be the
+ // same
+ queueWrappers[0] =
+ clCreateCommandQueue(context_to_use, deviceID, props, &error);
test_error(error, "clCreateCommandQueue for first queue failed.");
queues[0] = queueWrappers[0];
queues[1] = (cl_command_queue)queues[0];
@@ -160,236 +196,346 @@ int test_event_enqueue_wait_for_events_run_test( cl_device_id deviceID, cl_conte
// Setup - create a buffer and the two kernels
- data = clCreateBuffer(context_to_use, CL_MEM_READ_WRITE, TEST_SIZE*sizeof(cl_int), NULL, &error);
- test_error( error, "clCreateBuffer failed");
+ data = clCreateBuffer(context_to_use, CL_MEM_READ_WRITE,
+ TEST_SIZE * sizeof(cl_int), NULL, &error);
+ test_error(error, "clCreateBuffer failed");
// Initialize the values to zero
- cl_int *values = (cl_int*)malloc(TEST_SIZE*sizeof(cl_int));
- for (i=0; i<(int)TEST_SIZE; i++)
- values[i] = 0;
- error = clEnqueueWriteBuffer(queues[0], data, CL_TRUE, 0, TEST_SIZE*sizeof(cl_int), values, 0, NULL, NULL);
- test_error( error, "clEnqueueWriteBuffer failed");
+ cl_int *values = (cl_int *)malloc(TEST_SIZE * sizeof(cl_int));
+ for (i = 0; i < (int)TEST_SIZE; i++) values[i] = 0;
+ error =
+ clEnqueueWriteBuffer(queues[0], data, CL_TRUE, 0,
+ TEST_SIZE * sizeof(cl_int), values, 0, NULL, NULL);
+ test_error(error, "clEnqueueWriteBuffer failed");
expected_value = 0;
// Build the kernels
- if (create_single_kernel_helper( context_to_use, &program, &kernel1[0], 1, write_kernels, "write_up" ))
+ if (create_single_kernel_helper(context_to_use, &program, &kernel1[0], 1,
+ write_kernels, "write_up"))
return -1;
error = clSetKernelArg(kernel1[0], 0, sizeof(data), &data);
error |= clSetKernelArg(kernel1[0], 1, sizeof(max_count), &max_count);
- test_error( error, "clSetKernelArg 1 failed");
+ test_error(error, "clSetKernelArg 1 failed");
- for (i=1; i<TEST_COUNT; i++) {
+ for (i = 1; i < TEST_COUNT; i++)
+ {
kernel1[i] = clCreateKernel(program, "write_up", &error);
- test_error( error, "clCreateKernel 1 failed");
+ test_error(error, "clCreateKernel 1 failed");
error = clSetKernelArg(kernel1[i], 0, sizeof(data), &data);
error |= clSetKernelArg(kernel1[i], 1, sizeof(max_count), &max_count);
- test_error( error, "clSetKernelArg 1 failed");
+ test_error(error, "clSetKernelArg 1 failed");
}
- for (i=0; i<TEST_COUNT; i++) {
+ for (i = 0; i < TEST_COUNT; i++)
+ {
kernel2[i] = clCreateKernel(program, "write_down", &error);
- test_error( error, "clCreateKernel 2 failed");
+ test_error(error, "clCreateKernel 2 failed");
error = clSetKernelArg(kernel2[i], 0, sizeof(data), &data);
error |= clSetKernelArg(kernel2[i], 1, sizeof(max_count), &max_count);
- test_error( error, "clSetKernelArg 2 failed");
+ test_error(error, "clSetKernelArg 2 failed");
}
- // Execution - run the first kernel, then enqueue the wait on the events, then the second kernel
- // If clEnqueueBarrierWithWaitList works, the buffer will be filled with 1s, then multiplied by 4s,
- // then incremented to 5s, repeatedly. Otherwise the values may be 2s (if the first one doesn't work) or 8s
- // (if the second one doesn't work).
+ // Execution - run the first kernel, then enqueue the wait on the events,
+ // then the second kernel If clEnqueueBarrierWithWaitList works, the buffer
+ // will be filled with 1s, then multiplied by 4s, then incremented to 5s,
+ // repeatedly. Otherwise the values may be 2s (if the first one doesn't
+ // work) or 8s (if the second one doesn't work).
if (RANDOMIZE)
log_info("Queues chosen randomly for each kernel execution.\n");
else
log_info("Queues chosen alternatily for each kernel execution.\n");
event_count = 0;
- for (i=0; i<(int)TEST_SIZE; i++)
- values[i] = 1;
- error = clEnqueueWriteBuffer(queues[0], data, CL_FALSE, 0, TEST_SIZE*sizeof(cl_int), values, 0, NULL, &event[event_count]);
- test_error( error, "clEnqueueWriteBuffer 2 failed");
+ for (i = 0; i < (int)TEST_SIZE; i++) values[i] = 1;
+ error = clEnqueueWriteBuffer(queues[0], data, CL_FALSE, 0,
+ TEST_SIZE * sizeof(cl_int), values, 0, NULL,
+ &event[event_count]);
+ test_error(error, "clEnqueueWriteBuffer 2 failed");
expected_value = 1;
expected_if_only_queue[0] = 1;
expected_if_only_queue[1] = 1;
int queue_to_use = 1;
- if (test_enqueue_wait_for_events) {
- error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 1, &event[event_count], NULL );
- test_error( error, "Unable to queue wait for events" );
- } else if (test_barrier) {
- error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 0, NULL, NULL);
- test_error( error, "Unable to queue barrier" );
+ if (test_enqueue_wait_for_events)
+ {
+ error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 1,
+ &event[event_count], NULL);
+ test_error(error, "Unable to queue wait for events");
+ }
+ else if (test_barrier)
+ {
+ error =
+ clEnqueueBarrierWithWaitList(queues[queue_to_use], 0, NULL, NULL);
+ test_error(error, "Unable to queue barrier");
}
- for (loop_count=0; loop_count<TEST_COUNT; loop_count++) {
+ for (loop_count = 0; loop_count < TEST_COUNT; loop_count++)
+ {
// Execute kernel 1
event_count++;
- if (use_waitlist | use_marker) {
- if (DEBUG_OUT) log_info("clEnqueueNDRangeKernel(queues[%d], kernel1[%d], 1, NULL, threads, NULL, 1, &event[%d], &event[%d])\n", queue_to_use, loop_count, event_count-1, event_count);
- error = clEnqueueNDRangeKernel(queues[queue_to_use], kernel1[loop_count], 1, NULL, threads, NULL, 1, &event[event_count-1], &event[event_count]);
- } else {
- if (DEBUG_OUT) log_info("clEnqueueNDRangeKernel(queues[%d], kernel1[%d], 1, NULL, threads, NULL, 0, NULL, &event[%d])\n", queue_to_use, loop_count, event_count);
- error = clEnqueueNDRangeKernel(queues[queue_to_use], kernel1[loop_count], 1, NULL, threads, NULL, 0, NULL, &event[event_count]);
+ if (use_waitlist | use_marker)
+ {
+ if (DEBUG_OUT)
+ log_info("clEnqueueNDRangeKernel(queues[%d], kernel1[%d], 1, "
+ "NULL, threads, NULL, 1, &event[%d], &event[%d])\n",
+ queue_to_use, loop_count, event_count - 1,
+ event_count);
+ error = clEnqueueNDRangeKernel(
+ queues[queue_to_use], kernel1[loop_count], 1, NULL, threads,
+ NULL, 1, &event[event_count - 1], &event[event_count]);
}
- if (error) {
+ else
+ {
+ if (DEBUG_OUT)
+ log_info("clEnqueueNDRangeKernel(queues[%d], kernel1[%d], 1, "
+ "NULL, threads, NULL, 0, NULL, &event[%d])\n",
+ queue_to_use, loop_count, event_count);
+ error = clEnqueueNDRangeKernel(
+ queues[queue_to_use], kernel1[loop_count], 1, NULL, threads,
+ NULL, 0, NULL, &event[event_count]);
+ }
+ if (error)
+ {
log_info("\tLoop count %d\n", loop_count);
- print_error( error, "clEnqueueNDRangeKernel for kernel 1 failed");
+ print_error(error, "clEnqueueNDRangeKernel for kernel 1 failed");
return error;
}
expected_value *= 2;
expected_if_only_queue[queue_to_use] *= 2;
// If we are using a marker, it needs to go in the same queue
- if (use_marker) {
+ if (use_marker)
+ {
event_count++;
- if (DEBUG_OUT) log_info("clEnqueueMarker(queues[%d], event[%d])\n", queue_to_use, event_count);
-
- #ifdef CL_VERSION_1_2
- error = clEnqueueMarkerWithWaitList(queues[queue_to_use], 0, NULL, &event[event_count]);
- #else
- error = clEnqueueMarker(queues[queue_to_use], &event[event_count]);
- #endif
-
+ if (DEBUG_OUT)
+ log_info("clEnqueueMarker(queues[%d], event[%d])\n",
+ queue_to_use, event_count);
+
+#ifdef CL_VERSION_1_2
+ error = clEnqueueMarkerWithWaitList(queues[queue_to_use], 0, NULL,
+ &event[event_count]);
+#else
+ error = clEnqueueMarker(queues[queue_to_use], &event[event_count]);
+#endif
}
// Pick the next queue to run
if (RANDOMIZE)
- queue_to_use = rand()%2;
+ queue_to_use = rand() % 2;
else
- queue_to_use = (queue_to_use + 1)%2;
+ queue_to_use = (queue_to_use + 1) % 2;
// Put in a barrier if requested
- if (test_enqueue_wait_for_events) {
- if (DEBUG_OUT) log_info("clEnqueueBarrierWithWaitList(queues[%d], 1, &event[%d], NULL)\n", queue_to_use, event_count);
- error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 1, &event[event_count], NULL);
- test_error( error, "Unable to queue wait for events" );
- } else if (test_barrier) {
- if (DEBUG_OUT) log_info("clEnqueueBarrierWithWaitList(queues[%d])\n", queue_to_use);
- error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 0, NULL, NULL);
- test_error( error, "Unable to queue barrier" );
+ if (test_enqueue_wait_for_events)
+ {
+ if (DEBUG_OUT)
+ log_info("clEnqueueBarrierWithWaitList(queues[%d], 1, "
+ "&event[%d], NULL)\n",
+ queue_to_use, event_count);
+ error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 1,
+ &event[event_count], NULL);
+ test_error(error, "Unable to queue wait for events");
+ }
+ else if (test_barrier)
+ {
+ if (DEBUG_OUT)
+ log_info("clEnqueueBarrierWithWaitList(queues[%d])\n",
+ queue_to_use);
+ error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 0, NULL,
+ NULL);
+ test_error(error, "Unable to queue barrier");
}
// Execute Kernel 2
event_count++;
- if (use_waitlist | use_marker) {
- if (DEBUG_OUT) log_info("clEnqueueNDRangeKernel(queues[%d], kernel2[%d], 1, NULL, threads, NULL, 1, &event[%d], &event[%d])\n", queue_to_use, loop_count, event_count-1, event_count);
- error = clEnqueueNDRangeKernel(queues[queue_to_use], kernel2[loop_count], 1, NULL, threads, NULL, 1, &event[event_count-1], &event[event_count]);
- } else {
- if (DEBUG_OUT) log_info("clEnqueueNDRangeKernel(queues[%d], kernel2[%d], 1, NULL, threads, NULL, 0, NULL, &event[%d])\n", queue_to_use, loop_count, event_count);
- error = clEnqueueNDRangeKernel(queues[queue_to_use], kernel2[loop_count], 1, NULL, threads, NULL, 0, NULL, &event[event_count]);
+ if (use_waitlist | use_marker)
+ {
+ if (DEBUG_OUT)
+ log_info("clEnqueueNDRangeKernel(queues[%d], kernel2[%d], 1, "
+ "NULL, threads, NULL, 1, &event[%d], &event[%d])\n",
+ queue_to_use, loop_count, event_count - 1,
+ event_count);
+ error = clEnqueueNDRangeKernel(
+ queues[queue_to_use], kernel2[loop_count], 1, NULL, threads,
+ NULL, 1, &event[event_count - 1], &event[event_count]);
+ }
+ else
+ {
+ if (DEBUG_OUT)
+ log_info("clEnqueueNDRangeKernel(queues[%d], kernel2[%d], 1, "
+ "NULL, threads, NULL, 0, NULL, &event[%d])\n",
+ queue_to_use, loop_count, event_count);
+ error = clEnqueueNDRangeKernel(
+ queues[queue_to_use], kernel2[loop_count], 1, NULL, threads,
+ NULL, 0, NULL, &event[event_count]);
}
- if (error) {
+ if (error)
+ {
log_info("\tLoop count %d\n", loop_count);
- print_error( error, "clEnqueueNDRangeKernel for kernel 2 failed");
+ print_error(error, "clEnqueueNDRangeKernel for kernel 2 failed");
return error;
}
expected_value--;
expected_if_only_queue[queue_to_use]--;
// If we are using a marker, it needs to go in the same queue
- if (use_marker) {
+ if (use_marker)
+ {
event_count++;
- if (DEBUG_OUT) log_info("clEnqueueMarker(queues[%d], event[%d])\n", queue_to_use, event_count);
-
- #ifdef CL_VERSION_1_2
- error = clEnqueueMarkerWithWaitList(queues[queue_to_use], 0, NULL, &event[event_count]);
- #else
+ if (DEBUG_OUT)
+ log_info("clEnqueueMarker(queues[%d], event[%d])\n",
+ queue_to_use, event_count);
+
+#ifdef CL_VERSION_1_2
+ error = clEnqueueMarkerWithWaitList(queues[queue_to_use], 0, NULL,
+ &event[event_count]);
+#else
error = clEnqueueMarker(queues[queue_to_use], &event[event_count]);
- #endif
+#endif
}
// Pick the next queue to run
if (RANDOMIZE)
- queue_to_use = rand()%2;
+ queue_to_use = rand() % 2;
else
- queue_to_use = (queue_to_use + 1)%2;
+ queue_to_use = (queue_to_use + 1) % 2;
// Put in a barrier if requested
- if (test_enqueue_wait_for_events) {
- if (DEBUG_OUT) log_info("clEnqueueBarrierWithWaitList(queues[%d], 1, &event[%d], NULL)\n", queue_to_use, event_count);
- error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 1, &event[event_count], NULL );
- test_error( error, "Unable to queue wait for events" );
- } else if (test_barrier) {
- if (DEBUG_OUT) log_info("clEnqueueBarrierWithWaitList(queues[%d])\n", queue_to_use);
- error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 0, NULL, NULL);
- test_error( error, "Unable to queue barrier" );
+ if (test_enqueue_wait_for_events)
+ {
+ if (DEBUG_OUT)
+ log_info("clEnqueueBarrierWithWaitList(queues[%d], 1, "
+ "&event[%d], NULL)\n",
+ queue_to_use, event_count);
+ error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 1,
+ &event[event_count], NULL);
+ test_error(error, "Unable to queue wait for events");
+ }
+ else if (test_barrier)
+ {
+ if (DEBUG_OUT)
+ log_info("clEnqueueBarrierWithWaitList(queues[%d])\n",
+ queue_to_use);
+ error = clEnqueueBarrierWithWaitList(queues[queue_to_use], 0, NULL,
+ NULL);
+ test_error(error, "Unable to queue barrier");
}
}
// Now finish up everything
- if (two_queues) {
+ if (two_queues)
+ {
error = clFlush(queues[1]);
- test_error( error, "clFlush[1] failed");
+ test_error(error, "clFlush[1] failed");
}
- error = clEnqueueReadBuffer(queues[0], data, CL_TRUE, 0, TEST_SIZE*sizeof(cl_int), values, 1, &event[event_count], NULL);
+ error = clEnqueueReadBuffer(queues[0], data, CL_TRUE, 0,
+ TEST_SIZE * sizeof(cl_int), values, 1,
+ &event[event_count], NULL);
test_error(error, "clEnqueueReadBuffer failed");
failed = 0;
- for (i=0; i<(int)TEST_SIZE; i++)
- if (values[i] != expected_value) {
+ for (i = 0; i < (int)TEST_SIZE; i++)
+ if (values[i] != expected_value)
+ {
failed = 1;
- log_info("\tvalues[%d] = %d, expected %d (If only queue 1 accessed memory: %d only queue 2 accessed memory: %d)\n",
- i, values[i], expected_value, expected_if_only_queue[0], expected_if_only_queue[1]);
+ log_info("\tvalues[%d] = %d, expected %d (If only queue 1 accessed "
+ "memory: %d only queue 2 accessed memory: %d)\n",
+ i, values[i], expected_value, expected_if_only_queue[0],
+ expected_if_only_queue[1]);
break;
}
free(values);
- if (two_devices)
- free(two_device_ids);
+ if (two_devices) free(two_device_ids);
return failed;
}
-int test( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements,
- int two_queues, int two_devices,
- int test_enqueue_wait_for_events, int test_barrier, int use_waitlists, int use_marker)
+int test(cl_device_id deviceID, cl_context context, cl_command_queue queue,
+ int num_elements, int two_queues, int two_devices,
+ int test_enqueue_wait_for_events, int test_barrier, int use_waitlists,
+ int use_marker)
{
- if( !checkDeviceForQueueSupport( deviceID, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ) )
+ if (!checkDeviceForQueueSupport(deviceID,
+ CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE))
{
- log_info( "WARNING: Device does not support out-of-order exec mode; skipping test.\n" );
+ log_info("WARNING: Device does not support out-of-order exec mode; "
+ "skipping test.\n");
return 0;
}
- log_info("Running test for baseline results to determine if out-of-order execution can be detected...\n");
- int baseline_results = test_event_enqueue_wait_for_events_run_test(deviceID, context, queue, num_elements, two_queues, two_devices, 0, 0, 0, 0);
- if (baseline_results == 0) {
+ log_info("Running test for baseline results to determine if out-of-order "
+ "execution can be detected...\n");
+ int baseline_results = test_event_enqueue_wait_for_events_run_test(
+ deviceID, context, queue, num_elements, two_queues, two_devices, 0, 0,
+ 0, 0);
+ if (baseline_results == 0)
+ {
if (test_enqueue_wait_for_events)
- log_info("WARNING: could not detect any out-of-order execution without using clEnqueueBarrierWithWaitList, so this test is not a valid test of out-of-order event dependencies.\n");
+ log_info(
+ "WARNING: could not detect any out-of-order execution without "
+ "using clEnqueueBarrierWithWaitList, so this test is not a "
+ "valid test of out-of-order event dependencies.\n");
if (test_barrier)
- log_info("WARNING: could not detect any out-of-order execution without using clEnqueueBarrierWithWaitList, so this test is not a valid test of out-of-order event dependencies.\n");
+ log_info(
+ "WARNING: could not detect any out-of-order execution without "
+ "using clEnqueueBarrierWithWaitList, so this test is not a "
+ "valid test of out-of-order event dependencies.\n");
if (use_waitlists)
- log_info("WARNING: could not detect any out-of-order execution without using waitlists, so this test is not a valid test of out-of-order event dependencies.\n");
+ log_info("WARNING: could not detect any out-of-order execution "
+ "without using waitlists, so this test is not a valid "
+ "test of out-of-order event dependencies.\n");
if (use_marker)
- log_info("WARNING: could not detect any out-of-order execution without using clEnqueueMarker, so this test is not a valid test of out-of-order event dependencies.\n");
- } else if (baseline_results == 1) {
+ log_info("WARNING: could not detect any out-of-order execution "
+ "without using clEnqueueMarker, so this test is not a "
+ "valid test of out-of-order event dependencies.\n");
+ }
+ else if (baseline_results == 1)
+ {
if (test_enqueue_wait_for_events)
- log_info("Detected incorrect execution (possibly out-of-order) without clEnqueueBarrierWithWaitList. Test can be a valid test of out-of-order event dependencies.\n");
+ log_info("Detected incorrect execution (possibly out-of-order) "
+ "without clEnqueueBarrierWithWaitList. Test can be a "
+ "valid test of out-of-order event dependencies.\n");
if (test_barrier)
- log_info("Detected incorrect execution (possibly out-of-order) without clEnqueueBarrierWithWaitList. Test can be a valid test of out-of-order event dependencies.\n");
+ log_info("Detected incorrect execution (possibly out-of-order) "
+ "without clEnqueueBarrierWithWaitList. Test can be a "
+ "valid test of out-of-order event dependencies.\n");
if (use_waitlists)
- log_info("Detected incorrect execution (possibly out-of-order) without waitlists. Test can be a valid test of out-of-order event dependencies.\n");
+ log_info("Detected incorrect execution (possibly out-of-order) "
+ "without waitlists. Test can be a valid test of "
+ "out-of-order event dependencies.\n");
if (use_marker)
- log_info("Detected incorrect execution (possibly out-of-order) without clEnqueueMarker. Test can be a valid test of out-of-order event dependencies.\n");
- } else if( baseline_results == -1942 ) {
+ log_info("Detected incorrect execution (possibly out-of-order) "
+ "without clEnqueueMarker. Test can be a valid test of "
+ "out-of-order event dependencies.\n");
+ }
+ else if (baseline_results == -1942)
+ {
// Just ignore and return (out-of-order exec mode not supported)
return 0;
- } else {
+ }
+ else
+ {
print_error(baseline_results, "Baseline run failed");
return baseline_results;
}
log_info("Running test for actual results...\n");
- return test_event_enqueue_wait_for_events_run_test(deviceID, context, queue, num_elements, two_queues, two_devices,
- test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test_event_enqueue_wait_for_events_run_test(
+ deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
}
-int test_out_of_order_event_waitlist_single_queue( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_waitlist_single_queue(cl_device_id deviceID,
+ cl_context context,
+ cl_command_queue queue,
+ int num_elements)
{
int two_queues = 0;
int two_devices = 0;
@@ -397,10 +543,15 @@ int test_out_of_order_event_waitlist_single_queue( cl_device_id deviceID, cl_con
int test_barrier = 0;
int use_waitlists = 1;
int use_marker = 0;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-int test_out_of_order_event_waitlist_multi_queue( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_waitlist_multi_queue(cl_device_id deviceID,
+ cl_context context,
+ cl_command_queue queue,
+ int num_elements)
{
int two_queues = 1;
int two_devices = 0;
@@ -408,10 +559,14 @@ int test_out_of_order_event_waitlist_multi_queue( cl_device_id deviceID, cl_cont
int test_barrier = 0;
int use_waitlists = 1;
int use_marker = 0;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-int test_out_of_order_event_waitlist_multi_queue_multi_device( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_waitlist_multi_queue_multi_device(
+ cl_device_id deviceID, cl_context context, cl_command_queue queue,
+ int num_elements)
{
int two_queues = 1;
int two_devices = 1;
@@ -419,11 +574,15 @@ int test_out_of_order_event_waitlist_multi_queue_multi_device( cl_device_id devi
int test_barrier = 0;
int use_waitlists = 1;
int use_marker = 0;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-int test_out_of_order_event_enqueue_wait_for_events_single_queue( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_enqueue_wait_for_events_single_queue(
+ cl_device_id deviceID, cl_context context, cl_command_queue queue,
+ int num_elements)
{
int two_queues = 0;
int two_devices = 0;
@@ -431,10 +590,14 @@ int test_out_of_order_event_enqueue_wait_for_events_single_queue( cl_device_id d
int test_barrier = 0;
int use_waitlists = 0;
int use_marker = 0;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-int test_out_of_order_event_enqueue_wait_for_events_multi_queue( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_enqueue_wait_for_events_multi_queue(
+ cl_device_id deviceID, cl_context context, cl_command_queue queue,
+ int num_elements)
{
int two_queues = 1;
int two_devices = 0;
@@ -442,11 +605,15 @@ int test_out_of_order_event_enqueue_wait_for_events_multi_queue( cl_device_id de
int test_barrier = 0;
int use_waitlists = 0;
int use_marker = 0;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-int test_out_of_order_event_enqueue_wait_for_events_multi_queue_multi_device( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_enqueue_wait_for_events_multi_queue_multi_device(
+ cl_device_id deviceID, cl_context context, cl_command_queue queue,
+ int num_elements)
{
int two_queues = 1;
int two_devices = 1;
@@ -454,13 +621,16 @@ int test_out_of_order_event_enqueue_wait_for_events_multi_queue_multi_device( cl
int test_barrier = 0;
int use_waitlists = 0;
int use_marker = 0;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-
-
-int test_out_of_order_event_enqueue_barrier_single_queue( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_enqueue_barrier_single_queue(cl_device_id deviceID,
+ cl_context context,
+ cl_command_queue queue,
+ int num_elements)
{
int two_queues = 0;
int two_devices = 0;
@@ -468,11 +638,16 @@ int test_out_of_order_event_enqueue_barrier_single_queue( cl_device_id deviceID,
int test_barrier = 1;
int use_waitlists = 0;
int use_marker = 0;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-int test_out_of_order_event_enqueue_marker_single_queue( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_enqueue_marker_single_queue(cl_device_id deviceID,
+ cl_context context,
+ cl_command_queue queue,
+ int num_elements)
{
int two_queues = 0;
int two_devices = 0;
@@ -480,10 +655,15 @@ int test_out_of_order_event_enqueue_marker_single_queue( cl_device_id deviceID,
int test_barrier = 0;
int use_waitlists = 0;
int use_marker = 1;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-int test_out_of_order_event_enqueue_marker_multi_queue( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_enqueue_marker_multi_queue(cl_device_id deviceID,
+ cl_context context,
+ cl_command_queue queue,
+ int num_elements)
{
int two_queues = 1;
int two_devices = 0;
@@ -491,11 +671,15 @@ int test_out_of_order_event_enqueue_marker_multi_queue( cl_device_id deviceID, c
int test_barrier = 0;
int use_waitlists = 0;
int use_marker = 1;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-int test_out_of_order_event_enqueue_marker_multi_queue_multi_device( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements)
+int test_out_of_order_event_enqueue_marker_multi_queue_multi_device(
+ cl_device_id deviceID, cl_context context, cl_command_queue queue,
+ int num_elements)
{
int two_queues = 1;
int two_devices = 1;
@@ -503,7 +687,7 @@ int test_out_of_order_event_enqueue_marker_multi_queue_multi_device( cl_device_i
int test_barrier = 0;
int use_waitlists = 0;
int use_marker = 1;
- return test(deviceID, context, queue, num_elements, two_queues, two_devices, test_enqueue_wait_for_events, test_barrier, use_waitlists, use_marker);
+ return test(deviceID, context, queue, num_elements, two_queues, two_devices,
+ test_enqueue_wait_for_events, test_barrier, use_waitlists,
+ use_marker);
}
-
-