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

それ以外は、あなたのコードは正しいと思います(私にとってはうまくいきます)。

This 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 に答える