具體而言,我的問題是我有CUDA代碼需要運行<curand_kernel.h>
。 NVRTC默認不包含此功能。假設在創建程序上下文(即調用nvrtcCreateProgram
)時,我必須發送文件名(curand_kernel.h
)以及curand_kernel.h
的源代碼?我覺得我不應該那樣做。如何將標準CUDA庫包含在NVRTC代碼中?
很難說;我還沒有從NVIDIA的例子中找到需要像這樣的標準CUDA文件作爲源代碼的人,所以我真的不明白語法是什麼。有些問題:curand_kernel.h
也包含...我是否也必須對每個問題都做同樣的事情?我甚至不確定NVRTC編譯器甚至可以在curand_kernel.h
上正確運行,因爲它有一些它不支持的語言功能,不是嗎?
下一頁:如果你已經發送了一個頭文件的源代碼到nvrtcCreateProgram
,我是否仍然需要在代碼中執行#include
/如果我這樣做會導致錯誤?
這樣做的代碼或類似的代碼的鏈接將不勝感激直接的答案;我真的沒有設法找到任何。
嗯。所以我有一些想法來做這件事。預編譯使用curand到PTX中的代碼是不可行的...在CPU上預生成浮點數是不可行的,因爲需要太多的...因此,我只剩下在curand庫中工作獲取我需要使用NVRTC編譯的部分,並找到rand的另一個實現。 我從curand真正需要的是從0到1的標準統一PRNG,我認爲解決方案是找到另一個使用NVRTC更容易編譯的PRNG,謝謝! –
嗯。 PRNG的GPU實現很難實現。也許我必須以某種方式適應CURAND ... –
@BillySmith最直接的解決方案是構建一個大緩衝區並使用rand()或類似的CPU端填充它,然後將其上傳到主機。保持索引變量指示緩衝區中的「下一個」值。當你擊中緩衝區的末端時,沖洗並重復。 –