我想在我的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()
的行为不同;而且我当然不需要其中的大部分内容。
答案 0 :(得分:5)
这是一个实现细节,您不需要知道哪些源于CUDA语法的限制(基本上定义同一函数的不同__device__
和__host__
版本是非法的)。
标准库原型在编译期间用作设备代码中的代理,在编译支持的体系结构时,使用一些偷偷摸摸的模板重载将设备实现插入到设备代码中。