Example #1
0
        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]);
                                }
                            }
        }
Example #2
0
        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);
            }
        }