Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }