【问题标题】:What's the meaning and purpose of the `property` argument in clCreateContextclCreateContext 中的 `property` 参数的含义和目的是什么
【发布时间】:2020-04-16 16:12:31
【问题描述】:

我正在为 openCL 应用程序实现一个小型模板应用程序,更具体地说,我正在创建一个上下文。

我正在阅读文档https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateContext.html

我引用:

指定上下文属性名称及其对应值的列表。每个属性名称后面紧跟相应的所需值。该列表以 0 结尾。属性可以为 NULL,在这种情况下,选择的平台是实现定义的。下表描述了支持的属性列表。

然后是列表...

但是我不知道这些属性的用途是什么,它们究竟是如何使用的?指定这些属性如何影响我的程序执行或只是设计?我见过几个例子,这个参数只是设置为0nullptr

你能澄清一下吗?

【问题讨论】:

    标签: opencl


    【解决方案1】:

    CL_CONTEXT_PLATFORM 属性允许您选择特定的平台 ID。对于clCreateContext(),这并不是非常有用,因为无论如何都会通过设备列表隐式选择平台。但是,对于clCreateContextFromType(),这可以让您创建一个上下文,例如“系统中的所有 GPU 都使用 AMD 实现”(与 Intel 实现相反)。

    其他属性有助于 OpenCL 与其他图形或计算库(如 OpenGL、DirectX 等)之间的互操作。因此,如果您想在 OpenCL 和 OpenGL 之间共享纹理,这会告诉您的 OpenCL 实现您将为哪个 OpenGL 上下文提供纹理名称,这些名称只是整数句柄和在 OpenGL 上下文中不唯一。

    从实际的角度来看,您将属性作为 0 终止数组传递,例如:

    cl_context_properties properties[] =
      {
        CL_CONTEXT_PLATFORM, selected_platform_id,
        0 // signals end of property list
      };
    cl_int error = 0;
    cl_context context = clCreateContextFromType(properties, CL_DEVICE_TYPE_GPU, NULL, NULL, &error);
    

    【讨论】:

    • 你说“选择一个特定的平台 ID”。那么“clGetPlatformIDs”有什么区别呢?
    • 我上一条评论的意思是您查询平台,您会得到一组平台 ID,然后使用您想要的。
    • 是的,您将使用clGetPlatformIDs 列出ID,当您的代码决定使用哪个可用平台时,您可以使用Cl_CONTEXT_PLATFORM 属性指定该意图。
    • 这可能是我仍然缺少的“意图”位。
    • 正如在可用平台中,您需要选择一个您想要使用的平台。或者你可以选择一个可用的设备,直接绑定特定平台,不需要显式设置平台。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2019-12-07
    • 2020-01-05
    • 2010-09-05
    • 2015-03-24
    相关资源
    最近更新 更多