From 6605c05adf8775eddb1d4045b408895e0183f931 Mon Sep 17 00:00:00 2001 From: David Phillips Date: Sun, 12 Feb 2017 21:04:58 +1300 Subject: Add stringy CL error messages --- Makefile | 2 +- cl_error.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cl_error.h | 3 +++ trampoline.c | 26 ++++++++++++++----- 4 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 cl_error.c create mode 100644 cl_error.h diff --git a/Makefile b/Makefile index 1dd24f6..a108bef 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ include config.mk -fractal-gen: fractal-gen.o trampoline.o slurp.o +fractal-gen: fractal-gen.o cl_error.o trampoline.o slurp.o .PHONY: clean diff --git a/cl_error.c b/cl_error.c new file mode 100644 index 0000000..293a3d8 --- /dev/null +++ b/cl_error.c @@ -0,0 +1,84 @@ +#include + +static const char *cl_error_strings[] = { + "CL_SUCCESS", + "CL_DEVICE_NOT_FOUND", + "CL_DEVICE_NOT_AVAILABLE", + "CL_COMPILER_NOT_AVAILABLE", + "CL_MEM_OBJECT_ALLOCATION_FAILURE", + "CL_OUT_OF_RESOURCES", + "CL_OUT_OF_HOST_MEMORY", + "CL_PROFILING_INFO_NOT_AVAILABLE", + "CL_MEM_COPY_OVERLAP", + "CL_IMAGE_FORMAT_MISMATCH", + "CL_IMAGE_FORMAT_NOT_SUPPORTED", + "CL_BUILD_PROGRAM_FAILURE", + "CL_MAP_FAILURE", + "CL_MISALIGNED_SUB_BUFFER_OFFSET", + "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST", + "CL_COMPILE_PROGRAM_FAILURE", + "CL_LINKER_NOT_AVAILABLE", + "CL_LINK_PROGRAM_FAILURE", + "CL_DEVICE_PARTITION_FAILED", + "CL_KERNEL_ARG_INFO_NOT_AVAILABLE", + "(Invalid)", + "(Invalid)", + "(Invalid)", + "(Invalid)", + "(Invalid)", + "(Invalid)", + "(Invalid)", + "(Invalid)", + "(Invalid)", + "(Invalid)", + "CL_INVALID_VALUE", + "CL_INVALID_DEVICE_TYPE", + "CL_INVALID_PLATFORM", + "CL_INVALID_DEVICE", + "CL_INVALID_CONTEXT", + "CL_INVALID_QUEUE_PROPERTIES", + "CL_INVALID_COMMAND_QUEUE", + "CL_INVALID_HOST_PTR", + "CL_INVALID_MEM_OBJECT", + "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR", + "CL_INVALID_IMAGE_SIZE", + "CL_INVALID_SAMPLER", + "CL_INVALID_BINARY", + "CL_INVALID_BUILD_OPTIONS", + "CL_INVALID_PROGRAM", + "CL_INVALID_PROGRAM_EXECUTABLE", + "CL_INVALID_KERNEL_NAME", + "CL_INVALID_KERNEL_DEFINITION", + "CL_INVALID_KERNEL", + "CL_INVALID_ARG_INDEX", + "CL_INVALID_ARG_VALUE", + "CL_INVALID_ARG_SIZE", + "CL_INVALID_KERNEL_ARGS", + "CL_INVALID_WORK_DIMENSION", + "CL_INVALID_WORK_GROUP_SIZE", + "CL_INVALID_WORK_ITEM_SIZE", + "CL_INVALID_GLOBAL_OFFSET", + "CL_INVALID_EVENT_WAIT_LIST", + "CL_INVALID_EVENT", + "CL_INVALID_OPERATION", + "CL_INVALID_GL_OBJECT", + "CL_INVALID_BUFFER_SIZE", + "CL_INVALID_MIP_LEVEL", + "CL_INVALID_GLOBAL_WORK_SIZE", + "CL_INVALID_PROPERTY", + "CL_INVALID_IMAGE_DESCRIPTOR", + "CL_INVALID_COMPILER_OPTIONS", + "CL_INVALID_LINKER_OPTIONS", + "CL_INVALID_DEVICE_PARTITION_COUNT", + "CL_INVALID_PIPE_SIZE", + "CL_INVALID_DEVICE_QUEUE", +}; + +const char *get_cl_error_string(cl_int error) +{ + error = -error; + if (error < 0 || error > sizeof(cl_error_strings) / sizeof(const char *)) + return "Error value out of bounds"; + + return cl_error_strings[error]; +} diff --git a/cl_error.h b/cl_error.h new file mode 100644 index 0000000..7f4a95d --- /dev/null +++ b/cl_error.h @@ -0,0 +1,3 @@ +#include + +const char *get_cl_error_string(cl_int error); diff --git a/trampoline.c b/trampoline.c index 2dbccc9..fcc3402 100644 --- a/trampoline.c +++ b/trampoline.c @@ -2,6 +2,7 @@ #include #include +#include "cl_error.h" #include "slurp.h" static cl_platform_id platform; @@ -92,8 +93,10 @@ int tramp_load_kernel(const char *filename) program = clCreateProgramWithSource(context, 1, (const char **)&source, &length, &res); - if (res != CL_SUCCESS) + if (res != CL_SUCCESS) { + fprintf(stderr, "Failed to create program from source code: %s ", get_cl_error_string(res)); return 1; + } free(source); source = NULL; @@ -156,21 +159,30 @@ int tramp_set_kernel_args(unsigned int s, unsigned int it) size = s; iterations = it; - device_buffer = clCreateBuffer(context, CL_MEM_WRITE_ONLY, size*size, NULL, &ret); if (ret != CL_SUCCESS) return 1; ret = clSetKernelArg(kernel, 0, sizeof(cl_mem), &device_buffer); - fprintf(stderr, "first: %d\n", ret); + if (ret != CL_SUCCESS) { + fprintf(stderr, "Error on buffer argument: %s ", get_cl_error_string(ret)); + return 1; + } + ret = clSetKernelArg(kernel, 1, sizeof(unsigned int), &size); - fprintf(stderr, "first: %d\n", ret); + if (ret != CL_SUCCESS) { + fprintf(stderr, "Error on size argument: %s ", get_cl_error_string(ret)); + return 1; + } + ret = clSetKernelArg(kernel, 2, sizeof(unsigned int), &iterations); - fprintf(stderr, "first: %d\n", ret); + if (ret != CL_SUCCESS) { + fprintf(stderr, "Error on iteration argument: %s ", get_cl_error_string(ret)); + return 1; + } - /* FIXME check all clSetKernelArg */ - return ret != CL_SUCCESS; + return 0; } int tramp_run_kernel() -- cgit v1.1