我正在处理一个集群,其中我有4个GPU连接到一个计算节点。所有的GPU都是一样的,基本上是k20,没有区别。我想知道我的二进制文件运行在哪个GPU上?cudaGetDevice总是给我设备id 0,因为我的二进制文件实际上运行在设备id 2上(使用nvidia-smi检查)
使用此设备Id,我希望使用NVML库来测量所消耗的功率。
cudaGetDevice :Returns in *device the current device for the calling host thread.
还有其他方法来获取这些信息吗?
发布于 2014-08-21 07:30:09
-i,-ID=ID 显示单个指定GPU或单元的数据。指定的id可以是驱动程序返回的自然枚举中基于GPU / Unit的0−索引、GPU的板序列号、GPU的UUID或单个指定GPU或Unit的显示数据。指定的id可以是驱动程序返回的自然枚举中基于GPU/−的0−索引、GPU的板序列号、GPU的UUID或GPU的PCI总线ID (以十六进制的形式表示)。建议希望一致性的用户使用UUID或PCI总线ID,因为设备枚举顺序不能保证在重新引导和板序列号之间的一致性在同一板上的多个GPU之间共享。
因此,我要做的是调用cudaGetDeviceProperties,并按照建议调查返回的属性,如pciBusID。然后,根据在所需的PCI总线上找到的设备,我将调用具有适当参数的cudaSetDevice。
发布于 2022-01-25 05:24:31
cudaSetDevice
和cudaGetdevice
总是在从0
到num_visible_devices
的逻辑可见设备上工作。例如,如果您使用setenv CUDA_VISIBLE_DEVICES 3,6
并执行代码cudaSetDevice(1)
,那么您的代码实际上将在物理设备6
上工作,而不是在1
上工作。
https://stackoverflow.com/questions/25419489
复制相似问题