c++ - CUDA 从单独的文件调用设备函数(名称修改?)

标签 c++ cuda

我应该如何正确执行此操作?这是代码的简化:

//main.cu    
#include "math.cuh"

__global__ void test(float *x, unsigned numElements)
{
    int i = blockDim.x * blockIdx.x + threadIdx.x;

    if (i < numElements)
    {
        float array[5] = {1, 2, 3, 4, 5};
        copyArray(x + 5*i, array, 5);
    }
}

int main(int argc, char **argv)
{
    test<<<blocksPerGrid, threadsPerBlock>>>(d_A, numElements);
}

//math.cuh
__device__ void copyArray(float *dest, float *src, unsigned length);

//math.cu
#include "math.cuh"
__device__ void copyArray(float *dest, float *src, size_t length)
{
    for (int i = 0; i < length; i++) {
        dest[i] = src[i];
    }
}

用这个命令编译:

nvcc -rdc=true -arch=sm_20 -o cudaMain main.cu math.cu -Xlinker -framework,OpenGL,-framework,GLUT && ./cudaMain

得到这个错误:

nvlink error   : Undefined reference to '_Z9copyArrayPfS_j' in '/tmp/tmpxft_00000265_00000000-21_main.o'

这显然看起来像一个名称修改错误,但我尝试将 extern "C"放在各种地方,但它没有用。

最佳答案

函数原型(prototype)使用unsigned,而定义使用size_t。是这个原因吗?

关于c++ - CUDA 从单独的文件调用设备函数(名称修改?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22490585/

相关文章:

c++ - 如何计算多张图片的平均值

c++ - 新版本的 g++ 的多线程性能下降?

c++ - 为什么我的结构只在最后一个而不是每个上存储字符串?

cuda - CUDA 中是否有内置的交叉和点积?

cuda - OSError : libcudart. so.9.2:无法打开共享对象文件:没有这样的文件或目录

c++ - POD 结构(相同类型的成员): are members in contiguous memory locations?

c++ - 非模板函数接受模板消歧器

CUDA不支持外部调用

c++ - isspace 宏与 locale_facets.h 中的 isspace 函数冲突

c++ - 使用cmake为vs2013配置cuda项目得到 "invalid device function"错误