2011-09-12 50 views
9

有沒有辦法在OpenCL中使用C風格函數指針?opencl支持函數指針嗎?

換句話說,我想用幾個值填充OpenCL結構,以及指向OpenCL函數的指針。我不是在談論從CPU功能轉到GPU功能,而是在談論從GPU功能轉到GPU功能。

這可能嗎?

---編輯---

如果不是,那麼有沒有辦法解決這個問題?在CUDA中我們有對象繼承,在4.0中我們甚至有虛函數。關於我能找到的實現像這樣的運行時分派的唯一方法是使用if語句,而且這樣會變得非常快。

+1

據我所知,答案是否定的。我會盡力挖掘一個參考 – Flexo

回答

11

OpenCL 1.1 specification

6.8節(限制)的(a):

指針的使用有所限制。以下規則適用:

  • 參數傳遞給內核是指針 必須用__global,__constant或__local預選賽宣告程序中聲明的函數。
  • 與__constant,__local或__global限定符 聲明的 指針只能分配與__constant, __local或分別 __global詞聲明的指針。
  • 功能指針不允許 允許

平時的工作圍繞我用這與宏。邪惡,但目前不可避免。

#define FEATURENAME_START impl1_start 
#define FEATURENAME_END impl1_end 

我然後要麼在編譯的時候注入到這個內核或者它作爲參數傳遞到OpenCL編譯器:所以我通常喜歡的東西而告終。在通常意義上,它不是一個運行時間,但即使不是設備,它仍然可以從主機的角度來看運行時間。

3

AMD未來有計劃爲此提供硬件支持,因此可能會有未來的擴展。