我曾在幾個項目上與OpenCL合作過,但一直將內核編寫爲一個(有時很大)的函數。現在我正在研究一個更復雜的項目,並希望在多個內核之間共享函數。如何構建大型OpenCL內核?
但我能找到的所有例子都顯示內核爲單個文件(很少有甚至調用輔助函數)。似乎應該可以使用多個文件 - clCreateProgramWithSource()
接受多個字符串(並且將它們結合起來,我假設) - 雖然pyopencl的Program()
只接受單一來源。
所以我想從別人聽到有經驗的這樣:
- 是否有與多個源文件相關的問題?
- 是pyopencl簡單連接文件的最佳解決方法?
- 有什麼辦法可以編譯一個函數庫(而不是每個內核都傳入庫源代碼,即使並非全部都使用)?
- 如果每次都需要傳入庫源,是否丟棄了未使用的函數(無開銷)?
- 任何其他最佳做法/建議?
謝謝。
您可以創建一個包含#include「part1.cl」#include「part2.cl」的並置文件。這適用於我(NVidia編譯器),儘管可能每次應用程序運行時編譯所有內容。 我認爲有一個預編譯函數庫有點科幻,因爲函數代碼被內聯到每個內核中(這就是爲什麼你不能寫遞歸函數)。 –