c++ - Cuda Hello World printf 即使使用 -arch=sm_20 也不工作

标签 c++ cuda

我不认为我是 Cuda 的新手,但显然我是。

我最近将我的 cuda 设备升级到了 1.3 到 2.1 的一种功能 (Geforce GT 630)。我还想全面升级到 Cuda 工具包 5.0。

我可以编译通用的 cuda 内核,但即使设置了 -arch=sm_20,printf 也无法正常工作。

代码:

#include <stdio.h>
#include <assert.h>
#include <cuda.h>
#include <cuda_runtime.h>

__global__ void test(){

    printf("Hi Cuda World");
}

int main( int argc, char** argv )
{

    test<<<1,1>>>();
        return 0;
}

编译器:

Error   2   error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_20,compute_10\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include"  -G   --keep-dir "Debug" -maxrregcount=0  --machine 32 --compile -arch=sm_20  -g   -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o "Debug\main.cu.obj" "d:\userstore\documents\visual studio 2010\Projects\testCuda\testCuda\main.cu"" exited with code 2.  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.targets  592 10  testCuda
Error   1   error : calling a __host__ function("printf") from a __global__ function("test") is not allowed d:\userstore\documents\visual studio 2010\Projects\testCuda\testCuda\main.cu    9   1   testCuda

因为这个问题,我的生活快要结束了……完成了,完成了。请在屋顶上给我一个答案。

最佳答案

如果您在内核中使用 printf,您应该使用 cudaDeviceSynchronize():

#include <stdio.h>
#include <assert.h>
#include <cuda.h>
#include <cuda_runtime.h>

__global__ void test(){
    printf("Hi Cuda World");
}

int main( int argc, char** argv )
{
    test<<<1,1>>>();
    cudaDeviceSynchronize();
    return 0;
}

关于c++ - Cuda Hello World printf 即使使用 -arch=sm_20 也不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15669841/

相关文章:

c++ - 如何评估自定义内存分配器的质量?

c++ - 试图返回一个用 `std::unique_ptr` 构造的 `NULL`

c++ - 命名空间 thrust::system::cuda::thrust 中无法解释的错误,特别是在 "system_error"和 "cuda_category"

compiler-construction - 使用 nvcc CUDA 编译器时出现段错误的可能原因有哪些?

c++ - "expected primary expression __"是什么意思?

c++ - 在应该返回 vector 的函数中返回 NULL

c++ - 让 gcc 将一系列 BYTE 比较转换为 WORD/DWORD/QWORD

parallel-processing - 提早退出线程是否会破坏 block 中CUDA线程之间的同步?

cuda - 无法在cuda内核函数中使用printf

c++ - 在 curand_kernel.h 之前包含 thrust/sort.h 会产生编译错误