2016-03-16 51 views
-1

OpenCL編程的典型示例工作流程似乎集中於字符串中的源代碼,傳遞給JIT編譯器,然後最終入隊(使用特定的內核名稱);並且編譯結果可以被緩存 - 但是這對程序員來說是需要照顧的。用於OpenCL的CUDA式工作流程

在CUDA中,代碼以非JIT方式編譯爲目標文件(與主機端代碼一起,但暫時忘記了這一點),然後在上下文中引用設備端函數入隊或參數等。

現在,我想要第二種工作流程,但使用OpenCL源代碼。也就是說,假設我有一些C主機端代碼my_app.c和一些OpenCL內核代碼在單獨的文件my_kernel.cl(爲了討論的目的是獨立的)。我希望能夠在my_kernel.cl上運行魔術命令,獲得my_kernel.whatever,鏈接或虛假鏈接以及my_app.o,並獲得二進制文件。現在,在my_app.c中,我希望能夠以某種方式將內核稱爲編譯OpenCL程序(或程序+內核名稱),即使它不是外部符號,也不會出現編譯錯誤。

這是支持嗎?使用nVIDIA的ICD還是與其他ICD一起使用?如果沒有,至少是這個支持的一些,比如說魔法內核編譯器+生成一個額外的頭文件或源代碼片段,用於編譯my_app.c

回答

3

調查SYCL,它提供了單一來源的C++ OpenCL。但是,尚未在每個平臺上提供。

https://www.khronos.org/sycl

+0

是不是那種輕描淡寫?它似乎需要尚未標準的C++功能(C++ 17材料?)另外,這是一個規範/標準;有沒有符合SYCL的實現? – einpoklum

+1

是的,也許是輕描淡寫;我不使用SYCL,所以我不確定它的可用性。 – Dithermaster

+0

然後,也許在3年左右,我可以接受這個答案:-)你雖然有我的+1。 – einpoklum

1

已經有持續的努力,使CUDA樣的工作流程在TensorFlow,它使用SYCL 1.2 - 這是積極向上流。經由設備工廠

的工作流程是有點不同,因爲你沒有做的仿函數模板的顯式實例爲CUDA做https://github.com/lukeiwanski/tensorflow/blob/master/tensorflow/core/kernels/adjust_contrast_op_gpu.cu.cc或任何.cu.cc文件(事實上​​,你不必添加任何新文件 - 避免與構建系統混亂)

以及這件事:https://github.com/lukeiwanski/tensorflow/issues/89;

TL; DR-CUDA可以創建「持久」指針,OpenCL需要通過緩衝區和訪問器。

Codeplay的SYCL編譯器(ComputeCpp)目前需要SPIR擴展的OpenCL 1.2--這些是Intel CPU,Intel GPU(Beignet工作正在進行中),AMD GPU(儘管較舊的驅動程序) - 其他平臺即將推出!

安裝說明可以在這裏找到:https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

我們的努力可以在我的TensorFlow的叉跟蹤:https://github.com/lukeiwanski/tensorflow(分公司開發/ eigen_mehdi)

徵使用的是:https://bitbucket.org/mehdi_goli/opencl(分支默認)

我們到達那裏!歡迎貢獻! :)