Hatena::ブログ(Diary)

それなりにマジメなメモ このページをアンテナに追加 RSSフィード Twitter

2011-04-25

CUDAのカーネル関数でprintfを使う

00:31 | CUDAのカーネル関数でprintfを使うを含むブックマーク CUDAのカーネル関数でprintfを使うのブックマークコメント

カーネル関数でもprintf()が使えるようになったのに全然使ってこなかったので、

折角なのでためそうとCUDAプログラミングガイドのソースをそのまま持ってきてコンパイルしたら・・・

error: calling a host function from a __device__/__global__ function is not allowed

って言われたorz

バージョンもnvcc3.2でprintf()が使えるって書いてある。

GPUもFermiを使ってるのになんで?ってなった時のメモです。

環境

  • SUSE Linux Enterprise Server 11 SP1
  • Tesla M2050
  • nvcc 3.2

解決策

ためしに参考資料のCUDAプログラミングガイドの中のB.14 Formatted Outputの部分にあるサンプルをそのままコンパイルしているのにダメだったのでなんでかなぁと参考資料のあたりを読んでいると、どうやらコンパイルするときに

nvccのオプションに-arch=sm_20か -arch=sm_21をつけないとダメなそうな。

実際に付けてみるとコンパイルは通りました。

cuda-gdbもあるし昔と違って大分カーネル関数の部分のデバグが楽になったなぁ


参考資料

  1. http://developer.download.nvidia.com/compute/cuda/3_2_prod/toolkit/docs/CUDA_C_Programming_Guide.pdf
  2. http://forums.nvidia.com/index.php?showtopic=173883

07140714 2012/07/14 22:57 この記事のおかげでprintf()を使うことができました。ありがとうございます。

トラックバック - http://d.hatena.ne.jp/ang65/20110425/1303745501