/// <summary> /// Resolves a lib-device-filename pattern for the given gpu architecture. /// </summary> /// <param name="gpuArch">The desired GPU architecture.</param> /// <param name="driverVersion">The current driver version.</param> /// <returns>The resolved lib-device pattern.</returns> static string ResolveLibDevicePattern(PTXArchitecture gpuArch, int driverVersion) { if (driverVersion < 9000) { switch (gpuArch) { case PTXArchitecture.SM_30: case PTXArchitecture.SM_60: case PTXArchitecture.SM_61: case PTXArchitecture.SM_62: return("libdevice.compute_30.*.bc"); case PTXArchitecture.SM_20: case PTXArchitecture.SM_21: return("libdevice.compute_20.*.bc"); case PTXArchitecture.SM_35: case PTXArchitecture.SM_37: return("libdevice.compute_35.*.bc"); case PTXArchitecture.SM_50: case PTXArchitecture.SM_52: return("libdevice.compute_50.*.bc"); default: throw new ArgumentOutOfRangeException(nameof(gpuArch)); } } else { return("libdevice.*.bc"); } }
public PTXBackend(Context context, PTXArchitecture gpuArch, TargetPlatform platform, string libDeviceDir) : base(context, platform, GetLLVMTriple(platform), gpuArch.ToString().ToLower()) { // Determine the correct lib-device version. CudaException.ThrowIfFailed( CudaAPI.Current.GetDriverVersion(out int driverVersion)); var pattern = ResolveLibDevicePattern(gpuArch, driverVersion); var files = Directory.GetFiles(libDeviceDir, pattern); if (files.Length < 1) { throw new ArgumentException(ErrorMessages.LibDeviceNotFound); } LibDevicePath = files[0]; }
/// <summary> /// Constructs a new Cuda backend. /// </summary> /// <param name="context">The context to use.</param> /// <param name="gpuArch">The target gpu architecture.</param> public PTXBackend(Context context, PTXArchitecture gpuArch) : this(context, gpuArch, RuntimePlatform, ResolveLibDeviceDir()) { }
/// <summary> /// Constructs a new Cuda backend. /// </summary> /// <param name="context">The context to use.</param> /// <param name="gpuArch">The target gpu architecture.</param> /// <param name="libDeviceDir">The directory that contains the different libdevice libraries.</param> public PTXBackend(Context context, PTXArchitecture gpuArch, string libDeviceDir) : this(context, gpuArch, RuntimePlatform, libDeviceDir) { }