OpenCL-释放平台对象

OpenCL-释放平台对象,opencl,Opencl,我当时正在研究OpenCL发布函数(clRelease(objectName)),我很感兴趣的是,没有发布平台(更具体地说,是cl_Platform_id)对象的函数。 有人知道原因吗?这是因为您使用常规的malloc而不是clCreateObjectName()函数创建平台对象。因此,您可以使用常规的免费发布。我想这是因为平台是主机资源。 请注意,这与设备对象相同 编辑:为了澄清一点,感谢@chippies的评论:clGetPlatformIDs()函数有两个用途。首先查询系统中可用的平台数量

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

这是因为您使用常规的
malloc
而不是
clCreateObjectName()
函数创建平台对象。因此,您可以使用常规的
免费发布
。我想这是因为平台是主机资源。
请注意,这与设备对象相同


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

这是因为您使用常规的
malloc
而不是
clCreateObjectName()
函数创建平台对象。因此,您可以使用常规的
免费发布
。我想这是因为平台是主机资源。
请注意,这与设备对象相同


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

clGetPlatformIDs用于获取平台对象,用户不会
malloc
它们,也不应该
free
它们。您首先使用clGetPlatformIDs()查询平台数量。然后你做一些类似于platforms=(cl_platform_id*)malloc(numPlatforms*sizeof(cl_platform_id));然后再次使用clGetPlatformIDs()填充平台。但对象平台仍然是用malloc“创建”的,因此是用free发布的。它与clCreateContext()完全不同,例如,它立即返回一个上下文对象。clGetPlatformIDs用于获取平台对象,用户不
malloc
它们,也不应该
free
它们。您首先使用clGetPlatformIDs()来查询平台的数量。然后你做一些类似于platforms=(cl_platform_id*)malloc(numPlatforms*sizeof(cl_platform_id));然后再次使用clGetPlatformIDs()填充平台。但对象平台仍然是用malloc“创建”的,因此是用free发布的。它与立即返回上下文对象的clCreateContext()实例截然不同。