我已經使用opencl實現了一個項目。我有一個包含內核函數和內核使用的函數的文件包含在一個單獨的頭文件中,但是當我更改包含的文件時,有時會應用這些更改,有時它們不會,這會讓我感到困惑如果應用程序有bug或沒有。OpenCL clBuildProgram緩存源文件,並且在#include被修改的源文件時不會重新編譯
我檢查了stackoverflow中的其他帖子,並看到nvidia傳遞-I{include directory}
嚴重的問題,所以我改變它,並給出頭文件地址明確,但仍然opencl編譯器無法找到頭文件中的錯誤包含在內核文件名中。
此外,我採用了NVIDIA GTX 980,我還龍頭安裝CUDA 7.0我的電腦上。
任何人有同樣的經歷?我該如何解決它?
所以,假設我有一個這樣的內核:
#include "../../src/cl/test_kernel_include.cl"
void __kernel test_kernel(
__global int* result,
int n
)
{
int thread_idx = get_global_id(0);
result[thread_idx] = test_func();
}
其中test_kernel_include.cl
如下:
int test_func()
{
return 1;
}
然後我運行代碼,我得到一個數組,其所有成員都正如我們所預期的那樣等於1
。現在,我改變test_kernel_include.cl
到:
int test_func()
{
return 2;
}
,但結果仍然是一個數組,其所有成員都等於1
應改爲2
,但事實並非如此。
此外,在Windows中可以找到'%AppData%\ NVIDIA \ ComputeCache'。這種愚蠢的東西是否也適用於AMD和英特爾,或者它是針對nvidia編譯器的? – mmostajab
我只注意到NVIDIA的這個問題。其他人也可能實施緩存方案,但也許他們考慮到包含的標題。 – jprice
我簡單地在visual studio中爲我的prebuild事件添加了'del/Q/S%APPDATA%\ NVIDIA \ ComputeCache *',現在它總是在重新運行應用程序之前刪除編譯器的緩存:) – mmostajab