clGetPlatformIDs(1, &platformID, &numPlatforms);
clGetDeviceIDs(platformID, CL_DEVICE_TYPE_DEFAULT, 1, &deviceID, &numDevices);
context = clCreateContext(NULL, 1, &deviceID, NULL, NULL, NULL);
commandQueue = clCreateCommandQueue(context, deviceID, 0, NULL);
memOP = clCreateBuffer(context, CL_MEM_READ_ONLY, MAX_OP * sizeof(Coord), NULL, NULL);
memSegment = clCreateBuffer(context, CL_MEM_READ_ONLY, MAX_SEGMENTEN * sizeof(Coord), NULL, NULL);
memAfstanden = clCreateBuffer(context, CL_MEM_WRITE_ONLY, MAX_AFSTANDEN * sizeof(double), NULL, NULL);
clEnqueueWriteBuffer(commandQueue, memOP, CL_TRUE, 0, MAX_OP * sizeof(Coord), OP, 0, NULL, NULL);
clEnqueueWriteBuffer(commandQueue, memSegment, CL_TRUE, 0, MAX_SEGMENTEN * sizeof(Coord), segmentArray, 0, NULL, NULL);
clCreateProgramWithSource(context, 1, (const char **)&kernelSource, (const size_t *)&kernelLength, NULL);
clBuildProgram(program, 1, &deviceID, NULL, NULL, NULL);
kernel = clCreateKernel(program, "afstand", NULL);
clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&memOP);
clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&memSegment);
clSetKernelArg(kernel, 2, sizeof(cl_mem), (void *)&memAfstanden);
clSetKernelArg(kernel, 3, sizeof(int), FLIGHTALTITUDE);
clEnqueueNDRangeKernel(commandQueue, kernel, 1, NULL, MAX_AFSTANDEN, 1, 0, NULL, NULL);
clEnqueueReadBuffer(commandQueue, memAfstanden, CL_TRUE, 0, MAX_AFSTANDEN * sizeof(double), afstanden, 0, NULL, NULL);
fopen_s(&optr, "C:\\Cio\\IO.txt", "wt");
for(i = 0; i < MAX_OP; i++)
{
for(z = 0; z < MAX_SEGMENTEN; z++)
{
fprintf(optr, "OP %d ligt %3.2lfkm van segment %d af\n", i, afstanden[MAX_SEGMENTEN*i + z], z);
}
}
fclose(optr);
clFlush(commandQueue);
clFinish(commandQueue);
clReleaseKernel(kernel);
clReleaseProgram(program);
clReleaseMemObject(memOP);
clReleaseMemObject(memSegment);
clReleaseMemObject(memAfstanden);
clReleaseCommandQueue(commandQueue);
clReleaseContext(context);