我用opencl实现了一个项目。我有一个包含内核函数的文件,内核使用的函数包含在单独的头文件中,但是当我更改包含的文件时,有时会应用更改,有时则不会,这让我很困惑应用程序是否有错误。
我检查了 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
to:
int test_func()
{
return 2;
}
但结果仍然是一个所有成员都等于的数组1
应该改为2
但他们不是。
在平台初始化之前执行此操作:
setenv("CUDA_CACHE_DISABLE", "1", 1);
它将禁用构建的缓存机制。
它也适用于 OpenCL 平台,尽管它说的是 CUDA。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)