Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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");
}