从anther cu文件调用CUDA函数

时间:2011-06-06 13:43:05

标签: 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);
}

我该怎么做?

我可以使用static关键字吗?请举个例子..

2 个答案:

答案 0 :(得分:4)

简短的回答是,你不能。 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

答案 1 :(得分:1)

我认为同时有可能解决它: CUDA external class linkage and unresolved extern function in ptxas file

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