1
我正在學習OpenCL發佈函數(clRelease(objectName)),對我來說有趣的是,沒有函數可以發佈Platform(更具體地說,是cl_platform_id)對象。 有人知道原因嗎?OpenCL - 發佈平臺對象
我正在學習OpenCL發佈函數(clRelease(objectName)),對我來說有趣的是,沒有函數可以發佈Platform(更具體地說,是cl_platform_id)對象。 有人知道原因嗎?OpenCL - 發佈平臺對象
這是因爲您使用常規malloc
而不是clCreateObjectName()
函數創建平臺對象。所以你用一個普通的free
來釋放它們。我想這是因爲平臺是主機資源。
請注意,它對於設備對象是相同的。
編輯:澄清一下,感謝@chippies的評論:clGetPlatformIDs()函數有兩個用途。首先查詢系統中可用的平臺數量。其次,填寫爲您決定使用的實際平臺分配的平臺內存空間。您將這些平臺存儲在您首先使用的內存空間malloc。因此,當你完成這些平臺時,你可以使用malloc-ed的內存釋放它們。
clGetPlatformIDs用於獲取平臺對象,用戶不會'malloc'他們,也不應該'釋放'他們要麼AFAIK。 – chippies
您首先創建一個* clGetPlatformIDs()*以查詢平臺的數量。然後你做一些類似於_platforms =(cl_platform_id *)malloc(numPlatforms * sizeof(cl_platform_id)); _然後再次* clGetPlatformIDs()*來**填充**平臺。但是對象平臺仍然是用malloc「創建」的,因此釋放了* free *。它與* clCreateContext()*完全不同,它立即返回一個上下文對象。 – CaptainObvious
感謝您糾正我。 – chippies