Beispiel #1
0
        public override void Execute(object sender)
        {
            base.Execute(sender);

            var queue    = sender as CommandQueue;
            var kernel   = Kernel as ICLKernel;
            var range    = Range as INDRangeDimension;
            var waitList = (from name in WaitList
                            let ev = CommandQueue.FindEvent(name)
                                     where ev != null
                                     select ev.Value).ToArray();

            Event     eventID;
            ErrorCode error = Cl.EnqueueNDRangeKernel(queue.Queue, kernel.ClKernel, (uint)kernel.WorkDim, null,
                                                      range.GlobalWorkSize, range.LocalWorkSize, (uint)waitList.Length, waitList.Length == 0 ? null : waitList.ToArray(), out eventID);

            if (error != ErrorCode.Success)
            {
                throw new CLException(error);
            }

            if (Name == string.Empty)
            {
                eventID.Dispose();
            }
            else
            {
                CommandQueue.AddEvent(Name, eventID);
            }
        }
Beispiel #2
0
        public override void Execute(object sender)
        {
            var commandQueue = sender as CommandQueue;

            var waitList = from name in WaitList
                           let ev = CommandQueue.FindEvent(name)
                                    where ev != null
                                    select ev.Value;

            Event     eventID;
            ErrorCode error;
            var       mem         = (Buffer == null) ? Mem : Buffer.Mem;
            var       elementSize = (Buffer == null) ? ElementSize : Buffer.ElementSize;

            if (Data == null)
            {
                error = Cl.EnqueueReadBuffer(commandQueue.Queue, mem,
                                             Blocking ? Bool.True : Bool.False, (IntPtr)Offset,
                                             (IntPtr)(Count * elementSize), DataPtr, (uint)waitList.Count(), waitList.Count() == 0 ? null : waitList.ToArray(), out eventID);
            }
            else
            {
                error = Cl.EnqueueReadBuffer(commandQueue.Queue, mem,
                                             Blocking ? Bool.True : Bool.False, (IntPtr)Offset,
                                             (IntPtr)(Count * elementSize), Data, (uint)waitList.Count(), waitList.Count() == 0 ? null : waitList.ToArray(), out eventID);
            }

            if (error != ErrorCode.Success)
            {
                throw new Cl.Exception(error);
            }

            if (Name == string.Empty)
            {
                eventID.Dispose();
            }
            else
            {
                CommandQueue.AddEvent(Name, eventID);
            }
        }