为什么我需要包含<stdio.h>才能使用CUDA的printf()?

时间:2015-07-18 14:35:53

标签: c++ cuda printf gpu-programming

我想在我的CUDA内核中printf()。 [编程指南建议] [1]我这样做:

#include <stdio.h>

__global__ void helloCUDA(float f)
{
    printf("Hello thread %d, f=%f\n", threadIdx.x, f);
}

但这只是包含标准C库的stdio.h。为什么这是必要的? CUDA的printf()与stdio printf()的行为不同;而且我当然不需要其中的大部分内容。

1 个答案:

答案 0 :(得分:5)

这是一个实现细节,您不需要知道哪些源于CUDA语法的限制(基本上定义同一函数的不同__device____host__版本是非法的)。

标准库原型在编译期间用作设备代码中的代理,在编译支持的体系结构时,使用一些偷偷摸摸的模板重载将设备实现插入到设备代码中。