示例#1
0
文件: Program.cs 项目: losttech/ILGPU
        static void Main()
        {
            using var context = Context.Create(builder => builder.DefaultCPU().Cuda());

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

                // Use LoadStreamKernel or LoadKernel to load explicitly grouped kernels
                var kernel  = accelerator.LoadStreamKernel <ArrayView <int>, ArrayView <short> >(SharedMemKernel);
                var buffer  = accelerator.Allocate1D <int>(accelerator.MaxNumThreadsPerGroup);
                var buffer2 = accelerator.Allocate1D <short>(accelerator.MaxNumThreadsPerGroup);

                // Use 'new KernelConfig(..., ..., ...)' to construct a new launch configuration
                // Hint: use the C# tuple features to convert a triple into a kernel config
                int groupSize = accelerator.MaxNumThreadsPerGroup;
                var config    = SharedMemoryConfig.RequestDynamic <byte>(groupSize * sizeof(int));
                // alternatively:
                // var config = SharedMemoryConfig.RequestDynamic<int>(groupSize);
                // var config = SharedMemoryConfig.RequestDynamic<short>(groupSize * 2);
                kernel(
                    // GridSize, GroupSize, shared memory config
                    (1, groupSize, config),
                    buffer.View,
                    buffer2.View);

                var data  = buffer.GetAsArray1D();
                var data2 = buffer2.GetAsArray1D();
                // Use data objects...
            }
        }
示例#2
0
        /// <summary>
        /// Setups the shared memory system.
        /// </summary>
        /// <param name="Config">The configuration.</param>
        public void SetupSharedMemory(SharedMemoryConfig Config)
        {
            if (Config == null)
            {
                throw new ArgumentNullException(nameof(Config));
            }

            this.Config = Config;
        }
示例#3
0
 public KernelConfig(
     Index1 gridDim,
     Index1 groupDim,
     SharedMemoryConfig sharedMemoryConfig)
     : this(
         new Index3(gridDim.X, 1, 1),
         new Index3(groupDim.X, 1, 1),
         sharedMemoryConfig)
 {
 }
示例#4
0
 public KernelConfig(
     Index2D gridDim,
     Index2D groupDim,
     SharedMemoryConfig sharedMemoryConfig)
     : this(
         new Index3D(gridDim.X, gridDim.Y, 1),
         new Index3D(groupDim.X, groupDim.Y, 1),
         sharedMemoryConfig)
 {
 }
示例#5
0
        public KernelConfig(
            Index3 gridDim,
            Index3 groupDim,
            SharedMemoryConfig sharedMemoryConfig)
        {
            Debug.Assert(gridDim.Size >= 0, "Invalid grid dimension");
            Debug.Assert(groupDim.Size >= 0, "Invalid group dimension");

            GridDim            = gridDim;
            GroupDim           = groupDim;
            SharedMemoryConfig = sharedMemoryConfig;
        }
示例#6
0
        public RuntimeSharedMemoryConfig(
            SharedMemorySpecification specification,
            SharedMemoryConfig dynamicConfig)
        {
            Specification = specification;
            DynamicConfig = dynamicConfig;

            if (!specification.HasDynamicMemory && dynamicConfig.NumElements > 0)
            {
                throw new InvalidOperationException(
                          ErrorMessages.InvalidDynamicSharedMemoryConfiguration);
            }
        }
示例#7
0
        public KernelConfig(
            Index3 gridDim,
            Index3 groupDim,
            SharedMemoryConfig sharedMemoryConfig)
        {
            if (gridDim.Size < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(gridDim));
            }
            if (groupDim.Size < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(groupDim));
            }

            GridDim            = gridDim;
            GroupDim           = groupDim;
            SharedMemoryConfig = sharedMemoryConfig;
        }
示例#8
0
        static void Main()
        {
            using (var context = new Context())
            {
                var accelerators =
                    CudaAccelerator.CudaAccelerators.Cast <AcceleratorId>().Concat(
                        CPUAccelerator.CPUAccelerators.Cast <AcceleratorId>());
                // For each available accelerator...
                foreach (var acceleratorId in accelerators)
                {
                    // Create default accelerator for the given accelerator id
                    using (var accelerator = Accelerator.Create(context, acceleratorId))
                    {
                        Console.WriteLine($"Performing operations on {accelerator}");

                        // Use LoadStreamKernel or LoadKernel to load explicitly grouped kernels
                        var kernel  = accelerator.LoadStreamKernel <ArrayView <int>, ArrayView <short> >(SharedMemKernel);
                        var buffer  = accelerator.Allocate <int>(accelerator.MaxNumThreadsPerGroup);
                        var buffer2 = accelerator.Allocate <short>(accelerator.MaxNumThreadsPerGroup);

                        // Use 'new KernelConfig(..., ..., ...)' to construct a new launch configuration
                        // Hint: use the C# tuple features to convert a triple into a kernel config
                        int groupSize = accelerator.MaxNumThreadsPerGroup;
                        var config    = SharedMemoryConfig.RequestDynamic <byte>(groupSize * sizeof(int));
                        // alternatively:
                        // var config = SharedMemoryConfig.RequestDynamic<int>(groupSize);
                        // var config = SharedMemoryConfig.RequestDynamic<short>(groupSize * 2);
                        kernel(
                            // GridSize, GroupSize, shared memory config
                            (1, groupSize, config),
                            buffer.View,
                            buffer2.View);

                        var data  = buffer.GetAsArray();
                        var data2 = buffer2.GetAsArray();
                        // Use data objects...
                    }
                }
            }
        }
示例#9
0
        /// <inheritdoc cref="CtxSetSharedMemConfig(SharedMemoryConfig)"/>
        public static void SetSharedMemConfig(SharedMemoryConfig config)
        {
            var result = CtxSetSharedMemConfig(config);

            CheckResult(result);
        }
示例#10
0
 public static extern CuResult CtxSetSharedMemConfig(SharedMemoryConfig config);
示例#11
0
 public static extern CuResult CtxGetSharedMemConfig(out SharedMemoryConfig pConfig);
示例#12
0
 public static extern CuResult FuncSetSharedMemConfig(CuFunction hfunc, SharedMemoryConfig config);