How do we use cuPrintf()?

家住魔仙堡 提交于 2020-01-01 16:25:11

问题


What do we have to do to use cuPrintf()? (device compute capability 1.2, Ubuntu 12) I couldn't find "cuPrintf.cu" and "cudaPrintf.cuh", so i downloaded their code and include them:

#include "cuPrintf.cuh"
#include "cuPrintf.cu"

By the way this is the rest of the code:

__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);
}

But nvcc still gives a mistake:

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

Thanks!


回答1:


In your kernel instead of this:

printf ("Thread number %d. f = %d\n", threadIdx.x, f);

you should do this:

cuPrintf ("Thread number %d. f = %d\n", threadIdx.x, f);

Other than that, I believe your code is correct (it works for me).

This SO question/answer gives more tips about using cuPrintf properly.




回答2:


Include <stdio.h> and compile with -arch=sm_20.

Details:

code:

#include <stdio.h>
__global__ void hello_kernel (float f) {
    printf ("Thread number %d. f = %d\n", threadIdx.x, f);
}

int main(){
    return 0;
}

compilations:

 nvcc -arch=sm_20 -o printfTest printfTest.cu


来源:https://stackoverflow.com/questions/13608287/how-do-we-use-cuprintf

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!