gpt4 book ai didi

visual-studio-2008 - 如何将内核文件 CUDA 与主 .cpp 文件分开

转载 作者:行者123 更新时间:2023-12-04 23:54:55 27 4
gpt4 key购买 nike

当我在同一个文件 mainFunc.cu 中使用 kernelAdd() 函数和 main() 函数构建代码时,就可以了。

但是当我将 kernelAdd.cu 文件中的 kernelAdd() 函数和 main.cpp 文件中的主文件分开时,它构建了两个错误:

“错误 C2065:‘添加’:未声明的标识符”

和“错误 C2059:语法错误:'<'”

我在 Visual Studio 2008 和 Cuda v5.0 中构建了它们。

我该如何纠正它的错误?

谢谢!

内核添加文件

__global__ void add(int a, int b, int *c) {
*c = a + b;
}

主函数文件
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <conio.h>

int main(void) {

int c;
int *devC;

cudaMalloc((void**) &devC, sizeof(int));
add<<<1,1>>>(2,7,devC);
cudaMemcpy(&c, devC, sizeof(int), cudaMemcpyDeviceToHost);

printf("2+7=%d\n", c);

cudaFree(devC);

getch();
return 0;
}

最佳答案

error C2065: 'add' : undeclared identifier



此错误与 CUDA 无关。 add函数属于一个编译单元( kernelAdd.cu ),而另一个编译单元( mainFunc.cpp )对此一无所知。为了给它这个信息,你必须创建一个额外的头文件 kernelAdd.h使用函数声明:
__global__ void add(int a, int b, int *c);

并将其包含在 mainFunc.cpp 中:
#include "kernelAdd.h"

cucpp file 是单独编译的,并且只知道它在它包含的头文件中看到的函数。

error C2059: syntax error : '<'



现在我在这里猜测(没有 VS,甚至没有要检查的 Windows),但似乎 VS 根据其扩展名为项目中的每个文件选择编译器。因此 mainFunc.cpp使用通用 C++ 编译器编译,但 <<<>>>内核调用的语法不属于标准 C++——它来自 CUDA。所有特定于 CUDA 的语法必须仅用于将使用 nvcc 编译的文件中。 .

因此,解决您的问题的一种方法是重命名 mainFunc.cppmainFunc.cu .您仍然可以保留主文件 .cpp ,当然,但是您必须将内核调用移动到 cu 中的某个普通 C++ 函数中文件并将其公开在标准 C++ 头文件中,您的 .cpp文件将包括。

关于visual-studio-2008 - 如何将内核文件 CUDA 与主 .cpp 文件分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18200952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com