opencl 获取第一个可用的设备

cl_device_id get_gpu_device()
{
    cl_uint nr_platforms = 0;
    opencl_check(clGetPlatformIDs(0, nullptr, &nr_platforms));//get available platforms
    assert(nr_platforms > 0);

    std::vector<cl_platform_id> platform_ids(nr_platforms);
    printf("%s(%d)\n", __FILE__, __LINE__);
    opencl_check(clGetPlatformIDs(nr_platforms, platform_ids.data(), nullptr));//initialize specific platform
#if DEBUG_EN
    printf(" number platform %d\n", nr_platforms);
#endif

    cl_uint nr_devices = 0;
    std::vector<cl_device_id> device_ids;
    cl_device_id device;
    for (auto pid : platform_ids)
    {
#if DEBUG_EN
        printf(" platform id %d\n", pid);
#endif
        opencl_check(clGetDeviceIDs(pid, CL_DEVICE_TYPE_GPU, 0, nullptr,
                                    &nr_devices));//get available devices of specific platform
        if (!nr_devices) {
#if DEBUG_EN
            printf(" platform id %d is not GPU\n", pid);
#endif
            continue;
        }

        device_ids.resize(nr_devices);
        opencl_check(clGetDeviceIDs(pid, CL_DEVICE_TYPE_GPU, nr_devices,
                                    device_ids.data(), nullptr));//initialize the specific device
#if DEBUG_EN
        printf("pid %d nr_devices %d \n", pid, nr_devices);
#endif
        break;
    }
    printf("gpu devices number : %d\n", device_ids.size());
    device = device_ids[0];

    return device;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值