From de952011f3a2ddbf7ed609ffbec2f63e80c14b0e Mon Sep 17 00:00:00 2001 From: James Price Date: Mon, 4 May 2020 09:12:46 -0400 Subject: [PATCH] Replace magic constants in api/kernels tests (#754) Also remove one unused test function. --- test_conformance/api/test_kernels.cpp | 149 ++++++++++++++++---------- 1 file changed, 95 insertions(+), 54 deletions(-) diff --git a/test_conformance/api/test_kernels.cpp b/test_conformance/api/test_kernels.cpp index 2c87fd33..b191f202 100644 --- a/test_conformance/api/test_kernels.cpp +++ b/test_conformance/api/test_kernels.cpp @@ -180,11 +180,13 @@ int test_execute_kernel_local_sizes(cl_device_id deviceID, cl_context context, c clKernelWrapper kernel; clMemWrapper streams[2]; size_t threads[1], localThreads[1]; - cl_float inputData[100]; - cl_int outputData[100]; RandomSeed seed( gRandomSeed ); int i; + num_elements = 100; + std::vector inputData(num_elements); + std::vector outputData(num_elements); + /* Create a kernel to test with */ if( create_single_kernel_helper( context, &program, &kernel, 1, sample_single_test_kernel, "sample_test" ) != 0 ) { @@ -192,18 +194,20 @@ int test_execute_kernel_local_sizes(cl_device_id deviceID, cl_context context, c } /* Create some I/O streams */ - streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), sizeof(cl_float) * 100, NULL, &error); + streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), + sizeof(cl_float) * num_elements, NULL, &error); test_error( error, "Creating test array failed" ); - streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), sizeof(cl_int) * 100, NULL, &error); + streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), + sizeof(cl_int) * num_elements, NULL, &error); test_error( error, "Creating test array failed" ); /* Write some test data */ - memset( outputData, 0, sizeof( outputData ) ); - - for (i=0; i<100; i++) + for (i = 0; i < num_elements; i++) inputData[i] = get_random_float(-(float) 0x7fffffff, (float) 0x7fffffff, seed); - error = clEnqueueWriteBuffer(queue, streams[0], CL_TRUE, 0, sizeof(cl_float)*100, (void *)inputData, 0, NULL, NULL); + error = clEnqueueWriteBuffer(queue, streams[0], CL_TRUE, 0, + sizeof(cl_float) * num_elements, + (void *)inputData.data(), 0, NULL, NULL); test_error( error, "Unable to set testing kernel data" ); /* Set the arguments */ @@ -213,17 +217,19 @@ int test_execute_kernel_local_sizes(cl_device_id deviceID, cl_context context, c test_error( error, "Unable to set kernel arguments" ); /* Test running the kernel and verifying it */ - threads[0] = (size_t)100; + threads[0] = (size_t)num_elements; error = get_max_common_work_group_size( context, kernel, threads[0], &localThreads[0] ); test_error( error, "Unable to get work group size to use" ); error = clEnqueueNDRangeKernel( queue, kernel, 1, NULL, threads, localThreads, 0, NULL, NULL ); test_error( error, "Kernel execution failed" ); - error = clEnqueueReadBuffer( queue, streams[1], CL_TRUE, 0, sizeof(cl_int)*100, (void *)outputData, 0, NULL, NULL ); + error = clEnqueueReadBuffer(queue, streams[1], CL_TRUE, 0, + sizeof(cl_int) * num_elements, + (void *)outputData.data(), 0, NULL, NULL); test_error( error, "Unable to get result data" ); - for (i=0; i<100; i++) + for (i = 0; i < num_elements; i++) { if (outputData[i] != (int)inputData[i]) { @@ -240,10 +246,12 @@ int test_execute_kernel_local_sizes(cl_device_id deviceID, cl_context context, c error = clEnqueueNDRangeKernel( queue, kernel, 1, NULL, threads, localThreads, 0, NULL, NULL ); test_error( error, "Kernel execution failed" ); - error = clEnqueueReadBuffer( queue, streams[1], CL_TRUE, 0, sizeof(cl_int)*100, (void *)outputData, 0, NULL, NULL ); + error = clEnqueueReadBuffer(queue, streams[1], CL_TRUE, 0, + sizeof(cl_int) * num_elements, + (void *)outputData.data(), 0, NULL, NULL); test_error( error, "Unable to get result data" ); - for (i=0; i<100; i++) + for (i = 0; i < num_elements; i++) { if (outputData[i] != (int)inputData[i]) { @@ -260,10 +268,12 @@ int test_execute_kernel_local_sizes(cl_device_id deviceID, cl_context context, c error = clEnqueueNDRangeKernel( queue, kernel, 1, NULL, threads, localThreads, 0, NULL, NULL ); test_error( error, "Kernel execution failed" ); - error = clEnqueueReadBuffer( queue, streams[1], CL_TRUE, 0, sizeof(cl_int)*100, (void *)outputData, 0, NULL, NULL ); + error = clEnqueueReadBuffer(queue, streams[1], CL_TRUE, 0, + sizeof(cl_int) * num_elements, + (void *)outputData.data(), 0, NULL, NULL); test_error( error, "Unable to get result data" ); - for (i=0; i<100; i++) + for (i = 0; i < num_elements; i++) { if (outputData[i] != (int)inputData[i]) { @@ -277,10 +287,12 @@ int test_execute_kernel_local_sizes(cl_device_id deviceID, cl_context context, c error = clEnqueueNDRangeKernel( queue, kernel, 1, NULL, threads, localThreads, 0, NULL, NULL ); test_error( error, "Kernel execution failed" ); - error = clEnqueueReadBuffer( queue, streams[1], CL_TRUE, 0, sizeof(cl_int)*100, (void *)outputData, 0, NULL, NULL ); + error = clEnqueueReadBuffer(queue, streams[1], CL_TRUE, 0, + sizeof(cl_int) * num_elements, + (void *)outputData.data(), 0, NULL, NULL); test_error( error, "Unable to get result data" ); - for (i=0; i<100; i++) + for (i = 0; i < num_elements; i++) { if (outputData[i] != (int)inputData[i]) { @@ -299,11 +311,13 @@ int test_set_kernel_arg_by_index(cl_device_id deviceID, cl_context context, cl_c clKernelWrapper kernel; clMemWrapper streams[2]; size_t threads[1], localThreads[1]; - cl_float inputData[10]; - cl_int outputData[10]; RandomSeed seed( gRandomSeed ); int i; + num_elements = 10; + std::vector inputData(num_elements); + std::vector outputData(num_elements); + /* Create a kernel to test with */ if( create_single_kernel_helper( context, &program, &kernel, 1, sample_single_test_kernel, "sample_test" ) != 0 ) { @@ -311,18 +325,20 @@ int test_set_kernel_arg_by_index(cl_device_id deviceID, cl_context context, cl_c } /* Create some I/O streams */ - streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), sizeof(cl_float) * 10, NULL, &error); + streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), + sizeof(cl_float) * num_elements, NULL, &error); test_error( error, "Creating test array failed" ); - streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), sizeof(cl_int) * 10, NULL, &error); + streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), + sizeof(cl_int) * num_elements, NULL, &error); test_error( error, "Creating test array failed" ); /* Write some test data */ - memset( outputData, 0, sizeof( outputData ) ); - - for (i=0; i<10; i++) + for (i = 0; i < num_elements; i++) inputData[i] = get_random_float(-(float) 0x7fffffff, (float) 0x7fffffff, seed); - error = clEnqueueWriteBuffer(queue, streams[0], CL_TRUE, 0, sizeof(cl_float)*10, (void *)inputData, 0, NULL, NULL); + error = clEnqueueWriteBuffer(queue, streams[0], CL_TRUE, 0, + sizeof(cl_float) * num_elements, + (void *)inputData.data(), 0, NULL, NULL); test_error( error, "Unable to set testing kernel data" ); /* Test setting the arguments by index manually */ @@ -333,7 +349,7 @@ int test_set_kernel_arg_by_index(cl_device_id deviceID, cl_context context, cl_c /* Test running the kernel and verifying it */ - threads[0] = (size_t)10; + threads[0] = (size_t)num_elements; error = get_max_common_work_group_size( context, kernel, threads[0], &localThreads[0] ); test_error( error, "Unable to get work group size to use" ); @@ -341,10 +357,12 @@ int test_set_kernel_arg_by_index(cl_device_id deviceID, cl_context context, cl_c error = clEnqueueNDRangeKernel( queue, kernel, 1, NULL, threads, localThreads, 0, NULL, NULL ); test_error( error, "Kernel execution failed" ); - error = clEnqueueReadBuffer( queue, streams[1], CL_TRUE, 0, sizeof(cl_int)*10, (void *)outputData, 0, NULL, NULL ); + error = clEnqueueReadBuffer(queue, streams[1], CL_TRUE, 0, + sizeof(cl_int) * num_elements, + (void *)outputData.data(), 0, NULL, NULL); test_error( error, "Unable to get result data" ); - for (i=0; i<10; i++) + for (i = 0; i < num_elements; i++) { if (outputData[i] != (int)inputData[i]) { @@ -363,16 +381,19 @@ int test_set_kernel_arg_constant(cl_device_id deviceID, cl_context context, cl_c clKernelWrapper kernel; clMemWrapper streams[3]; size_t threads[1], localThreads[1]; - cl_int outputData[10]; int i; - cl_int randomTestDataA[10], randomTestDataB[10]; cl_ulong maxSize; MTdata d; + num_elements = 10; + std::vector outputData(num_elements); + std::vector randomTestDataA(num_elements); + std::vector randomTestDataB(num_elements); + /* Verify our test buffer won't be bigger than allowed */ error = clGetDeviceInfo( deviceID, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof( maxSize ), &maxSize, 0 ); test_error( error, "Unable to get max constant buffer size" ); - if( maxSize < sizeof( cl_int ) * 10 ) + if (maxSize < sizeof(cl_int) * num_elements) { log_error( "ERROR: Unable to test constant argument to kernel: max size of constant buffer is reported as %d!\n", (int)maxSize ); return -1; @@ -386,18 +407,23 @@ int test_set_kernel_arg_constant(cl_device_id deviceID, cl_context context, cl_c /* Create some I/O streams */ d = init_genrand( gRandomSeed ); - for( i = 0; i < 10; i++ ) + for (i = 0; i < num_elements; i++) { randomTestDataA[i] = (cl_int)genrand_int32(d) & 0xffffff; /* Make sure values are positive, just so we don't have to */ randomTestDataB[i] = (cl_int)genrand_int32(d) & 0xffffff; /* deal with overflow on the verification */ } free_mtdata(d); d = NULL; - streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), sizeof(cl_int) * 10, randomTestDataA, &error); + streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), + sizeof(cl_int) * num_elements, + randomTestDataA.data(), &error); test_error( error, "Creating test array failed" ); - streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), sizeof(cl_int) * 10, randomTestDataB, &error); + streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), + sizeof(cl_int) * num_elements, + randomTestDataB.data(), &error); test_error( error, "Creating test array failed" ); - streams[2] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), sizeof(cl_int) * 10, NULL, &error); + streams[2] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), + sizeof(cl_int) * num_elements, NULL, &error); test_error( error, "Creating test array failed" ); /* Set the arguments */ @@ -410,7 +436,7 @@ int test_set_kernel_arg_constant(cl_device_id deviceID, cl_context context, cl_c /* Test running the kernel and verifying it */ - threads[0] = (size_t)10; + threads[0] = (size_t)num_elements; error = get_max_common_work_group_size( context, kernel, threads[0], &localThreads[0] ); test_error( error, "Unable to get work group size to use" ); @@ -418,10 +444,12 @@ int test_set_kernel_arg_constant(cl_device_id deviceID, cl_context context, cl_c error = clEnqueueNDRangeKernel( queue, kernel, 1, NULL, threads, localThreads, 0, NULL, NULL ); test_error( error, "Kernel execution failed" ); - error = clEnqueueReadBuffer( queue, streams[2], CL_TRUE, 0, sizeof(cl_int)*10, (void *)outputData, 0, NULL, NULL ); + error = clEnqueueReadBuffer(queue, streams[2], CL_TRUE, 0, + sizeof(cl_int) * num_elements, + (void *)outputData.data(), 0, NULL, NULL); test_error( error, "Unable to get result data" ); - for (i=0; i<10; i++) + for (i = 0; i < num_elements; i++) { if (outputData[i] != randomTestDataA[i] + randomTestDataB[i]) { @@ -440,17 +468,19 @@ int test_set_kernel_arg_struct_array(cl_device_id deviceID, cl_context context, clKernelWrapper kernel; clMemWrapper streams[2]; size_t threads[1], localThreads[1]; - cl_int outputData[10]; int i; MTdata d; + num_elements = 10; + std::vector outputData(num_elements); + typedef struct img_pair_type { int A; int B; } image_pair_t; - image_pair_t image_pair[ 10 ]; + std::vector image_pair(num_elements); /* Create a kernel to test with */ @@ -461,16 +491,19 @@ int test_set_kernel_arg_struct_array(cl_device_id deviceID, cl_context context, /* Create some I/O streams */ d = init_genrand( gRandomSeed ); - for( i = 0; i < 10; i++ ) + for (i = 0; i < num_elements; i++) { image_pair[i].A = (cl_int)genrand_int32(d); image_pair[i].B = (cl_int)genrand_int32(d); } free_mtdata(d); d = NULL; - streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), sizeof(image_pair_t) * 10, (void *)image_pair, &error); + streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), + sizeof(image_pair_t) * num_elements, + (void *)image_pair.data(), &error); test_error( error, "Creating test array failed" ); - streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), sizeof(cl_int) * 10, NULL, &error); + streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), + sizeof(cl_int) * num_elements, NULL, &error); test_error( error, "Creating test array failed" ); /* Set the arguments */ @@ -480,7 +513,7 @@ int test_set_kernel_arg_struct_array(cl_device_id deviceID, cl_context context, test_error( error, "Unable to set indexed kernel arguments" ); /* Test running the kernel and verifying it */ - threads[0] = (size_t)10; + threads[0] = (size_t)num_elements; error = get_max_common_work_group_size( context, kernel, threads[0], &localThreads[0] ); test_error( error, "Unable to get work group size to use" ); @@ -488,10 +521,12 @@ int test_set_kernel_arg_struct_array(cl_device_id deviceID, cl_context context, error = clEnqueueNDRangeKernel( queue, kernel, 1, NULL, threads, localThreads, 0, NULL, NULL ); test_error( error, "Kernel execution failed" ); - error = clEnqueueReadBuffer( queue, streams[1], CL_TRUE, 0, sizeof(cl_int)*10, (void *)outputData, 0, NULL, NULL ); + error = clEnqueueReadBuffer(queue, streams[1], CL_TRUE, 0, + sizeof(cl_int) * num_elements, + (void *)outputData.data(), 0, NULL, NULL); test_error( error, "Unable to get result data" ); - for (i=0; i<10; i++) + for (i = 0; i < num_elements; i++) { if (outputData[i] != image_pair[i].A + image_pair[i].B) { @@ -539,11 +574,12 @@ int test_kernel_global_constant(cl_device_id deviceID, cl_context context, cl_co clKernelWrapper kernel; clMemWrapper streams[2]; size_t threads[1], localThreads[1]; - cl_int outputData[10]; int i; - cl_int randomTestDataA[10]; MTdata d; + num_elements = 10; + std::vector outputData(num_elements); + std::vector randomTestDataA(num_elements); /* Create a kernel to test with */ if( create_single_kernel_helper( context, &program, &kernel, 1, sample_const_global_test_kernel, "sample_test" ) != 0 ) @@ -553,15 +589,18 @@ int test_kernel_global_constant(cl_device_id deviceID, cl_context context, cl_co /* Create some I/O streams */ d = init_genrand( gRandomSeed ); - for( i = 0; i < 10; i++ ) + for (i = 0; i < num_elements; i++) { randomTestDataA[i] = (cl_int)genrand_int32(d) & 0xffff; /* Make sure values are positive and small, just so we don't have to */ } free_mtdata(d); d = NULL; - streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), sizeof(cl_int) * 10, randomTestDataA, &error); + streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), + sizeof(cl_int) * num_elements, + randomTestDataA.data(), &error); test_error( error, "Creating test array failed" ); - streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), sizeof(cl_int) * 10, NULL, &error); + streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), + sizeof(cl_int) * num_elements, NULL, &error); test_error( error, "Creating test array failed" ); /* Set the arguments */ @@ -572,7 +611,7 @@ int test_kernel_global_constant(cl_device_id deviceID, cl_context context, cl_co /* Test running the kernel and verifying it */ - threads[0] = (size_t)10; + threads[0] = (size_t)num_elements; error = get_max_common_work_group_size( context, kernel, threads[0], &localThreads[0] ); test_error( error, "Unable to get work group size to use" ); @@ -580,10 +619,12 @@ int test_kernel_global_constant(cl_device_id deviceID, cl_context context, cl_co error = clEnqueueNDRangeKernel( queue, kernel, 1, NULL, threads, localThreads, 0, NULL, NULL ); test_error( error, "Kernel execution failed" ); - error = clEnqueueReadBuffer( queue, streams[1], CL_TRUE, 0, sizeof(cl_int)*10, (void *)outputData, 0, NULL, NULL ); + error = clEnqueueReadBuffer(queue, streams[1], CL_TRUE, 0, + sizeof(cl_int) * num_elements, + (void *)outputData.data(), 0, NULL, NULL); test_error( error, "Unable to get result data" ); - for (i=0; i<10; i++) + for (i = 0; i < num_elements; i++) { if (outputData[i] != randomTestDataA[i] + 1024) {