我们如何使用cuPrintf()?

时间:2012-11-28 15:12:55

标签: cuda nvcc

使用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

谢谢!

2 个答案:

答案 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