private void init(IPartitioning p, cl_program program) { clscale = cl.CreateKernel(program, "scale"); clacc = cl.CreateKernel(program, "acc"); clmew = cl.CreateKernel(program, "mew"); cldnrm2 = cl.CreateKernel(program, "dnrm2"); clinnerprod = cl.CreateKernel(program, "innerprod"); size = p.LocalLength; globalsize = size; int m = globalsize % localsize; if (m > 0) { globalsize += localsize - m; } globalsizehalf = globalsize / 2; m = globalsizehalf % localsize; if (m > 0) { globalsizehalf += localsize - m; } groups = globalsizehalf / localsize; }
internal static extern cl_int clBuildProgram( cl_program program, cl_uint num_devices, [In] cl_device_id[] device_list, String options, ProgramNotify pfn_notify, IntPtr user_data);
/// <summary> /// Create OpenCL device /// </summary> /// <param name="clEnv">OpenCL environment</param> public clDevice(clEnvironment clEnv) { env = clEnv; cq = cl.CreateCommandQueue(env.context, env.device); vectorProgram = loadProgram(clVectorSource.source); matrixProgram = loadProgram(clMatrixSource.source); }
private cl_program loadProgram(string[] src) { cl_program program = cl.CreateProgramWithSource(env.context, src); try { cl.BuildProgram(program); } catch (ApplicationException e) { cl_program_build_info_return info = cl.GetProgramBuildInfo(program, env.device); Console.WriteLine(info.status); Console.WriteLine(info.log); throw e; } return(program); }
internal static extern ErrorCode clCreateKernelsInProgram( cl_program program, cl_uint num_kernels, [Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] cl_kernel[] kernels, out cl_uint num_kernels_ret);
internal static extern cl_kernel clCreateKernel(cl_program program, String kernel_name, out ErrorCode errcode_ret);
internal static extern cl_int clGetProgramBuildInfo(cl_program program, cl_device_id device, cl_program_build_info param_name, IntPtr param_value_size, void *param_value, out IntPtr param_value_size_ret);
internal static extern cl_int clGetProgramInfo(cl_program program, cl_program_info param_name, IntPtr param_value_size, void *param_value, out IntPtr param_value_size_ret);
internal static extern cl_int clReleaseProgram(cl_program program);
internal static extern cl_int clRetainProgram(cl_program program);