Exemplo n.º 1
0
 public static extern CLError clEnqueueReleaseGLObjects(
     CLCommandQueue command_queue,
     uint num_objects,
     [In] CLMem[] mem_objects,
     uint num_events_in_wait_list,
     [In] CLEvent[] event_wait_list,
     ref CLEvent e);
Exemplo n.º 2
0
        public Event Acquire(CommandQueue commandQueue, Events eventWaitList)
        {
            CLEvent e = new CLEvent();

            OpenCLError.Validate(OpenCLGLDriver.clEnqueueAcquireGLObjects(commandQueue.CLCommandQueue, memObjects.Length, memObjects, eventWaitList.Count, eventWaitList.OpenCLEventArray, ref e));

            Acquired = true;

            return(new Event(e));
        }
Exemplo n.º 3
0
        internal Event ExecuteInternal(SizeT[] globalWorkSize, SizeT[] localWorkSize, Events eventWaitList, SizeT[] globalWorkOffset)
        {
            if (localWorkSize == null || globalWorkSize.Length == localWorkSize.Length)
            {
                CLEvent e = new CLEvent();

                OpenCLError.Validate(OpenCLDriver.clEnqueueNDRangeKernel(CommandQueue.CLCommandQueue, CLKernel, globalWorkSize.Length, globalWorkOffset, globalWorkSize, localWorkSize, eventWaitList.Count, eventWaitList.OpenCLEventArray, ref e));

                return(new Event(e));
            }
            else
            {
                throw new ArgumentException(Resources.LocalWorkSize_and_GlobalWorkSize_dimensions_do_not_agree);
            }
        }
Exemplo n.º 4
0
        private static Event WriteBytesInternal(CLMem openCLMem, CommandQueue commandQueue, Array array, Int64 bytesToCopy, Int64 arrayOffset, Int64 arraySize, Int64 bufferOffset, Int64 bufferSize, Events eventWaitList, WriteOperation writeDelegate)
        {
            if (bufferSize < bufferOffset + bytesToCopy)
            {
                throw new ArgumentException(Resources.Buffer_out_of_bounds);
            }
            if (arraySize < arrayOffset + bytesToCopy)
            {
                throw new ArgumentException(Resources.Array_out_of_bounds);
            }

            GCHandle valueHandle = GCHandle.Alloc(array, GCHandleType.Pinned);

            try
            {
                CLEvent e = new CLEvent();

                unsafe
                {
                    IntPtr valuePtr = new IntPtr((Byte *)(valueHandle.AddrOfPinnedObject().ToPointer()) + arrayOffset);

                    OpenCLError.Validate
                    (
                        writeDelegate
                        (
                            commandQueue.CLCommandQueue,
                            openCLMem,
                            CLBool.True,
                            new SizeT(bufferOffset),
                            new SizeT(bytesToCopy),
                            valuePtr,
                            eventWaitList == null ? 0 : eventWaitList.Count,
                            eventWaitList == null ? null : eventWaitList.OpenCLEventArray,
                            ref e
                        )
                    );
                }

                return(new Event(e));
            }
            finally
            {
                valueHandle.Free();
            }
        }
Exemplo n.º 5
0
Arquivo: Events.cs Projeto: lu4/ManOCL
        internal static CLEvent[] GetOpenCLEventArray(Event[] events)
        {
            if (events != null && events.Length != 0)
            {
                CLEvent[] openclEvents = new CLEvent[events.Length];

                for (UInt32 i = 0; i < events.Length; i++)
                {
                    openclEvents[i] = events[i].CLEvent;
                }

                return(openclEvents);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Multiply an array by a constant value
        /// </summary>
        internal static void Multiply()
        {
            try
            {
                CLError err = new CLError();
                //Allocate memory
                float[]  arr          = new float[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
                GCHandle arrGC        = GCHandle.Alloc(arr, GCHandleType.Pinned);
                CLMem    bufferFilter = OpenCLDriver.clCreateBuffer(ctx, CLMemFlags.ReadWrite | CLMemFlags.CopyHostPtr, new SizeT(arr.Length * sizeof(float)), arrGC.AddrOfPinnedObject(), ref err);

                //set parameters
                unsafe
                {
                    OpenCLDriver.clSetKernelArg(kernel_mult, 0, new SizeT(sizeof(CLMem)), ref bufferFilter);
                }

                //Define grid & execute
                err = OpenCLDriver.clFinish(comQ);
                SizeT[] localws  = { 5, 1 };
                SizeT[] globalws = { 10, 1 };
                CLEvent eventObj = new CLEvent();
                err = OpenCLDriver.clEnqueueNDRangeKernel(comQ, kernel_mult, 2, null,
                                                          globalws, localws, 0, null, ref eventObj);
                CLEvent[] eventObjs = new CLEvent[1];
                eventObjs[0] = eventObj;
                OpenCLDriver.clWaitForEvents(1, eventObjs);
                // read buffer
                err = OpenCLDriver.clEnqueueReadBuffer(comQ, bufferFilter, CLBool.True, 0,
                                                       10 * sizeof(float), arrGC.AddrOfPinnedObject(), 0, null, ref eventObj);

                TableForm.ShowTableStatic(arr, "OpenCL Test");
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString());
            }
        }
Exemplo n.º 7
0
Arquivo: Event.cs Projeto: lu4/ManOCL
 internal Event(CLEvent openclEvent)
 {
     this.CLEvent = openclEvent;
 }
Exemplo n.º 8
0
        /// <summary>
        /// Multiply an array by a constant value
        /// </summary>
        internal static void Multiply()
        {
            try
            {
                CLError err = new CLError();
                //Allocate memory
                float[] arr = new float[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
                GCHandle arrGC = GCHandle.Alloc(arr, GCHandleType.Pinned);
                CLMem bufferFilter = OpenCLDriver.clCreateBuffer(ctx, CLMemFlags.ReadWrite | CLMemFlags.CopyHostPtr, new SizeT(arr.Length * sizeof(float)), arrGC.AddrOfPinnedObject(), ref err);

                //set parameters
                unsafe
                {
                    OpenCLDriver.clSetKernelArg(kernel_mult, 0, new SizeT(sizeof(CLMem)), ref bufferFilter);
                }

                //Define grid & execute
                err = OpenCLDriver.clFinish(comQ);
                SizeT[] localws = { 5, 1 };
                SizeT[] globalws = { 10, 1 };
                CLEvent eventObj = new CLEvent();
                err = OpenCLDriver.clEnqueueNDRangeKernel(comQ, kernel_mult, 2, null,
                globalws, localws, 0, null, ref eventObj);
                CLEvent[] eventObjs = new CLEvent[1];
                eventObjs[0] = eventObj;
                OpenCLDriver.clWaitForEvents(1, eventObjs);
                // read buffer
                err = OpenCLDriver.clEnqueueReadBuffer(comQ, bufferFilter, CLBool.True, 0,
                10 * sizeof(float), arrGC.AddrOfPinnedObject(), 0, null, ref eventObj);

                TableForm.ShowTableStatic(arr, "OpenCL Test");

            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString());
            }
        }
Exemplo n.º 9
0
 internal static extern CLError clEnqueueAcquireGLObjects(CLCommandQueue command_queue, int num_objects, [In] CLMem[] mem_objects, int num_events_in_wait_list, [In] CLEvent[] event_wait_list, ref CLEvent e);