我目前正在编写一个相当于 NVIDIA 的 deviceQuery 的 HIP。示例代码。我要my code可在 AMD 和 NVIDIA 硬件上运行。
现在,hipDeviceProp_t
与 cudaDeviceProp_t
不完全相同,因为与后者相比,前者在结构中既有新字段又有缺失字段。
目前,我编写的代码仅适用于 AMD GPU,当我在 NVIDIA GPU 上尝试时会出现段错误,我认为这是由于访问 cudaDeviceProp_t
中不存在的字段所致。 。它还缺少一个关键部分来检测相同的 GPU 模型 gfx???
GCN架构代码。
如何判断检测到的 GPU 是 AMD 还是 NVIDIA?
编辑:为了比较,SYCL 有 sycl::info::device::vendor
提供此信息。
最佳答案
使用 HIP 时,您可以在编译时知道您是针对 AMD 还是 Nvidia GPU 进行编译。有no support for both AMD and Nvidia GPU code in the same translation unit .
因此,您可以尝试依赖以下预处理器定义:
#if defined(__HIP_PLATFORM_AMD__)
// AMD GPU code should take this code path
#elif defined(__HIP_PLATFORM_NVIDIA__)
// Nvidia takes this code path.
#else
#error "Unknown platform"
#endif
关于c++ - 如何从 HIP 代码内部检测 GPU 是 AMD 还是 NVIDIA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72982826/