public void ClooExecuteHistogramN() { var gpuHist = new ClooBuffer<uint>(Context, Cloo.ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.AllocateHostPointer, 64); var cpuHist = new CpuBuffer<uint>(64); var gpuImage = CreateClooImageByteRgbA(100, 100); ClooImaging.HistogramN(Queue, gpuImage, gpuHist, 4); gpuHist.ReadFromDevice(Queue); // compare GPU histogram with CPU version CpuImaging.HistogramN(gpuImage, cpuHist, 4); Assert.AreNotEqual(0, cpuHist.HostBuffer.Sum(x => x)); Assert.AreEqual(cpuHist.HostBuffer.Sum(x => x), gpuHist.HostBuffer.Sum(x => x)); // check each value for (int i = 0; i < cpuHist.HostBuffer.Length; i++) Assert.AreEqual(cpuHist.HostBuffer[i], gpuHist.HostBuffer[i], "Histogram comparison failed at index " + i); }
public void ClooExecuteHistogramBackprojection() { var gpuHist = new ClooBuffer<uint>(Context, Cloo.ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.AllocateHostPointer, 64); var srcImage = CreateClooImageByteRgbA(100, 100); var dstImage = CreateClooImageByteA(100, 100); srcImage.HostBuffer.Clear(); srcImage.WriteToDevice(Queue); ClooImaging.HistogramN(Queue, srcImage, gpuHist, 4); gpuHist.ReadFromDevice(Queue); ClooImaging.HistogramBackprojection(Queue, srcImage, dstImage, gpuHist, gpuHist, 4); dstImage.ReadFromDevice(Queue); // check each value for (int i = 0; i < dstImage.HostBuffer.Length; i++) Assert.AreEqual((byte)255, dstImage.HostBuffer[i], "Destination image mismatched probability at index " + i); // TODO: add more tests here }