无法编译简单的 CUDA 示例

Posted

技术标签:

【中文标题】无法编译简单的 CUDA 示例【英文标题】:Unable to compile simple CUDA example 【发布时间】:2012-07-26 21:27:50 【问题描述】:

test.cu:

#include <iostream> 
#include "book.h"
__global__ void add( int a, int b, int *c ) 
    *c = a + b; 

int main( void ) 
    int c;
    int *dev_c;
    HANDLE_ERROR( cudaMalloc( (void**)&dev_c, sizeof(int) ) );
    add<<<1,1>>>( 2, 7, dev_c );
    HANDLE_ERROR( cudaMemcpy( &c, 
                              dev_c, 
                              sizeof(int), 
                              cudaMemcpyDeviceToHost ) );
    printf( "2 + 7 = %d\n", c );
    cudaFree( dev_c );
    return 0; 

我正在尝试编译上面的示例 test.cu。我尝试使用 nvcc test.cu 但编译器给出错误

4.cu:2:18: fatal error: book.h: No such file or directory
compilation terminated.

如何告诉编译器 book.h 在哪里?我已经在 /usr/local/cuda 中安装了 CUDA。 我需要制作 Makefile 吗? 我是 CUDA 和 Makefile 的新手,所以问题可能看起来微不足道。

【问题讨论】:

Book.h 不是 CUDA 的一部分。它与“CUDA by example”一书中的示例一起提供。 感谢@talonmies,我的印象是 book.h 包含在 CUDA 中。我会尝试不同的例子。 【参考方案1】:

Book.h 不是 CUDA。它被“Cuda by Example”用于一些简单的东西。 在本例中需要提供 HANDLE_ERROR,您应该编写自己的代码来处理错误。 在这里可以找到 book.h 代码:http://code.google.com/p/cuda-examples/source/browse/trunk/common/book.h?r=3

【讨论】:

【参考方案2】:

我相信使用引号 ("") 会告诉编译器在与代码文件相同的目录中查找,因此您可能想尝试使用 &lt;book.h&gt; 而不是 "book.h

假设 book.h 是一个包含在 CUDA 中的文件。我以前从来没有用过。

【讨论】:

感谢 Liam 的回复,但 CUDA 似乎不包含“book.h”。

以上是关于无法编译简单的 CUDA 示例的主要内容,如果未能解决你的问题,请参考以下文章

编译 CUDA cuSolver 特征值示例时出现编译错误

使用 Visual Studio 2010 express 编译 CUDA 示例

无法使用 sudo 命令编译 cuda

无法使用 Cuda 引用编译 dll

为啥 nvcc 无法使用 boost::spirit 编译 CUDA 文件?

CUDA编译中如何分配寄存器[重复]