11
__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 );
}

这是代码。正在生成 HANDLE_ERROR not found 错误。我不知道如何解决它。试图抓取一些头文件,但无法弄清楚......

任何帮助请!

4

2 回答 2

43

如果我不得不猜测,我会说您使用的是 CUDA By Example 一书,它定义了HANDLE_ERROR如下宏:

static void HandleError( cudaError_t err,
                         const char *file,
                         int line ) {
    if (err != cudaSuccess) {
        printf( "%s in %s at line %d\n", cudaGetErrorString( err ),
                file, line );
        exit( EXIT_FAILURE );
    }
}
#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ ))

确保此代码出现在您的源代码中的某处,或您的标题中的某处#include

于 2012-11-06T06:05:38.300 回答
1

你可以在这里下载本书的源代码。

源代码还包含头文件(在 common 文件夹中),其中定义了缺少的宏,并且本书在源代码中引用了这些文件(例如)

#include "../common/book.h"

如果链接不可用,请在 Nvidia Developer 网站或 CUDA 网站上搜索书名,您将找到指向该书页面的直接链接,其中可以找到源代码。

于 2017-11-07T10:35:16.280 回答