123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include "OpenCL_helper_library.h"
- // Loads the kernel source code from the specified file into a C string and returns the string pointer
- char *load_kernel_source(const char *filename) {
- // Open the source file
- FILE *file = fopen(filename, "r");
- if (file == NULL) fatal("Error opening kernel source file\n");
- // Determine the size of the file
- if (fseek(file, 0, SEEK_END)) fatal("Error reading kernel source file\n");
- size_t size = ftell(file);
- // Allocate space for the source code (plus one for null-terminator)
- char *source = (char *) malloc(size + 1);
- // Read the source code into the string
- fseek(file, 0, SEEK_SET);
- // printf("Number of elements: %lu\nSize = %lu", fread(source, 1, size, file), size);
- // exit(1);
- if (fread(source, 1, size, file) != size) fatal("Error reading kernel source file\n");
- // Null-terminate the string
- source[size] = '\0';
- // Return the pointer to the string
- return source;
- }
- // Returns the current system time in microseconds
- long long get_time() {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (tv.tv_sec * 1000000) + tv.tv_usec;
- }
- void fatal(const char *s) {
- fprintf(stderr, "Error: %s\n", s);
- exit(1);
- }
- // Prints a string version of the specified OpenCL error code
- void fatal_CL(cl_int error, int line_no) {
- printf("Error at line %d: ", line_no);
- // Print
- switch(error) {
- case CL_SUCCESS: printf("CL_SUCCESS\n"); break;
- case CL_DEVICE_NOT_FOUND: printf("CL_DEVICE_NOT_FOUND\n"); break;
- case CL_DEVICE_NOT_AVAILABLE: printf("CL_DEVICE_NOT_AVAILABLE\n"); break;
- case CL_COMPILER_NOT_AVAILABLE: printf("CL_COMPILER_NOT_AVAILABLE\n"); break;
- case CL_MEM_OBJECT_ALLOCATION_FAILURE: printf("CL_MEM_OBJECT_ALLOCATION_FAILURE\n"); break;
- case CL_OUT_OF_RESOURCES: printf("CL_OUT_OF_RESOURCES\n"); break;
- case CL_OUT_OF_HOST_MEMORY: printf("CL_OUT_OF_HOST_MEMORY\n"); break;
- case CL_PROFILING_INFO_NOT_AVAILABLE: printf("CL_PROFILING_INFO_NOT_AVAILABLE\n"); break;
- case CL_MEM_COPY_OVERLAP: printf("CL_MEM_COPY_OVERLAP\n"); break;
- case CL_IMAGE_FORMAT_MISMATCH: printf("CL_IMAGE_FORMAT_MISMATCH\n"); break;
- case CL_IMAGE_FORMAT_NOT_SUPPORTED: printf("CL_IMAGE_FORMAT_NOT_SUPPORTED\n"); break;
- case CL_BUILD_PROGRAM_FAILURE: printf("CL_BUILD_PROGRAM_FAILURE\n"); break;
- case CL_MAP_FAILURE: printf("CL_MAP_FAILURE\n"); break;
- case CL_INVALID_VALUE: printf("CL_INVALID_VALUE\n"); break;
- case CL_INVALID_DEVICE_TYPE: printf("CL_INVALID_DEVICE_TYPE\n"); break;
- case CL_INVALID_PLATFORM: printf("CL_INVALID_PLATFORM\n"); break;
- case CL_INVALID_DEVICE: printf("CL_INVALID_DEVICE\n"); break;
- case CL_INVALID_CONTEXT: printf("CL_INVALID_CONTEXT\n"); break;
- case CL_INVALID_QUEUE_PROPERTIES: printf("CL_INVALID_QUEUE_PROPERTIES\n"); break;
- case CL_INVALID_COMMAND_QUEUE: printf("CL_INVALID_COMMAND_QUEUE\n"); break;
- case CL_INVALID_HOST_PTR: printf("CL_INVALID_HOST_PTR\n"); break;
- case CL_INVALID_MEM_OBJECT: printf("CL_INVALID_MEM_OBJECT\n"); break;
- case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: printf("CL_INVALID_IMAGE_FORMAT_DESCRIPTOR\n"); break;
- case CL_INVALID_IMAGE_SIZE: printf("CL_INVALID_IMAGE_SIZE\n"); break;
- case CL_INVALID_SAMPLER: printf("CL_INVALID_SAMPLER\n"); break;
- case CL_INVALID_BINARY: printf("CL_INVALID_BINARY\n"); break;
- case CL_INVALID_BUILD_OPTIONS: printf("CL_INVALID_BUILD_OPTIONS\n"); break;
- case CL_INVALID_PROGRAM: printf("CL_INVALID_PROGRAM\n"); break;
- case CL_INVALID_PROGRAM_EXECUTABLE: printf("CL_INVALID_PROGRAM_EXECUTABLE\n"); break;
- case CL_INVALID_KERNEL_NAME: printf("CL_INVALID_KERNEL_NAME\n"); break;
- case CL_INVALID_KERNEL_DEFINITION: printf("CL_INVALID_KERNEL_DEFINITION\n"); break;
- case CL_INVALID_KERNEL: printf("CL_INVALID_KERNEL\n"); break;
- case CL_INVALID_ARG_INDEX: printf("CL_INVALID_ARG_INDEX\n"); break;
- case CL_INVALID_ARG_VALUE: printf("CL_INVALID_ARG_VALUE\n"); break;
- case CL_INVALID_ARG_SIZE: printf("CL_INVALID_ARG_SIZE\n"); break;
- case CL_INVALID_KERNEL_ARGS: printf("CL_INVALID_KERNEL_ARGS\n"); break;
- case CL_INVALID_WORK_DIMENSION: printf("CL_INVALID_WORK_DIMENSION\n"); break;
- case CL_INVALID_WORK_GROUP_SIZE: printf("CL_INVALID_WORK_GROUP_SIZE\n"); break;
- case CL_INVALID_WORK_ITEM_SIZE: printf("CL_INVALID_WORK_ITEM_SIZE\n"); break;
- case CL_INVALID_GLOBAL_OFFSET: printf("CL_INVALID_GLOBAL_OFFSET\n"); break;
- case CL_INVALID_EVENT_WAIT_LIST: printf("CL_INVALID_EVENT_WAIT_LIST\n"); break;
- case CL_INVALID_EVENT: printf("CL_INVALID_EVENT\n"); break;
- case CL_INVALID_OPERATION: printf("CL_INVALID_OPERATION\n"); break;
- case CL_INVALID_GL_OBJECT: printf("CL_INVALID_GL_OBJECT\n"); break;
- case CL_INVALID_BUFFER_SIZE: printf("CL_INVALID_BUFFER_SIZE\n"); break;
- case CL_INVALID_MIP_LEVEL: printf("CL_INVALID_MIP_LEVEL\n"); break;
- case CL_INVALID_GLOBAL_WORK_SIZE: printf("CL_INVALID_GLOBAL_WORK_SIZE\n"); break;
- #ifdef CL_VERSION_1_1
- case CL_MISALIGNED_SUB_BUFFER_OFFSET: printf("CL_MISALIGNED_SUB_BUFFER_OFFSET\n"); break;
- case CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST: printf("CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST\n"); break;
- /* case CL_INVALID_PROPERTY: printf("CL_INVALID_PROPERTY\n"); break; */
- #endif
- default: printf("Invalid OpenCL error code\n");
- }
- exit(error);
- }
|