运行CUDA可执行文件时如何选择设备?

运行CUDA可执行文件时如何选择设备?,cuda,Cuda,我正在从外部连接到GPU群集,我不知道如何选择运行CUDA程序的设备 我知道集群中有两个特斯拉GPU,我想从中选择一个 你知道怎么做吗?当有许多设备连接到您的计算机时,您如何选择要使用的设备 在运行时API中选择设备的标准方法是使用cudaSetDevice。这将配置运行时在指定设备上执行惰性上下文建立。在CUDA4.0之前,这个调用实际上并没有建立上下文,它只是告诉运行时要尝试使用哪个GPU。自CUDA 4.0以来,此调用将在调用时在指定的GPU上建立上下文。还有cudaChooseDevic

我正在从外部连接到GPU群集,我不知道如何选择运行CUDA程序的设备

我知道集群中有两个特斯拉GPU,我想从中选择一个


你知道怎么做吗?当有许多设备连接到您的计算机时,您如何选择要使用的设备

在运行时API中选择设备的标准方法是使用
cudaSetDevice
。这将配置运行时在指定设备上执行惰性上下文建立。在CUDA4.0之前,这个调用实际上并没有建立上下文,它只是告诉运行时要尝试使用哪个GPU。自CUDA 4.0以来,此调用将在调用时在指定的GPU上建立上下文。还有
cudaChooseDevice
,它将从可用的设备中进行选择,以找到与调用者提供的标准匹配的设备

您可以使用
cudaGetDeviceCount
枚举系统上的可用GPU,并使用
cudaGetDeviceProperties
检索其详细信息。SDK deviceQuery示例显示了如何执行此操作的完整详细信息

但是,根据主机和驱动程序配置,在多GPU系统中选择GPU的方式可能需要谨慎。在Linux和Windows TCC驱动程序中,都存在GPU标记为“compute exculsive”的选项,这意味着驱动程序将一次将每个GPU限制为一个活动上下文,或者禁止计算,这意味着没有CUDA程序可以在该设备上建立上下文。如果代码试图在禁止计算的设备或正在使用的计算独占设备上建立上下文,则结果将是无效的设备错误。在多GPU系统中,策略是使用计算独占性,正确的方法不是尝试并选择特定的GPU,而是简单地允许隐式地进行惰性上下文建立。驱动程序将自动选择一个免费的GPU供您的代码运行。通过使用
cudaGetDeviceProperties
调用读取
cudaDeviceProp.computeMode
字段,可以检查任何设备的计算模式状态。请注意,您可以自由地检查不可用或禁止的GPU并查询其属性,但任何需要建立上下文的操作都将失败


请参阅所有这些的运行时API文档

您可以将环境变量设置为以逗号分隔的设备ID列表,以使这些设备仅对应用程序可见。使用此选项可以屏蔽设备或更改设备的可见性顺序,以便CUDA运行时按特定顺序枚举设备。

另一种解决方案是使用
CUDA\u VISIBLE\u devices
环境变量。( )