【问题标题】:I only see the "world hello" from host and not the device我只看到主机而不是设备的“世界你好”
【发布时间】:2012-10-30 20:06:34
【问题描述】:

我使用这个网站http://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialHelloWorld在 cuda 中复制了一个 hello world 程序

代码是

#include "util/cuPrintf.cu"
#include <stdio.h>

__global__ void device_greetings(void)
{
  cuPrintf("Hello, world from the device!\n");
}

int main(void)
{
  // greet from the host
  printf("Hello, world from the host!\n");

  // initialize cuPrintf
  cudaPrintfInit();

  // launch a kernel with a single thread to greet from the device
  device_greetings<<<1,1>>>();

  // display the device's greeting
  cudaPrintfDisplay();

  // clean up after cuPrintf
  cudaPrintfEnd();

  return 0;
}

然后使用nvcc hello_world.cu -o hello_world 编译但是我只看到 hello fom 主机而不是设备。

我什至尝试过

printf("{CudaPrintfInt => %s}\n",cudaGetErrorString(cudaPrintfInit()));
printf("{cudaPrintfDisplay => %s}\n",cudaGetErrorString(cudaPrintfDisplay(stdout, true)));

并使用nvcc -arch=sm_11 hello_world.cu -o hello_world 编译,但是我得到:

$ ./hello_world
Hello, world from the host!
{CudaPrintfInt => initialization error}
{cudaPrintfDisplay => __global__ function call is not configured}
$

图形模型是:

$/sbin/lspci -v | grep VGA
07:01.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200eW WPCM450 (rev 0a) (prog-if 00 [VGA controller])

而cuda版本是4:

$ ls /usr/local/cuda/lib/
libcublas.so         libcudart.so.4.0.17  libcurand.so.4         libnpp.so
libcublas.so.4       libcufft.so          libcurand.so.4.0.17    libnpp.so.4
libcublas.so.4.0.17  libcufft.so.4        libcusparse.so         libnpp.so.4.0.17
libcudart.so         libcufft.so.4.0.17   libcusparse.so.4
libcudart.so.4       libcurand.so         libcusparse.so.4.0.17

【问题讨论】:

    标签: c parallel-processing cuda gpu


    【解决方案1】:

    “如果您使用的是 CC 2.0 GPU,则根本不需要 cuPrintf - CUDA 为 CC-2.0 和更高版本的 GPU 内置了 printf。所以只需替换您对 cuPrintf 的调用即可获得实际的打印”( source)

    以这种方式编写代码只是为了检查导致此问题的原因。

    #include <cuda_runtime.h>
    #include "util/cuPrintf.cu"
    #include <stdio.h>
    __global__ void device_greetings(void)
    {
      cuPrintf("Hello, world from the device!\n");
    }
    
      int main(void)
      {
      // greet from the host
      printf("Hello, world from the host!\n");
    
      // initialize cuPrintf
      printf("{CudaPrintfInt => %s}\n",cudaGetErrorString(cudaPrintfInit()));
    
      // launch a kernel with a single thread to greet from the device
      device_greetings<<<1,1>>>();
    
      // display the device's greeting
      printf("{cudaPrintfDisplay => %s}\n",cudaGetErrorString(cudaPrintfDisplay()));
    
      // clean up after cuPrintf
      cudaPrintfEnd();
    
      return 0;
    }
    

    Here 说这是因为: “被调用的设备函数(通常通过 cudaLaunch())之前没有通过 cudaConfigureCall() 函数进行配置。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 2010-10-10
      • 2013-10-16
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多