Skip to content

Commit

Permalink
GPU OpenCL: Add more human readable error codes, shorten code
Browse files Browse the repository at this point in the history
  • Loading branch information
davidrohr committed Feb 25, 2025
1 parent b241b90 commit 793a25e
Showing 1 changed file with 68 additions and 96 deletions.
164 changes: 68 additions & 96 deletions GPU/GPUTracking/Base/opencl/GPUReconstructionOCL.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

#include "GPUReconstructionOCLIncludesHost.h"

#include <map>

static_assert(std::is_convertible<cl_event, void*>::value, "OpenCL event type incompatible to deviceEvent");

#define GPUErrorReturn(...) \
Expand Down Expand Up @@ -586,100 +588,70 @@ int32_t GPUReconstructionOCLBackend::GetOCLPrograms()

const char* GPUReconstructionOCLBackend::convertErrorToString(int32_t errorcode)
{
switch (errorcode) {
case CL_SUCCESS:
return "Success!";
case CL_DEVICE_NOT_FOUND:
return "Device not found.";
case CL_DEVICE_NOT_AVAILABLE:
return "Device not available";
case CL_COMPILER_NOT_AVAILABLE:
return "Compiler not available";
case CL_MEM_OBJECT_ALLOCATION_FAILURE:
return "Memory object allocation failure";
case CL_OUT_OF_RESOURCES:
return "Out of resources";
case CL_OUT_OF_HOST_MEMORY:
return "Out of host memory";
case CL_PROFILING_INFO_NOT_AVAILABLE:
return "Profiling information not available";
case CL_MEM_COPY_OVERLAP:
return "Memory copy overlap";
case CL_IMAGE_FORMAT_MISMATCH:
return "Image format mismatch";
case CL_IMAGE_FORMAT_NOT_SUPPORTED:
return "Image format not supported";
case CL_BUILD_PROGRAM_FAILURE:
return "Program build failure";
case CL_MAP_FAILURE:
return "Map failure";
case CL_INVALID_VALUE:
return "Invalid value";
case CL_INVALID_DEVICE_TYPE:
return "Invalid device type";
case CL_INVALID_PLATFORM:
return "Invalid platform";
case CL_INVALID_DEVICE:
return "Invalid device";
case CL_INVALID_CONTEXT:
return "Invalid context";
case CL_INVALID_QUEUE_PROPERTIES:
return "Invalid queue properties";
case CL_INVALID_COMMAND_QUEUE:
return "Invalid command queue";
case CL_INVALID_HOST_PTR:
return "Invalid host pointer";
case CL_INVALID_MEM_OBJECT:
return "Invalid memory object";
case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR:
return "Invalid image format descriptor";
case CL_INVALID_IMAGE_SIZE:
return "Invalid image size";
case CL_INVALID_SAMPLER:
return "Invalid sampler";
case CL_INVALID_BINARY:
return "Invalid binary";
case CL_INVALID_BUILD_OPTIONS:
return "Invalid build options";
case CL_INVALID_PROGRAM:
return "Invalid program";
case CL_INVALID_PROGRAM_EXECUTABLE:
return "Invalid program executable";
case CL_INVALID_KERNEL_NAME:
return "Invalid kernel name";
case CL_INVALID_KERNEL_DEFINITION:
return "Invalid kernel definition";
case CL_INVALID_KERNEL:
return "Invalid kernel";
case CL_INVALID_ARG_INDEX:
return "Invalid argument index";
case CL_INVALID_ARG_VALUE:
return "Invalid argument value";
case CL_INVALID_ARG_SIZE:
return "Invalid argument size";
case CL_INVALID_KERNEL_ARGS:
return "Invalid kernel arguments";
case CL_INVALID_WORK_DIMENSION:
return "Invalid work dimension";
case CL_INVALID_WORK_GROUP_SIZE:
return "Invalid work group size";
case CL_INVALID_WORK_ITEM_SIZE:
return "Invalid work item size";
case CL_INVALID_GLOBAL_OFFSET:
return "Invalid global offset";
case CL_INVALID_EVENT_WAIT_LIST:
return "Invalid event wait list";
case CL_INVALID_EVENT:
return "Invalid event";
case CL_INVALID_OPERATION:
return "Invalid operation";
case CL_INVALID_GL_OBJECT:
return "Invalid OpenGL object";
case CL_INVALID_BUFFER_SIZE:
return "Invalid buffer size";
case CL_INVALID_MIP_LEVEL:
return "Invalid mip-map level";
default:
return "Unknown Errorcode";
}
static const std::map<cl_int, const char*> error_map = {
{CL_SUCCESS, "CL_SUCCESS"},
{CL_DEVICE_NOT_FOUND, "CL_DEVICE_NOT_FOUND"},
{CL_DEVICE_NOT_AVAILABLE, "CL_DEVICE_NOT_AVAILABLE"},
{CL_COMPILER_NOT_AVAILABLE, "CL_COMPILER_NOT_AVAILABLE"},
{CL_MEM_OBJECT_ALLOCATION_FAILURE, "CL_MEM_OBJECT_ALLOCATION_FAILURE"},
{CL_OUT_OF_RESOURCES, "CL_OUT_OF_RESOURCES"},
{CL_OUT_OF_HOST_MEMORY, "CL_OUT_OF_HOST_MEMORY"},
{CL_PROFILING_INFO_NOT_AVAILABLE, "CL_PROFILING_INFO_NOT_AVAILABLE"},
{CL_MEM_COPY_OVERLAP, "CL_MEM_COPY_OVERLAP"},
{CL_IMAGE_FORMAT_MISMATCH, "CL_IMAGE_FORMAT_MISMATCH"},
{CL_IMAGE_FORMAT_NOT_SUPPORTED, "CL_IMAGE_FORMAT_NOT_SUPPORTED"},
{CL_BUILD_PROGRAM_FAILURE, "CL_BUILD_PROGRAM_FAILURE"},
{CL_MAP_FAILURE, "CL_MAP_FAILURE"},
{CL_MISALIGNED_SUB_BUFFER_OFFSET, "CL_MISALIGNED_SUB_BUFFER_OFFSET"},
{CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST, "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"},
{CL_COMPILE_PROGRAM_FAILURE, "CL_COMPILE_PROGRAM_FAILURE"},
{CL_LINKER_NOT_AVAILABLE, "CL_LINKER_NOT_AVAILABLE"},
{CL_LINK_PROGRAM_FAILURE, "CL_LINK_PROGRAM_FAILURE"},
{CL_DEVICE_PARTITION_FAILED, "CL_DEVICE_PARTITION_FAILED"},
{CL_KERNEL_ARG_INFO_NOT_AVAILABLE, "CL_KERNEL_ARG_INFO_NOT_AVAILABLE"},
{CL_INVALID_VALUE, "CL_INVALID_VALUE"},
{CL_INVALID_DEVICE_TYPE, "CL_INVALID_DEVICE_TYPE"},
{CL_INVALID_PLATFORM, "CL_INVALID_PLATFORM"},
{CL_INVALID_DEVICE, "CL_INVALID_DEVICE"},
{CL_INVALID_CONTEXT, "CL_INVALID_CONTEXT"},
{CL_INVALID_QUEUE_PROPERTIES, "CL_INVALID_QUEUE_PROPERTIES"},
{CL_INVALID_COMMAND_QUEUE, "CL_INVALID_COMMAND_QUEUE"},
{CL_INVALID_HOST_PTR, "CL_INVALID_HOST_PTR"},
{CL_INVALID_MEM_OBJECT, "CL_INVALID_MEM_OBJECT"},
{CL_INVALID_IMAGE_FORMAT_DESCRIPTOR, "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR"},
{CL_INVALID_IMAGE_SIZE, "CL_INVALID_IMAGE_SIZE"},
{CL_INVALID_SAMPLER, "CL_INVALID_SAMPLER"},
{CL_INVALID_BINARY, "CL_INVALID_BINARY"},
{CL_INVALID_BUILD_OPTIONS, "CL_INVALID_BUILD_OPTIONS"},
{CL_INVALID_PROGRAM, "CL_INVALID_PROGRAM"},
{CL_INVALID_PROGRAM_EXECUTABLE, "CL_INVALID_PROGRAM_EXECUTABLE"},
{CL_INVALID_KERNEL_NAME, "CL_INVALID_KERNEL_NAME"},
{CL_INVALID_KERNEL_DEFINITION, "CL_INVALID_KERNEL_DEFINITION"},
{CL_INVALID_KERNEL, "CL_INVALID_KERNEL"},
{CL_INVALID_ARG_INDEX, "CL_INVALID_ARG_INDEX"},
{CL_INVALID_ARG_VALUE, "CL_INVALID_ARG_VALUE"},
{CL_INVALID_ARG_SIZE, "CL_INVALID_ARG_SIZE"},
{CL_INVALID_KERNEL_ARGS, "CL_INVALID_KERNEL_ARGS"},
{CL_INVALID_WORK_DIMENSION, "CL_INVALID_WORK_DIMENSION"},
{CL_INVALID_WORK_GROUP_SIZE, "CL_INVALID_WORK_GROUP_SIZE"},
{CL_INVALID_WORK_ITEM_SIZE, "CL_INVALID_WORK_ITEM_SIZE"},
{CL_INVALID_GLOBAL_OFFSET, "CL_INVALID_GLOBAL_OFFSET"},
{CL_INVALID_EVENT_WAIT_LIST, "CL_INVALID_EVENT_WAIT_LIST"},
{CL_INVALID_EVENT, "CL_INVALID_EVENT"},
{CL_INVALID_OPERATION, "CL_INVALID_OPERATION"},
{CL_INVALID_GL_OBJECT, "CL_INVALID_GL_OBJECT"},
{CL_INVALID_BUFFER_SIZE, "CL_INVALID_BUFFER_SIZE"},
{CL_INVALID_MIP_LEVEL, "CL_INVALID_MIP_LEVEL"},
{CL_INVALID_GLOBAL_WORK_SIZE, "CL_INVALID_GLOBAL_WORK_SIZE"},
{CL_INVALID_PROPERTY, "CL_INVALID_PROPERTY"},
{CL_INVALID_IMAGE_DESCRIPTOR, "CL_INVALID_IMAGE_DESCRIPTOR"},
{CL_INVALID_COMPILER_OPTIONS, "CL_INVALID_COMPILER_OPTIONS"},
{CL_INVALID_LINKER_OPTIONS, "CL_INVALID_LINKER_OPTIONS"},
{CL_INVALID_DEVICE_PARTITION_COUNT, "CL_INVALID_DEVICE_PARTITION_COUNT"},
{CL_INVALID_PIPE_SIZE, "CL_INVALID_PIPE_SIZE"},
{CL_INVALID_DEVICE_QUEUE, "CL_INVALID_DEVICE_QUEUE"},
{CL_INVALID_SPEC_ID, "CL_INVALID_SPEC_ID"},
{CL_MAX_SIZE_RESTRICTION_EXCEEDED, "CL_MAX_SIZE_RESTRICTION_EXCEEDED"}};
auto entry = error_map.find(errorcode);
return (entry != error_map.end()) ? entry->second : "Unknown Errorcode";
}

0 comments on commit 793a25e

Please sign in to comment.