示例#1
0
        internal KernelArgument(Kernel kernel, int index)
        {
            if (kernel == null)
                throw new ArgumentNullException("kernel");
            if (index < 0)
                throw new ArgumentOutOfRangeException("index");

            _kernel = kernel;
            _index = index;
        }
        public OpenCLKernel(OpenCLKernelSet kernelSet, string kernelName)
        {
            this.kernelSet = kernelSet;

            if (!kernelSet.Kernels.TryGetValue(kernelName, out this.kernel))
            {
                this.kernel = kernelSet.Program.CreateKernel(kernelName);
            }

            this.currentArg     = 0;
            this.createdBuffers = new List <OpenCLBuffer>();

#if ENABLE_PROFILING
            if (profilingStopwatch == null)
            {
                profilingStopwatch = System.Diagnostics.Stopwatch.StartNew();
            }
            else
            {
                profilingStopwatch.Restart();
            }
#endif
        }
示例#3
0
        /// <summary>
        /// Enqueues a command to execute a <see cref="Kernel"/> on this command queue's <see cref="Device"/>.
        /// </summary>
        /// <remarks>
        /// The kernel is executed using a single work-item.
        ///
        /// <para><see cref="EnqueueTask"/> is equivalent to calling
        /// <see cref="EnqueueNDRangeKernel(Kernel, IntPtr, IntPtr, Event[])"/> with
        /// <em>globalWorkSize</em> set to 1, and <em>localWorkSize</em> set to 1.</para>
        /// </remarks>
        /// <param name="kernel">A valid <see cref="Kernel"/> object.</param>
        /// <param name="eventWaitList">The events that need to be complete before this
        /// command is executed. If the list is null or empty, this command does not
        /// wait on any event to complete.</param>
        /// <returns>Returns an event object that identifies this particular kernel execution instance.</returns>
        public Event EnqueueTask(Kernel kernel, params Event[] eventWaitList)
        {
            EventSafeHandle[] eventHandles = null;
            if (eventWaitList != null)
                eventHandles = Array.ConvertAll(eventWaitList, @event => @event.Handle);

            EventSafeHandle handle = UnsafeNativeMethods.EnqueueTask(this.Handle, kernel.Handle, eventHandles);
            return new Event(handle);
        }
示例#4
0
        public Event EnqueueNDRangeKernel(Kernel kernel, IntPtr[] globalWorkOffset, IntPtr[] globalWorkSize, IntPtr[] localWorkSize, params Event[] eventWaitList)
        {
            EventSafeHandle[] eventHandles = null;
            if (eventWaitList != null)
                eventHandles = Array.ConvertAll(eventWaitList, @event => @event.Handle);

            EventSafeHandle handle = UnsafeNativeMethods.EnqueueNDRangeKernel(this.Handle, kernel.Handle, globalWorkOffset, globalWorkSize, localWorkSize, eventHandles);
            return new Event(handle);
        }
示例#5
0
 public Event EnqueueNDRangeKernel(Kernel kernel, IntPtr[] globalWorkSize, IntPtr[] localWorkSize, params Event[] eventWaitList)
 {
     return EnqueueNDRangeKernel(kernel, null, globalWorkSize, localWorkSize, eventWaitList);
 }
示例#6
0
 public Event EnqueueNDRangeKernel(Kernel kernel, IntPtr globalWorkOffset, IntPtr globalWorkSize, IntPtr localWorkSize, params Event[] eventWaitList)
 {
     return EnqueueNDRangeKernel(kernel, new[] { globalWorkOffset }, new[] { globalWorkSize }, new[] { localWorkSize }, eventWaitList);
 }