c++ - 识别 AMD GPU

标签 c++ windows opencl amd

我无法区分不同的 GPU。这是我的代码,据我所知,它应该返回不同的总线/设备/功能编号,但是我对所有 gpus 都相同。任何帮助将不胜感激。

int main()
{

    cl_platform_id* platformIDs = nullptr;
    cl_uint platformCount = 0;
    clGetPlatformIDs(0, nullptr, &platformCount);
    platformIDs = new cl_platform_id[platformCount];
    clGetPlatformIDs(platformCount, platformIDs, nullptr);

    for (cl_uint i = 0; i < platformCount; i++)
    {
        cl_uint deviceCount;
        clGetDeviceIDs(platformIDs[i], CL_DEVICE_TYPE_GPU, 0, nullptr, &deviceCount);
        cl_device_id* deviceIDs = new cl_device_id[deviceCount];
        clGetDeviceIDs(platformIDs[i], CL_DEVICE_TYPE_GPU, deviceCount, deviceIDs, nullptr);

        for (cl_uint j = 0; j < deviceCount; j++)
        {
            cl_device_topology_amd amdtopo;
            cl_int clret = clGetDeviceInfo(deviceIDs[j], CL_DEVICE_TOPOLOGY_AMD, sizeof(amdtopo), &amdtopo, nullptr);

            std::cout << "platform=" << i << "; device=" << j << "; ";
            if (clret == CL_SUCCESS)
            {
                if (amdtopo.raw.type == CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD)
                {
                    std::cout <<
                        "bus=" << (int)amdtopo.pcie.bus <<
                        "; device=" << (int)amdtopo.pcie.device <<
                        "; function=" << (int)amdtopo.pcie.function <<
                        ";";
                }
                else
                {
                    std::cout << "not amd";
                }
            }
            else
            {
                std::cout << "error";
            }

            std::cout << "\n";
        }
    }
}

这是我在带有 12 amd GPU 的机器上得到的输出:

C:\Users\x>gpuid.exe
platform=0; device=0; error
platform=1; device=0; bus=0; device=0; function=1;
platform=1; device=1; bus=0; device=0; function=1;
platform=1; device=2; bus=0; device=0; function=1;
platform=1; device=3; bus=0; device=0; function=1;
platform=1; device=4; bus=0; device=0; function=1;
platform=1; device=5; bus=0; device=0; function=1;
platform=1; device=6; bus=0; device=0; function=1;
platform=1; device=7; bus=0; device=0; function=1;
platform=1; device=8; bus=0; device=0; function=1;
platform=1; device=9; bus=0; device=0; function=1;
platform=1; device=10; bus=0; device=0; function=1;
platform=1; device=11; bus=0; device=0; function=1;

最佳答案

事实证明,最近的 amd 驱动程序存在错误: https://community.amd.com/thread/224200

关于c++ - 识别 AMD GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48243671/

相关文章:

java - 如何验证端口是否开放

c++ - DLL注册返回码0x80029c4a

macos - Mac OSX 10.10 AMD APP SDK 位置

c++ - 内联调用不太可能失败,代码大小会增加 [-Winline] 但不使用内联

c++ - Qt5/C++ 在 mousePressEvent 期间释放鼠标

c# - 如何在多个程序集上共享一个接口(interface)

c++ - opencl 内核文件未完全加载

c++ - 如何处理 C++ 中的命名空间?

c++ - 在 SFML 中更改坐标系中的引用点后,坐标计算不正确

Linux OpenCL 错误 : clGetPlatformIDs(-1001)