Program Listing for File openclErrorIdentifier.cpp#
↰ Return to documentation for file (librapid/src/openclErrorIdentifier.cpp)
#include <librapid/librapid.hpp>
namespace librapid::opencl {
#if defined(LIBRAPID_HAS_OPENCL)
std::string getOpenCLErrorString(int64_t error) {
static const char *strings[] = { // Error Codes
"CL_SUCCESS", // 0
"CL_DEVICE_NOT_FOUND", // -1
"CL_DEVICE_NOT_AVAILABLE", // -2
"CL_COMPILER_NOT_AVAILABLE", // -3
"CL_MEM_OBJECT_ALLOCATION_FAILURE", // -4
"CL_OUT_OF_RESOURCES", // -5
"CL_OUT_OF_HOST_MEMORY", // -6
"CL_PROFILING_INFO_NOT_AVAILABLE", // -7
"CL_MEM_COPY_OVERLAP", // -8
"CL_IMAGE_FORMAT_MISMATCH", // -9
"CL_IMAGE_FORMAT_NOT_SUPPORTED", // -10
"CL_BUILD_PROGRAM_FAILURE", // -11
"CL_MAP_FAILURE", // -12
"", // -13
"", // -14
"", // -15
"", // -16
"", // -17
"", // -18
"", // -19
"", // -20
"", // -21
"", // -22
"", // -23
"", // -24
"", // -25
"", // -26
"", // -27
"", // -28
"", // -29
"CL_INVALID_VALUE", // -30
"CL_INVALID_DEVICE_TYPE", // -31
"CL_INVALID_PLATFORM", // -32
"CL_INVALID_DEVICE", // -33
"CL_INVALID_CONTEXT", // -34
"CL_INVALID_QUEUE_PROPERTIES", // -35
"CL_INVALID_COMMAND_QUEUE", // -36
"CL_INVALID_HOST_PTR", // -37
"CL_INVALID_MEM_OBJECT", // -38
"CL_INVALID_IMAGE_FORMAT_DESCRIPTOR", // -39
"CL_INVALID_IMAGE_SIZE", // -40
"CL_INVALID_SAMPLER", // -41
"CL_INVALID_BINARY", // -42
"CL_INVALID_BUILD_OPTIONS", // -43
"CL_INVALID_PROGRAM", // -44
"CL_INVALID_PROGRAM_EXECUTABLE", // -45
"CL_INVALID_KERNEL_NAME", // -46
"CL_INVALID_KERNEL_DEFINITION", // -47
"CL_INVALID_KERNEL", // -48
"CL_INVALID_ARG_INDEX", // -49
"CL_INVALID_ARG_VALUE", // -50
"CL_INVALID_ARG_SIZE", // -51
"CL_INVALID_KERNEL_ARGS", // -52
"CL_INVALID_WORK_DIMENSION", // -53
"CL_INVALID_WORK_GROUP_SIZE", // -54
"CL_INVALID_WORK_ITEM_SIZE", // -55
"CL_INVALID_GLOBAL_OFFSET", // -56
"CL_INVALID_EVENT_WAIT_LIST", // -57
"CL_INVALID_EVENT", // -58
"CL_INVALID_OPERATION", // -59
"CL_INVALID_GL_OBJECT", // -60
"CL_INVALID_BUFFER_SIZE", // -61
"CL_INVALID_MIP_LEVEL", // -62
"CL_INVALID_GLOBAL_WORK_SIZE", // -63
"CL_UNKNOWN_ERROR_CODE"};
if (error >= -63 && error <= 0)
return strings[-error];
else
return strings[64];
}
std::string getCLBlastErrorString(clblast::StatusCode status) {
// clang-format off
static const std::map<clblast::StatusCode, std::string> statusMap = {
{clblast::StatusCode::kSuccess, "CL_SUCCESS"},
{clblast::StatusCode::kOpenCLCompilerNotAvailable, "CL_COMPILER_NOT_AVAILABLE"},
{clblast::StatusCode::kTempBufferAllocFailure, "CL_MEM_OBJECT_ALLOCATION_FAILURE"},
{clblast::StatusCode::kOpenCLOutOfResources, "CL_OUT_OF_RESOURCES"},
{clblast::StatusCode::kOpenCLOutOfHostMemory, "CL_OUT_OF_HOST_MEMORY"},
{clblast::StatusCode::kOpenCLBuildProgramFailure, "CL_BUILD_PROGRAM_FAILURE"},
{clblast::StatusCode::kInvalidValue, "CL_INVALID_VALUE"},
{clblast::StatusCode::kInvalidCommandQueue, "CL_INVALID_COMMAND_QUEUE"},
{clblast::StatusCode::kInvalidMemObject, "CL_INVALID_MEM_OBJECT"},
{clblast::StatusCode::kInvalidBinary, "CL_INVALID_BINARY"},
{clblast::StatusCode::kInvalidBuildOptions, "CL_INVALID_BUILD_OPTIONS"},
{clblast::StatusCode::kInvalidProgram, "CL_INVALID_PROGRAM"},
{clblast::StatusCode::kInvalidProgramExecutable, "CL_INVALID_PROGRAM_EXECUTABLE"},
{clblast::StatusCode::kInvalidKernelName, "CL_INVALID_KERNEL_NAME"},
{clblast::StatusCode::kInvalidKernelDefinition, "CL_INVALID_KERNEL_DEFINITION"},
{clblast::StatusCode::kInvalidKernel, "CL_INVALID_KERNEL"},
{clblast::StatusCode::kInvalidArgIndex, "CL_INVALID_ARG_INDEX"},
{clblast::StatusCode::kInvalidArgValue, "CL_INVALID_ARG_VALUE"},
{clblast::StatusCode::kInvalidArgSize, "CL_INVALID_ARG_SIZE"},
{clblast::StatusCode::kInvalidKernelArgs, "CL_INVALID_KERNEL_ARGS"},
{clblast::StatusCode::kInvalidLocalNumDimensions, "CL_INVALID_WORK_DIMENSION"},
{clblast::StatusCode::kInvalidLocalThreadsTotal, "CL_INVALID_WORK_GROUP_SIZE"},
{clblast::StatusCode::kInvalidLocalThreadsDim, "CL_INVALID_WORK_ITEM_SIZE"},
{clblast::StatusCode::kInvalidGlobalOffset, "CL_INVALID_GLOBAL_OFFSET"},
{clblast::StatusCode::kInvalidEventWaitList, "CL_INVALID_EVENT_WAIT_LIST"},
{clblast::StatusCode::kInvalidEvent, "CL_INVALID_EVENT"},
{clblast::StatusCode::kInvalidOperation, "CL_INVALID_OPERATION"},
{clblast::StatusCode::kInvalidBufferSize, "CL_INVALID_BUFFER_SIZE"},
{clblast::StatusCode::kInvalidGlobalWorkSize, "CL_INVALID_GLOBAL_WORK_SIZE"},
{clblast::StatusCode::kNotImplemented, "Routine or functionality not implemented yet"},
{clblast::StatusCode::kInvalidMatrixA, "Matrix A is not a valid OpenCL buffer"},
{clblast::StatusCode::kInvalidMatrixB, "Matrix B is not a valid OpenCL buffer"},
{clblast::StatusCode::kInvalidMatrixC, "Matrix C is not a valid OpenCL buffer"},
{clblast::StatusCode::kInvalidVectorX, "Vector X is not a valid OpenCL buffer"},
{clblast::StatusCode::kInvalidVectorY, "Vector Y is not a valid OpenCL buffer"},
{clblast::StatusCode::kInvalidDimension, "Dimensions M, N, and K have to be larger than zero"},
{clblast::StatusCode::kInvalidLeadDimA, "LD of A is smaller than the matrix's first dimension"},
{clblast::StatusCode::kInvalidLeadDimB, "LD of B is smaller than the matrix's first dimension"},
{clblast::StatusCode::kInvalidLeadDimC, "LD of C is smaller than the matrix's first dimension"},
{clblast::StatusCode::kInvalidIncrementX, "Increment of vector X cannot be zero"},
{clblast::StatusCode::kInvalidIncrementY, "Increment of vector Y cannot be zero"},
{clblast::StatusCode::kInsufficientMemoryA, "Matrix A's OpenCL buffer is too small"},
{clblast::StatusCode::kInsufficientMemoryB, "Matrix B's OpenCL buffer is too small"},
{clblast::StatusCode::kInsufficientMemoryC, "Matrix C's OpenCL buffer is too small"},
{clblast::StatusCode::kInsufficientMemoryX, "Vector X's OpenCL buffer is too small"},
{clblast::StatusCode::kInsufficientMemoryY, "Vector Y's OpenCL buffer is too small"},
{clblast::StatusCode::kInsufficientMemoryTemp, "Temporary buffer provided to GEMM routine is too small"},
{clblast::StatusCode::kInvalidBatchCount, "Batch count needs to be positive"},
{clblast::StatusCode::kInsufficientMemoryTemp, "Temporary buffer provided to GEMM routine is too small"},
{clblast::StatusCode::kInvalidBatchCount, "The batch count needs to be positive"},
{clblast::StatusCode::kInvalidOverrideKernel, "Trying to override parameters for an invalid kernel"},
{clblast::StatusCode::kMissingOverrideParameter, "Missing override parameter(s) for the target kernel"},
{clblast::StatusCode::kInvalidLocalMemUsage, "Not enough local memory available on this device"},
{clblast::StatusCode::kNoHalfPrecision, "Half precision (16-bits) not supported by the device"},
{clblast::StatusCode::kNoDoublePrecision, "Double precision (64-bits) not supported by the device"},
{clblast::StatusCode::kInvalidVectorScalar, "The unit-sized vector is not a valid OpenCL buffer"},
{clblast::StatusCode::kInsufficientMemoryScalar, "The unit-sized vector's OpenCL buffer is too small"},
{clblast::StatusCode::kDatabaseError, "Entry for the device was not found in the database"},
{clblast::StatusCode::kUnknownError, "A catch-all error code representing an unspecified error"},
{clblast::StatusCode::kUnexpectedError, "A catch-all error code representing an unexpected exception"}};
// clang-format on
auto it = statusMap.find(status);
if (it != statusMap.end())
return it->second;
else
return "Unknown error";
}
#endif // LIBRAPID_HAS_OPENCL
} // namespace librapid::opencl