/// <summary> /// Demonstrates the use of variable-sub-view accesses. /// </summary> static void Main() { // Create main context using var context = Context.CreateDefault(); // For each available device... foreach (var device in context) { // Create accelerator for the given device using var accelerator = device.CreateAccelerator(context); Console.WriteLine($"Performing operations on {accelerator}"); var kernel = accelerator.LoadAutoGroupedStreamKernel < Index1D, ArrayView <int>, ArrayView <ComposedStructure>, int>(MyKernel); using var elementsBuffer = accelerator.Allocate1D <int>(1024); using var composedStructBuffer = accelerator.Allocate1D <ComposedStructure>(1); elementsBuffer.MemSetToZero(); composedStructBuffer.MemSetToZero(); kernel((int)elementsBuffer.Length, elementsBuffer.View, composedStructBuffer.View, 0); // Reads data from the GPU buffer into a new CPU array. // Implicitly calls accelerator.DefaultStream.Synchronize() to ensure // that the kernel and memory copy are completed first. var results = composedStructBuffer.GetAsArray1D(); ComposedStructure composedResult = results[0]; Console.WriteLine("Composed.SomeElement = " + composedResult.SomeElement); Console.WriteLine("Composed.SomeOtherElement = " + composedResult.SomeOtherElement); Console.WriteLine("Composed.ElementCounter = " + composedResult.ElementCounter); } }
/// <summary> /// Demonstrates the use of variable-sub-view accesses. /// </summary> static void Main() { // Create main context using (var context = Context.CreateDefault()) { // For each available device... foreach (var device in context) { // Create accelerator for the given device using (var accelerator = device.CreateAccelerator(context)) { Console.WriteLine($"Performing operations on {accelerator}"); var kernel = accelerator.LoadAutoGroupedStreamKernel < Index1D, ArrayView <int>, ArrayView <ComposedStructure>, int>(MyKernel); using (var elementsBuffer = accelerator.Allocate1D <int>(1024)) { using (var composedStructBuffer = accelerator.Allocate1D <ComposedStructure>(1)) { elementsBuffer.MemSetToZero(); composedStructBuffer.MemSetToZero(); kernel((int)elementsBuffer.Length, elementsBuffer.View, composedStructBuffer.View, 0); accelerator.Synchronize(); var results = composedStructBuffer.GetAsArray1D(); ComposedStructure composedResult = results[0]; Console.WriteLine("Composed.SomeElement = " + composedResult.SomeElement); Console.WriteLine("Composed.SomeOtherElement = " + composedResult.SomeOtherElement); Console.WriteLine("Composed.ElementCounter = " + composedResult.ElementCounter); } } } } } }
/// <summary> /// Demonstrates the use of variable-sub-view accesses. /// </summary> static void Main() { // Create main context using (var context = new Context()) { // For each available accelerator... foreach (var acceleratorId in Accelerator.Accelerators) { // Create default accelerator for the given accelerator id using (var accelerator = Accelerator.Create(context, acceleratorId)) { Console.WriteLine($"Performing operations on {accelerator}"); var kernel = accelerator.LoadAutoGroupedStreamKernel < Index1, ArrayView <int>, ArrayView <ComposedStructure>, int>(MyKernel); using (var elementsBuffer = accelerator.Allocate <int>(1024)) { using (var composedStructBuffer = accelerator.Allocate <ComposedStructure>(1)) { elementsBuffer.MemSetToZero(); composedStructBuffer.MemSetToZero(); kernel(elementsBuffer.Length, elementsBuffer.View, composedStructBuffer.View, 0); accelerator.Synchronize(); var results = composedStructBuffer.GetAsArray(); ComposedStructure composedResult = results[0]; Console.WriteLine("Composed.SomeElement = " + composedResult.SomeElement); Console.WriteLine("Composed.SomeOtherElement = " + composedResult.SomeOtherElement); Console.WriteLine("Composed.ElementCounter = " + composedResult.ElementCounter); } } } } } }