Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.07 KB | None | 0 0
  1. #include <time.h>
  2. #include <iostream>
  3. #include <math.h>
  4. #include <CL\cl.h>
  5. #include <CL\cl_platform.h>
  6. using namespace std;
  7.  
  8. int main(){
  9.  
  10.     const int size = 1000000;
  11.     int c=0;
  12.     float* A = new float[size];
  13.     float* B= new float[size];
  14.     float* C= new float[size];
  15.     const char* ker;
  16.     ker = "__kernel void vecadd(__global const float *A,__global const float *B,__global float *C) {   int idx = get_global_id(0);  C[idx] = A[idx] + B[idx];}";
  17.    
  18.     for(int i = 0; i < size; i++){
  19.         A[i] = float(rand());
  20.         B[i] = float(rand());
  21.         C[i] = 0;
  22.     }
  23.  
  24.     size_t global_work_size = size;
  25.    
  26.     start=clock();
  27.  
  28.     cl_platform_id cpPlatform;
  29.         clGetPlatformIDs(1, &cpPlatform, NULL);
  30.         cl_device_id cdDevice;
  31.         clGetDeviceIDs(cpPlatform, CL_DEVICE_TYPE_GPU, 1, &cdDevice, NULL);
  32.         cl_context context = clCreateContext(0, 1, &cdDevice, NULL, NULL, NULL);
  33.     cl_command_queue cmd_queue = clCreateCommandQueue(context,cdDevice,0,0);
  34.     cl_program program = clCreateProgramWithSource(context,1,&ker,0,0);
  35.     clBuildProgram(program,0,0,0,0,0);
  36.     cl_kernel kernel = clCreateKernel(program,"vecadd",0);
  37.    
  38.     cl_mem DeviceMemA,DeviceMemB,DeviceMemC;
  39.     DeviceMemA =   clCreateBuffer(context,CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR,size*sizeof(cl_float),A,0);
  40.     DeviceMemB = clCreateBuffer(context,CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR,size*sizeof(cl_float),B,0);
  41.     DeviceMemC = clCreateBuffer(context,CL_MEM_WRITE_ONLY,size*sizeof(cl_float),0,0);
  42.  
  43.     clSetKernelArg(kernel,0,sizeof(cl_mem),(void*)&DeviceMemA);
  44.     clSetKernelArg(kernel,1,sizeof(cl_mem),(void*)&DeviceMemB);
  45.     clSetKernelArg(kernel,2,sizeof(cl_mem),(void*)&DeviceMemC);
  46.  
  47.     clEnqueueNDRangeKernel(cmd_queue,kernel,1,0,&global_work_size,0,0,0,0);
  48.  
  49.     clEnqueueReadBuffer(cmd_queue,DeviceMemC,CL_TRUE,0,global_work_size*sizeof(cl_float),C,0,0,0);
  50.    
  51.     clReleaseKernel(kernel);
  52.     clReleaseProgram(program);
  53.     clReleaseCommandQueue(cmd_queue);
  54.     clReleaseContext(context);
  55.     clReleaseMemObject(DeviceMemA);
  56.     clReleaseMemObject(DeviceMemB);
  57.     clReleaseMemObject(DeviceMemC);
  58.     delete [] A;
  59.     delete [] B;
  60.     delete [] C;
  61.  
  62.    
  63.  
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement