使用cuPrintf()我们需要做什么? (设备计算能力1.2,Ubuntu 12)我找不到“cuPrintf.cu”和“cudaPrintf.cuh”,所以我下载了他们的代码并包含它们:
#include "cuPrintf.cuh"
#include "cuPrintf.cu"
顺便说一下,这是代码的其余部分:
__global__ void hello_kernel (float f) {
printf ("Thread number %d. f = %d\n", threadIdx.x, f);
}
int main () {
dim3 gridSize = dim3 (1);
dim3 blockSize = dim3 (16);
cudaPrintfInit ();
hello_kernel <<< gridSize, blockSize >>> (1.2345f);
cudaPrintfDisplay (stdout, true);
cudaPrintfEnd ();
return (0);
}
但是nvcc仍然犯了一个错误:
max@max-Lenovo-G560:~/CUDA/matrixMult$ nvcc printfTest.cu -o printfTest
printfTest.cu(5): error: calling a __host__ function("printf") from a __global__
function("hello_kernel") is not allowed
谢谢!
答案 0 :(得分:3)
在你的内核而不是:
printf ("Thread number %d. f = %d\n", threadIdx.x, f);
你应该这样做:
cuPrintf ("Thread number %d. f = %d\n", threadIdx.x, f);
除此之外,我相信你的代码是正确的(它对我有用)。
这个SO question/answer提供了有关正确使用cuPrintf的更多提示。
答案 1 :(得分:-1)
包含<stdio.h>
并使用-arch=sm_20
进行编译。
<强>详情:
代码:
#include <stdio.h>
__global__ void hello_kernel (float f) {
printf ("Thread number %d. f = %d\n", threadIdx.x, f);
}
int main(){
return 0;
}
汇编:
nvcc -arch=sm_20 -o printfTest printfTest.cu