【发布时间】:2017-04-26 07:23:13
【问题描述】:
我对一些 CUDA 函数有一点问题。
我想将.cu 文件与.cu 文件和.cpp 文件中的Nvidia 样本分开。内核是一个函数模板。在 C++ 文件中将其声明为外部函数时出现错误。
定义如下:
template <int BLOCK_SIZE> __global__ void
matrixMulCUDA(float *C, float *A, float *B, int wA, int wB)
我已经在 C++ 中声明了这样的函数:
template <int BLOCK_SIZE> extern void
matrixMulCUDA(float *C, float *A, float *B, int wA, int wB);
声明没有给我任何错误,但是当它像这样使用时:
if (block_size == 16)
{
matrixMulCUDA <16> << < grid, threads >> >(d_C, d_A, d_B, dimsA.x, dimsB.x);
}
else
{
matrixMulCUDA <32> << < grid, threads >> >(d_C, d_A, d_B, dimsA.x, dimsB.x);
}
它告诉我“语法错误'
谁能告诉我应该如何在 C++ 中声明函数?请注意,当所有内容都放在 .cu 文件中时,它运行正常。
【问题讨论】:
-
请解释一下,
<< < grid, threads >> >在您使用matrixMulCuda时应该是什么意思。 -
是
.cu文件还是.cpp文件中的“这样使用”代码? -
@AlgirdasPreidžius 这是 CUDA 内核调用语法(插入了一个奇怪的空格)。
-
@Angew ,代码来自 CUDA 示例。
-
@Adi 好的,但是在您拆分文件之后,代码是在
.cu文件还是.cpp文件中?