public void TestMethod1() { const string SOURCE_CODE = @" __kernel void add_array(__global float *a, __global float *b, __global float *c) { int xid = get_global_id(0); c[xid] = a[xid] + b[xid]; }"; const int length = 10; using (OpenClCompiler builder = new OpenClCompiler(SOURCE_CODE, DeviceType.Gpu)) // <- device selector ("*GTX*") using (OpenClBridge bridge = builder.GetMethode("add_array")) // methode capture using (SvmPointer <float> a = builder.AllocSvmMemory <float>(length)) // buffer init using (SvmPointer <float> b = builder.AllocSvmMemory <float>(length)) // buffer init using (SvmPointer <float> c = builder.AllocSvmMemory <float>(length)) // buffer init { //init values for (int i = 0; i < length; i++) { a[i] = b[i] = i; } bridge.Execute(new IntPtr[] { (IntPtr)length }, new SvmPointer[] { a, b, c }); // exec //check values for (int i = 0; i < length; i++) { Assert.AreEqual(a[i] + b[i], c[i]); } } }
static void Main(string[] args) { string gpuCode = Encoding.Default.GetString(Properties.Resources.GrayScale.Skip(3).ToArray()); OpenClBridge bridge = EasyClCompiler.CompileProgramFromSource(gpuCode, "run"); using (Bitmap bmp = Properties.Resources.bild1) { Rectangle rect = new Rectangle(Point.Empty, bmp.Size); BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat); int byteCount = bmpData.Stride * bmp.Height; byte[] buffer = new byte[byteCount]; unsafe { fixed(byte *bufferPtr = buffer) { CopyMemory((IntPtr)bufferPtr, bmpData.Scan0, byteCount); } } using (KernelImage kernelImageIn = new KernelImage(0, MemFlags.CopyHostPtr, buffer, bmp.Width, bmp.Height, bmp.PixelFormat)) { using (KernelImage kernelImageOut = new KernelImage(1, MemFlags.CopyHostPtr, bmp)) { bridge.SetKernerArgImg2D(kernelImageIn); bridge.SetKernerArgImg2D(kernelImageOut); bridge.Execute(kernelImageIn.WorkGroupSizePtr); unsafe { fixed(byte *outBuffPtr = kernelImageOut.Source) { MoveMemory(bmpData.Scan0, (IntPtr)outBuffPtr, byteCount); } } } } bmp.UnlockBits(bmpData); bmp.Save("image-green-scale.png", ImageFormat.Png); } }