我正在开发一个集群,我有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.
获取此信息的任何其他方法?
答案 0 :(得分:2)
-i, - id = ID
显示单个指定GPU或单元的数据。指定的ID可以 是由返回的自然枚举中的GPU / Unit的基于0的索引 驱动程序,GPU的主板序列号,GPU的UUID或 显示单个指定GPU或单元的数据。指定的ID可以 是由返回的自然枚举中的GPU / Unit的基于0的索引 驱动程序,GPU的主板序列号,GPU的UUID或 GPU的PCI总线ID(作为域:总线:十六进制的device.function)。 是的 建议希望一致性的用户使用UUID或PCI总线 ID,因为不保证设备枚举顺序 可以共享重新启动和电路板序列号之间的一致性 在同一块板上的多个GPU之间。
所以我要做的就是调用cudaGetDeviceProperties,并且建议调查返回的属性,例如pciBusID。然后,根据在所需PCI总线上找到的设备,我会使用适当的参数调用cudaSetDevice。