Hy All,
Я нашел здесь пример использования Cloo: ссылка
Я немного изменяю источник, это копия массива, попробуйте получить результат, но массив dst не записан. В режиме отладки C# массив dst заполняется нулями. Как я могу настроить Cloo для записи массива dst?
код:
class Program
{
static string clSource =
@"
kernel void function(global int* src, global int* dst, int size)
{
for (int i = 0; i < size; i++)
{
dst[i] = src[i];
//printf(""src: %d\n"",src[i]);
//printf(""dst: %d\n"",dst[i]);
}
}
";
static void Main(string[] args)
{
// pick first platform
ComputePlatform platform = ComputePlatform.Platforms[0];
// create context with all gpu devices
ComputeContext context = new ComputeContext(ComputeDeviceTypes.Gpu,
new ComputeContextPropertyList(platform), null, IntPtr.Zero);
// create a command queue with first gpu found
ComputeCommandQueue queue = new ComputeCommandQueue(context,
context.Devices[0], ComputeCommandQueueFlags.None);
// create program with opencl source
ComputeProgram program = new ComputeProgram(context, clSource);
// compile opencl source
program.Build(null, null, null, IntPtr.Zero);
// load chosen kernel from program
ComputeKernel kernel = program.CreateKernel("function");
// create a ten integer array and its length
int[] src = new int[] { 1, 2, 3, 4, 5 };
int size = src.Length;
int[] dst = new int[size];
// allocate a memory buffer with the message (the int array)
ComputeBuffer<int> srcBuffer = new ComputeBuffer<int>(context,
ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.UseHostPointer, src);
ComputeBuffer<int> dstBuffer = new ComputeBuffer<int>(context,
ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.UseHostPointer, dst);
kernel.SetMemoryArgument(0, srcBuffer); // set the integer array
kernel.SetMemoryArgument(1, dstBuffer); // set the integer array
kernel.SetValueArgument(2, size); // set the array size
// execute kernel
queue.ExecuteTask(kernel, null);
// wait for completion
queue.Finish();
//Console.ReadKey();
}
}