相关疑难解决方法(0)

OpenCL clBuildProgram缓存源,如果#include'd源更改,则不会重新编译

我用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();
}
Run Code Online (Sandbox Code Playgroud)

其中test_kernel_include.cl如下:

int test_func()
{
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

然后我运行代码,我得到一个所有成员都等于1我们期望的数组.现在,我test_kernel_include.cl改为:

int test_func()
{
  return 2;
}
Run Code Online (Sandbox Code Playgroud)

但结果仍然是一个数组,所有成员都1应该更改为哪个2但不是.

opencl

8
推荐指数
2
解决办法
1288
查看次数

标签 统计

opencl ×1