Ejemplo n.º 1
0
        /// <summary>
        /// Constructs a new Cuda accelerator reference.
        /// </summary>
        /// <param name="deviceId">The Cuda device id.</param>
        internal CudaDevice(int deviceId)
        {
            if (deviceId < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(deviceId));
            }

            DeviceId = deviceId;

            InitDeviceInfo();
            InitArchitectureInfo();
            InitGridInfo();
            InitMemoryInfo();
            InitMiscInfo();
            InitPCIInfo();

            Capabilities = new CudaCapabilityContext(
                Architecture ?? CudaArchitecture.SM_30);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Constructs a new Cuda accelerator reference.
        /// </summary>
        /// <param name="deviceId">The Cuda device id.</param>
        internal CudaDevice(int deviceId)
        {
            if (deviceId < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(deviceId));
            }

            Backend.EnsureRunningOnPlatform(TargetPlatform.X64);

            DeviceId = deviceId;

            InitDeviceInfo();
            InitArchitectureInfo();
            InitGridInfo();
            InitMemoryInfo();
            InitMiscInfo();
            InitPCIInfo();

            Capabilities = new CudaCapabilityContext(
                Architecture ?? CudaArchitecture.SM_30);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Constructs a new Cuda backend.
        /// </summary>
        /// <param name="context">The context to use.</param>
        /// <param name="capabilities">The supported capabilities.</param>
        /// <param name="architecture">The target GPU architecture.</param>
        /// <param name="instructionSet">The target GPU instruction set.</param>
        public PTXBackend(
            Context context,
            CudaCapabilityContext capabilities,
            PTXArchitecture architecture,
            PTXInstructionSet instructionSet)
            : base(
                context,
                capabilities,
                BackendType.PTX,
                BackendFlags.None,
                new PTXArgumentMapper(context))
        {
            Architecture   = architecture;
            InstructionSet = instructionSet;

            InitIntrinsicProvider();
            InitializeKernelTransformers(
                Context.HasFlags(ContextFlags.EnableAssertions) ?
                IntrinsicSpecializerFlags.EnableAssertions :
                IntrinsicSpecializerFlags.None,
                builder =>
            {
                var transformerBuilder = Transformer.CreateBuilder(
                    TransformerConfiguration.Empty);
                transformerBuilder.AddBackendOptimizations(
                    new PTXAcceleratorSpecializer(PointerType),
                    context.Flags,
                    context.OptimizationLevel);

                if (Context.HasFlags(ContextFlags.EnhancedPTXBackendFeatures))
                {
                    // Create an optimized PTX assembler block schedule
                    transformerBuilder.Add(new PTXBlockScheduling());
                    transformerBuilder.Add(new DeadCodeElimination());
                }

                builder.Add(transformerBuilder.ToTransformer());
            });
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Constructs a new Cuda backend.
        /// </summary>
        /// <param name="context">The context to use.</param>
        /// <param name="capabilities">The supported capabilities.</param>
        /// <param name="architecture">The target GPU architecture.</param>
        /// <param name="instructionSet">The target GPU instruction set.</param>
        /// <param name="nvvmAPI">Optional NVVM API instance.</param>
        public PTXBackend(
            Context context,
            CudaCapabilityContext capabilities,
            CudaArchitecture architecture,
            CudaInstructionSet instructionSet,
            NvvmAPI nvvmAPI)
            : base(
                context,
                capabilities,
                BackendType.PTX,
                new PTXArgumentMapper(context))
        {
            Architecture   = architecture;
            InstructionSet = instructionSet;
            NvvmAPI        = nvvmAPI;

            InitIntrinsicProvider();
            InitializeKernelTransformers(builder =>
            {
                var transformerBuilder = Transformer.CreateBuilder(
                    TransformerConfiguration.Empty);
                transformerBuilder.AddBackendOptimizations <CodePlacement.GroupOperands>(
                    new PTXAcceleratorSpecializer(
                        PointerType,
                        Context.Properties.EnableAssertions,
                        Context.Properties.EnableIOOperations),
                    context.Properties.InliningMode,
                    context.Properties.OptimizationLevel);

                if (Context.Properties.GetPTXBackendMode() == PTXBackendMode.Enhanced)
                {
                    // Create an optimized PTX assembler block schedule
                    transformerBuilder.Add(new PTXBlockScheduling());
                    transformerBuilder.Add(new DeadCodeElimination());
                }

                builder.Add(transformerBuilder.ToTransformer());
            });
        }