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