Братцы, сроки поджимают и нужно закончить программульку одну.
В общем, делал-делал и пришёл я к тупику на данном этапе... не знаю, что и делать.
Изначально программа должна была высчитывать с помощью ЦПУ корень из числа.
На выходе получается большое отрицательное число.
Помогите пожалуйста исправить ошибки.
↓↓↓
#include <stdafx.h>
#include <CL/cl.h>
const char* OpenCLSource[] = {"__kernel void kor (__global float* X, __global float* SM,__global float* rez)"
"{"
"X = 10000;"
"if (X > 1) SM = X / 2; else SM = 1;"
"for(; (SM != 0); SM /= 2) if ((rez * rez) > X) rez -= SM; else rez += SM;"
"return(rez);"
"}"
};
int main(int argc, char **argv)
{
float X;
float SM;
float rez;
//Инициализация устройства
cl_context cxGPUContext = clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU, NULL, NULL, NULL);
cl_int cdDevice = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_CPU, NULL, NULL, NULL);
//Очерёдность выполнения
cl_command_queue cqCommandQue = clCreateCommandQueue(cl_context (cxGPUContext), NULL, 0, NULL);
//Memory Objects
cl_mem Xq = clCreateBuffer(cl_context (cxGPUContext), CL_MEM_WRITE_ONLY, 100, &X, NULL);
cl_mem SMq = clCreateBuffer(cl_context (cxGPUContext), CL_MEM_WRITE_ONLY, 100, &SM, NULL);
cl_mem rezq = clCreateBuffer(cl_context (cxGPUContext), CL_MEM_READ_ONLY, 100, &rez, NULL);
cl_program OpenCLProgram = clCreateProgramWithSource(cl_context (cxGPUContext), 1, OpenCLSource , NULL, NULL);
clBuildProgram(OpenCLProgram, 0, NULL, NULL, NULL, NULL);
cl_kernel kor = clCreateKernel(cl_program (OpenCLProgram), "kor2.cl", NULL);
clSetKernelArg(kor, 0, sizeof(cl_mem), (void*)&Xq);
clSetKernelArg(kor, 1, sizeof(cl_mem), (void*)&SMq);
clSetKernelArg(kor, 2, sizeof(cl_mem), (void*)&rezq);
cl_int clEnqueueNDRangeKernel(cl_command_queue (cqCommandQue));
clEnqueueReadBuffer(cqCommandQue, rezq, CL_TRUE, 0, sizeof(cl_float), rezq, 0, NULL, NULL);
printf("Hello %f\n", rez);
}