Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <time.h>
- #include <iostream>
- #include <math.h>
- #include <CL\cl.h>
- #include <CL\cl_platform.h>
- using namespace std;
- int main(){
- const int size = 1000000;
- int c=0;
- float* A = new float[size];
- float* B= new float[size];
- float* C= new float[size];
- const char* ker;
- 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];}";
- for(int i = 0; i < size; i++){
- A[i] = float(rand());
- B[i] = float(rand());
- C[i] = 0;
- }
- size_t global_work_size = size;
- start=clock();
- cl_platform_id cpPlatform;
- clGetPlatformIDs(1, &cpPlatform, NULL);
- cl_device_id cdDevice;
- clGetDeviceIDs(cpPlatform, CL_DEVICE_TYPE_GPU, 1, &cdDevice, NULL);
- cl_context context = clCreateContext(0, 1, &cdDevice, NULL, NULL, NULL);
- cl_command_queue cmd_queue = clCreateCommandQueue(context,cdDevice,0,0);
- cl_program program = clCreateProgramWithSource(context,1,&ker,0,0);
- clBuildProgram(program,0,0,0,0,0);
- cl_kernel kernel = clCreateKernel(program,"vecadd",0);
- cl_mem DeviceMemA,DeviceMemB,DeviceMemC;
- DeviceMemA = clCreateBuffer(context,CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR,size*sizeof(cl_float),A,0);
- DeviceMemB = clCreateBuffer(context,CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR,size*sizeof(cl_float),B,0);
- DeviceMemC = clCreateBuffer(context,CL_MEM_WRITE_ONLY,size*sizeof(cl_float),0,0);
- clSetKernelArg(kernel,0,sizeof(cl_mem),(void*)&DeviceMemA);
- clSetKernelArg(kernel,1,sizeof(cl_mem),(void*)&DeviceMemB);
- clSetKernelArg(kernel,2,sizeof(cl_mem),(void*)&DeviceMemC);
- clEnqueueNDRangeKernel(cmd_queue,kernel,1,0,&global_work_size,0,0,0,0);
- clEnqueueReadBuffer(cmd_queue,DeviceMemC,CL_TRUE,0,global_work_size*sizeof(cl_float),C,0,0,0);
- clReleaseKernel(kernel);
- clReleaseProgram(program);
- clReleaseCommandQueue(cmd_queue);
- clReleaseContext(context);
- clReleaseMemObject(DeviceMemA);
- clReleaseMemObject(DeviceMemB);
- clReleaseMemObject(DeviceMemC);
- delete [] A;
- delete [] B;
- delete [] C;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement