int32_t init_kernel_platform() { cl_uint plat_num; cl_platform_id plat_id = NULL; cl_uint dev_num = 0; cl_device_id *devices; ret = clGetPlatformIDs(0, NULL, &plat_num); if (ret < 0) { printf("MU1 Error: Getting plat_ids!\n"); return -1; } if(plat_num > 0) { cl_platform_id* plat_ids = (cl_platform_id* )malloc(plat_num* sizeof(cl_platform_id)); ret = clGetPlatformIDs(plat_num, plat_ids, NULL); plat_id = plat_ids[0]; free(plat_ids); } ret = clGetDeviceIDs(plat_id, CL_DEVICE_TYPE_GPU, 0, NULL, &dev_num); if (dev_num == 0) { printf("MU1: No GPU device available.\n"); printf("MU1: Choose CPU as default device.\n"); ret = clGetDeviceIDs(plat_id, CL_DEVICE_TYPE_CPU, 0, NULL, &dev_num); devices = (cl_device_id*)malloc(dev_num * sizeof(cl_device_id)); ret = clGetDeviceIDs(plat_id, CL_DEVICE_TYPE_CPU, dev_num, devices, NULL); } else { printf("MU1: Choose GPU as default device. dev_num %d\n", dev_num); devices = (cl_device_id*)malloc(dev_num * sizeof(cl_device_id)); ret = clGetDeviceIDs(plat_id, CL_DEVICE_TYPE_GPU, dev_num, devices, NULL); } context = clCreateContext(NULL,1, devices,NULL,NULL,NULL); commandQueue = clCreateCommandQueue(context, devices[0], 0, NULL); char filename[] = "core.cl"; char file_context[10*1024]={0}; const char *source = &file_context[0]; ret = read_cl(filename, &file_context[0]); size_t sourceSize[10] = {strlen(source)}; cl_program program = clCreateProgramWithSource(context, 1, &source, &sourceSize[0], NULL); ret = clBuildProgram(program, 1, devices, NULL, NULL, NULL); if(ret < 0) { printf("MU1 Error: clBuildProgram error\n"); return 0; } kernel = clCreateKernel(program, "process_iq", NULL); inputBuffer_i = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, 512*1024*4, (void *)(&table_i[0][0]), NULL); inputBuffer_q = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, 512*1024*4, (void *)(&table_q[0][0]), NULL); inputBuffer_o = clCreateBuffer(context, CL_MEM_WRITE_ONLY | CL_MEM_COPY_HOST_PTR, 512*1024*4, (void *)(&table_o[0][0]), NULL); ret = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&inputBuffer_i); ret = clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&inputBuffer_q); ret = clSetKernelArg(kernel, 2, sizeof(cl_mem), (void *)&inputBuffer_o); if(devices != NULL) { free(devices);} printf("MU1: init cl plat success\n"); return 0; }
void read_data() { char filename[128]; FILE *pf; int ref; int ii, jj, ll; int ind, bin; fprintf(stderr, "Read source galaxy power spectrum..."); cmb = read_cl(-1, -1); fprintf(stderr, "mtp=%d", mtp); show(mtp, cmb); fprintf(stderr, "done!\n"); fprintf(stderr, "Read image galaxy power spectrum...\n"); ind = 0; for (ii = 0; ii < BIN; ii++) { for (jj = ii; jj < BIN; jj++) { fprintf(stderr, "...%d%d\t", ii, jj); cab[ind] = read_cl(ii, jj); show(mtp, cab[ind]); ind++; } } assert(ind == BIN2); fprintf(stderr, "done!\n"); ind = 0; for (ii = 0; ii < BIN; ii++) { for (jj = ii; jj < BIN; jj++) { for (ll = 0; ll < mtp; ll++) { cab[ind][ll] = cmb[ll]*(1.0+(ii+jj+2)/2.0/BIN); } ind++; } } fprintf(stderr, "Read average number density..."); sprintf(filename, "%s/ave.dat", path); pf = fopen(filename, "rb"); assert(pf != NULL); ref = fread(&bin,sizeof(int),(size_t)1,pf); assert(bin == BIN); ref = fread(&ave,sizeof(float),(size_t)BIN,pf); ref = fread(&bin,sizeof(int),(size_t)1,pf); assert(bin == BIN); fclose(pf); show(BIN, ave); fprintf(stderr, "done!\n"); fprintf(stderr, "Read lominosity slope...\n"); sprintf(filename, "%s/slp.dat", path); pf = fopen(filename, "rb"); assert(pf != NULL); ref = fread(&bin,sizeof(int),(size_t)1,pf); assert(bin == BIN); ref = fread(&slp,sizeof(float),(size_t)BIN,pf); ref = fread(&bin,sizeof(int),(size_t)1,pf); assert(bin == BIN); fclose(pf); show(BIN, slp); fprintf(stderr, "done!\n"); }