本程序生成一个OpenCL Program,然后获取Program的source,事实上它的source就是一个char[],能够打印出来。
然后我们把这些内容和原来文本的内容对照,看看是否是我们想要读入的内容。
还能够測试是否编译正确,假设不对会有输出提示的。
以下程序执行例如以下:
前面都是读入的函数代码。然后后面检查这些函数是否正确,能够看到第二个函数不对,由于*r未定义。
以下是完整代码:
#define _CRT_SECURE_NO_WARNINGS#include#include #include #ifdef MAC#include #else#include #endifnamespace program_build{const static int NUM_FILES = 2;const char PROGRAM_FILE_1[] = "good.cl";const char *PROGRAM_FILE_2 = "bad.cl";int run(){ /*program能够包括多个kernel,一个kernel相当于一个功能函数,由program包括在内存中,然后就能够使用kernel的功能了。 1 须要使用kernel,创建program,把kernel读入内存 2 须要把program和device连接起来 Host/device data structures */ cl_platform_id platform; cl_device_id device; cl_context context; cl_int i, err; /* Program data structures */ cl_program program; FILE *program_handle; char *program_buffer[NUM_FILES]; char *program_log; const char *file_name[] = {PROGRAM_FILE_1, PROGRAM_FILE_2}; const char options[] = "-cl-finite-math-only -cl-no-signed-zeros"; size_t program_size[NUM_FILES]; size_t log_size; /* Access the first installed platform */ err = clGetPlatformIDs(1, &platform, NULL); if(err < 0) { perror("Couldn't find any platforms"); exit(1); } /* Access the first GPU/CPU */ err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 1, &device, NULL); if(err == CL_DEVICE_NOT_FOUND) { err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_CPU, 1, &device, NULL); } if(err < 0) { perror("Couldn't find any devices"); exit(1); } /* Create a context */ context = clCreateContext(NULL, 1, &device, NULL, NULL, &err); if(err < 0) { perror("Couldn't create a context"); exit(1); } /* Read each program file and place content into buffer array */ for(i=0; i