Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自另一cu文件的CUDA函数调用_Cuda - Fatal编程技术网

来自另一cu文件的CUDA函数调用

来自另一cu文件的CUDA函数调用,cuda,Cuda,我有两个cuda文件,分别是A和B。 我需要调用从a到B的函数,比如 __device__ int add(int a, int b) //this is a function in A { return a+b; } __device__ void fun1(int a, int b) //this is a function in B { int c = A.add(a,b); } 我该怎么做 我可以使用静态关键字吗?请给我举个例子。简单的回答是你不能。CUDA只支持内

我有两个cuda文件,分别是A和B。 我需要调用从a到B的函数,比如

__device__ int add(int a, int b) //this is a function in A
{
   return a+b;
}



__device__ void fun1(int a, int b) //this is a function in B
{
    int c = A.add(a,b);
}
我该怎么做


我可以使用静态关键字吗?请给我举个例子。

简单的回答是你不能。CUDA只支持内部链接,因此编译内核所需的一切都必须在同一个翻译单元中定义

您可以这样做,将函数放入头文件中,如下所示:

// Both functions in func.cuh
#pragma once
__device__ inline int add(int a, int b) 
{
   return a+b;
}

__device__ inline void fun1(int a, int b)
{
    int c = add(a,b);
}

并将该头文件包含到使用函数所需的每个.cu文件中。CUDA构建链似乎尊重
inline
关键字,这种声明不会在我使用的任何CUDA平台(不包括Windows)上生成重复符号。我不确定它是否有效,因此cavaet emptor。

我认为同时有可能解决它:

您可以在VS Project Properties->CUDA C/C++->Common或use编译器参数-rdc=true中启用“生成可重新定位的设备代码”