3

我们必须做什么才能使用 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

谢谢!

4

2 回答 2

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 的更多提示。

于 2012-11-28T15:34:32.400 回答
-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
于 2012-11-28T15:37:12.760 回答