因为需要使用GUP并行计算,所以找了一些关于CUDA的资料看,差不多弄懂原理后开始尝试写自己的代码,谁知马上遇到了第一个拦路虎——调用核函数时老是说<<< >>>没有定义,连编译都没法通过!
查找相应的资料,大部分都说这是因为编译器不同的原因,.cu文件和.cpp文件的编译是不同的。在.cpp文件与.cu文件混合编写时,不应该在.cpp文件里出现.cu文件的函数,而是应该使用外部拓展c标识符。我的程序恰好存在这方面的问题,于是我重新整理了程序,完全按照网上示例程序的组织方式,然后运行,结果还是不行——<<< >>>应该输入表达式…………
再次仔细检查,依然不知道哪里错了。上网查找资料,总说纷纭,有说环境变量是中文名的造成的,有说CUDA没配置好的,甚至还有说是机器的硬件配置不支持的……这些都被推翻了——我新建了一个官方例程CUDA Runtime,完美执行……
到底是什么原因?最终解决了。问题还是出现在核函数kernel本身。概括来说就是:__global__定义的核函数kernel中有未定义的标识符,结果这个error没有能够定位好,就让<<< >>>给背锅了!!
出错部分代码如下:
int x = 0;
int y = 0;
//GPU上执行的部分
__global__ void pro_fft(float *pro)
{
//GUP计算索引
int m = blockIdx.x;
int j = blockIdx.y;
int i = threadIdx.x;
int num = m*x*y + j * y