Visual Studio 2010 と計算機能 2.0 の GTX480 を使用しています。
sm を 2.0 に設定しようとしましたが、カーネルで printf() を使用しようとすると、次のようになります。
エラー : __device__/__global__ 関数 ("test") からホスト関数 ("printf") を呼び出すことは許可されていません
これは私のコードです:
#include "util\cuPrintf.cu"
#include <cuda.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cuda_runtime.h>
__global__ void test (void)
{
printf("Hello, world from the device!\n");
}
void main(void)
{
test<<<1,1>>>();
getch();
}
ここで例を見つけます: "CUDA_C_Programming_Guide" 'page _106' "B.16.4 Examples" ついに、それは私の仕事です:Dありがとう。
#include "stdio.h"
#include <conio.h>
// printf() is only supported
// for devices of compute capability 2.0 and higher
#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 200)
#define printf(f, ...) ((void)(f, __VA_ARGS__),0)
#endif
__global__ void helloCUDA(float f)
{
printf("Hello thread %d, f=%f\n", threadIdx.x, f);
}
int main()
{
helloCUDA<<<1, 5>>>(1.2345f);
cudaDeviceSynchronize();
getch();
return 0;
}