如何确定CUDA的完整版本+subversion?

如何确定CUDA的完整版本+subversion?,cuda,version,Cuda,Version,Linux上的CUDA发行版以前有一个名为version.txt的文件,该文件的内容如下: CUDA Version 10.2.89 这是非常有用的。但是,从CUDA 11.1开始,该文件不再存在 在Linux上,通过命令行和检查/path/to/cuda/toolkit,如何确定我正在查看的确切版本?包括subversion?由于@RobertCrovella的评论而回答 这将实现以下目的: /路径/to/cuda/toolkit/bin/nvcc-version | egrep-o V[0

Linux上的CUDA发行版以前有一个名为version.txt的文件,该文件的内容如下:

CUDA Version 10.2.89
这是非常有用的。但是,从CUDA 11.1开始,该文件不再存在


在Linux上,通过命令行和检查/path/to/cuda/toolkit,如何确定我正在查看的确切版本?包括subversion?

由于@RobertCrovella的评论而回答

这将实现以下目的:

/路径/to/cuda/toolkit/bin/nvcc-version | egrep-o V[0-9]+[0-9]+[0-9]+[0-9]+| cut-c2- 当然,对于当前选择并配置使用的CUDA版本,只需使用路径上的nvcc即可:

nvcc-版本|白鹭-o V[0-9]+[0-9]+[0-9]+[0-9]+|切割-c2- 例如:你可以在本周在英伟达网站上下载的CUDA 11.2下载,获得112.67。 完整的nvcc版本输出为:

nvcc:NVIDIA R Cuda编译器驱动程序 版权c 2005-2020英伟达公司 建于2020年11月30日星期一19:08:53 Cuda编译工具,11.2版,V11.2.67 构建cuda_11.2.r11.2/compiler.29373293_0
根据@RobertCrovella的评论回答

这将实现以下目的:

/路径/to/cuda/toolkit/bin/nvcc-version | egrep-o V[0-9]+[0-9]+[0-9]+[0-9]+| cut-c2- 当然,对于当前选择并配置使用的CUDA版本,只需使用路径上的nvcc即可:

nvcc-版本|白鹭-o V[0-9]+[0-9]+[0-9]+[0-9]+|切割-c2- 例如:你可以在本周在英伟达网站上下载的CUDA 11.2下载,获得112.67。 完整的nvcc版本输出为:

nvcc:NVIDIA R Cuda编译器驱动程序 版权c 2005-2020英伟达公司 建于2020年11月30日星期一19:08:53 Cuda编译工具,11.2版,V11.2.67 构建cuda_11.2.r11.2/compiler.29373293_0
下面的python代码适用于Windows和Linux,我已经用各种CUDA8-11.2(其中大多数)对其进行了测试

它通过一系列检查环境变量、nvcc位置或默认安装路径的猜测来搜索cuda_路径,然后从nvcc-version的输出中获取cuda版本。不使用@einpoklum的样式regexp,它只是假设在nvcc-version的输出中只有一个发布字符串,但这可以简单地检查

如果有已知的查询路径,也可以只使用第一个函数

添加它作为@einpoklum answer的一个额外部分,也可以做同样的事情,只是在python中


下面的python代码适用于Windows和Linux,我已经用各种CUDA8-11.2(其中大多数)对其进行了测试

它通过一系列检查环境变量、nvcc位置或默认安装路径的猜测来搜索cuda_路径,然后从nvcc-version的输出中获取cuda版本。不使用@einpoklum的样式regexp,它只是假设在nvcc-version的输出中只有一个发布字符串,但这可以简单地检查

如果有已知的查询路径,也可以只使用第一个函数

添加它作为@einpoklum answer的一个额外部分,也可以做同样的事情,只是在python中


nvcc-versionnvcc-versionI我确信这段代码可以改进,但现在,它完成了以下任务:。请随意编辑/改进post.Ander,注意,我询问了关于确定CUDA安装版本的问题,该版本不是系统默认版本,即采用特定的根路径。因此,只有get_cuda_版本部分与此问题相关。另外,您似乎希望CUDA编译器命名为nvcc.exe。。。还是我错了?@einpoklum绝对错!但是第一部分需要运行cuda_路径,所以我决定第二部分可能会引起未来读者的兴趣。事实上,它需要一个.exe,这是一个错误。。。应该是nvcc或特定于操作系统的测试。@einpoklum bug已修复,感谢您的提醒。我确信此代码可以改进,但现在,它完成了以下任务:。请随意编辑/改进post.Ander,注意,我询问了关于确定CUDA安装版本的问题,该版本不是系统默认版本,即采用特定的根路径。因此,只有get_cuda_版本部分与此问题相关。另外,您似乎希望CUDA编译器命名为nvcc.exe。。。还是我错了?@einpoklum绝对错!但是第一部分需要运行cuda_路径,所以我决定第二部分可能会引起未来读者的兴趣。事实上,它需要一个.exe,这是一个错误。。。应该是nvcc或特定于操作系统的测试。@einpoklum bug已修复,谢谢提醒。
import glob
import os
from os.path import join as pjoin
import subprocess
import sys


def get_cuda_version(cuda_home):
    """Locate the CUDA version
    """
    version_file = os.path.join(cuda_home, "version.txt")
    try:
        if os.path.isfile(version_file):
            with open(version_file) as f:
                version_str = f.readline().replace('\n', '').replace('\r', '')
                return version_str.split(" ")[2][:4]
        else:
            version_str = subprocess.check_output([os.path.join(cuda_home,"bin","nvcc"),"--version"])
            version_str=str(version_str).replace('\n', '').replace('\r', '')
            idx=version_str.find("release")
            return version_str[idx+len("release "):idx+len("release ")+4]
    except:
        raise RuntimeError("Cannot read cuda version file") 
def locate_cuda():
    """Locate the CUDA environment on the system

    Returns a dict with keys 'home', 'include' and 'lib64'
    and values giving the absolute path to each directory.

    Starts by looking for the CUDA_HOME or CUDA_PATH env variable. If not found, everything
    is based on finding 'nvcc' in the PATH.
    """
    # Guess #1
    cuda_home = os.environ.get('CUDA_HOME') or os.environ.get('CUDA_PATH')
    if cuda_home is None:
        # Guess #2
        try:
            which = 'where' if IS_WINDOWS else 'which'
            nvcc = subprocess.check_output(
                [which, 'nvcc']).decode().rstrip('\r\n')
            cuda_home = os.path.dirname(os.path.dirname(nvcc))
        except subprocess.CalledProcessError:
            # Guess #3
            if IS_WINDOWS:
                cuda_homes = glob.glob(
                    'C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v*.*')
                if len(cuda_homes) == 0:
                    cuda_home = ''
                else:
                    cuda_home = cuda_homes[0]
            else:
                cuda_home = '/usr/local/cuda'
            if not os.path.exists(cuda_home):
                cuda_home = None
    version = get_cuda_version(cuda_home)
    cudaconfig = {'home': cuda_home,
                  'include': pjoin(cuda_home, 'include'),
                  'lib64': pjoin(cuda_home, pjoin('lib', 'x64') if IS_WINDOWS else 'lib64')}
    if not all([os.path.exists(v) for v in cudaconfig.values()]):
        raise EnvironmentError(
            'The CUDA  path could not be located in $PATH, $CUDA_HOME or $CUDA_PATH. '
            'Either add it to your path, or set $CUDA_HOME or $CUDA_PATH.')

    return cudaconfig, version


CUDA, CUDA_VERSION = locate_cuda()