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); } }
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); } }