Esempio n. 1
0
        /// <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");
            }
        }
Esempio n. 2
0
        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];
        }
Esempio n. 3
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())
 {
 }
Esempio n. 4
0
 /// <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)
 {
 }