【问题标题】:OpenCL - Releasing platform objectOpenCL - 释放平台对象
【发布时间】:2013-07-19 08:04:37
【问题描述】:

我正在研究 OpenCL 释放函数 ( clRelease(objectName) ),我很感兴趣的是没有释放平台(更具体地说,cl_platform_id)对象的函数。 有人知道原因吗?

【问题讨论】:

    标签: opencl


    【解决方案1】:

    这是因为您使用常规 malloc 而不是 clCreateObjectName() 函数创建平台对象。所以你用普通的free 释放它们。我想是这样的,因为平台是主机资源。
    请注意,设备对象也是如此。

    编辑: 澄清一下,感谢@chippies 的评论:clGetPlatformIDs() 函数有两个用途。首先查询系统中可用的平台数量。其次,用您决定使用的实际平台来填充您为平台分配的内存空间。您将这些平台存储在您首先malloc 的内存空间中。因此,当您使用完这些平台后,您可以使用 freemalloc-ed 的内存来释放它们。

    【讨论】:

    • clGetPlatformIDs 用于获取平台对象,用户不malloc他们也不应该free他们AFAIK。
    • 你先做一个 clGetPlatformIDs() 来查询平台的数量。然后您执行类似 platforms = (cl_platform_id*)malloc(numPlatforms*sizeof(cl_platform_id)); 的操作,然后再次执行 clGetPlatformIDs()fill平台。但是对象平台仍然是使用 malloc “创建”的,因此使用 free 发布。它与立即返回上下文对象的 clCreateContext() 完全不同。
    猜你喜欢
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2012-03-06
    相关资源
    最近更新 更多