メニーコアと格闘ブログ:CUDA 漫ろ歩き その2

出典: トータル・ディスクロージャ・サイト(事実をありのままに)

[nvccでコンパイルしてみる]

nvccは、“NVIDIA CUDA Compiler”の略です。CUDAを使ったソースコードからGPUを動作させる、実行コードを生成するための特別なコンパイラです。

では、何はなくとも、恒例の“Hello,world”を標準出力へ表示してみましょう。

下のプログラムをhello0.cuというファイル名で保存して、コンパイルします。


 #include <stdio.h>

 int main(void) {

  printf("Hello, world\n");

  return 0;

 }


nvccを使ってコンパイル後、実行します。

$ nvcc hello0.cu -o hello0.cu

$ ./hello0.cu


nvccはGCCと同様、-Iでインクルードパスを、-Lでライブラリのパスを通すことができ、-lでリンクするライブラリを指定できます。

例: $ nvcc hello.cu -I/usr/include -L /usr/lib64 -lX11

その他のオプションについては、${CUDA Toolkitをインストールしたディレクトリ}/doc/nvcc_2.2.pdfにあるマニュアルに書いてありますので、一度目を通しておきましょう。


[GPUを使ってみる]

今度は、GPUに仕事をさせてみましょう。GPU側でメモリ上に文字を生成し、それをホスト側で表示します。

GPU側で直接標準出力に文字を表示したいところですが、これには以下の制限があるらしいことが、参考文献にあります。

・GPU側から呼べる関数は、__device__修飾された関数だけとなっており、それ以外の関数や、C/C++標準ライブラリの関数を呼ぶことができない

・GPUのメモリとホストのメモリは完全に独立しているため、ホストからGPUのメモリを変更したり、GPUからホストのメモリを変更することができない


まずは、下のコードを“hello1.cu”として、コピー&ペースト後、実行してください。


 #include <stdio.h>

 /* GPU用strcpy */

 __device__ void

 dev_strcpy(char *dst, const char *src)

 {

  while (*dst++ = *src++);

 }

 /* GPU側エントリ */

 __global__ void gen_hello(char *A)

 {

  dev_strcpy(A, "Hello, World!");

 }

 int main()

 {

  char *d_hello;

  /* ホストのメモリを確保 */

  char hello[128];

  /* GPU側のメモリ(デバイスメモリ)確保 */

  cudaMalloc((void**)&d_hello, 128);

  /* gen_hello 呼び出し */

  gen_hello<<<1,1>>>(d_hello);

  /* GPU側のデータを取得 */

  cudaMemcpy(hello, d_hello, 128, cudaMemcpyDeviceToHost);

  /* 確保したメモリを解放 */

  cudaFree(d_hello);

  /* 出力 */

  puts(hello);

 }


GPUを使うためのプログラムが増えました。

プログラムの詳細については、参考文献に詳しく掲載されています。


処理の概要は、

1. まず、mainプログラムが、ホスト側の処理として動作します。

2. 処理がgen_helloに達したら、“__global__”と修飾されたgen_hello関数(GUP側)に処理が移ります。

3. dev_strcpy関数にて、デバイス(GPU側)内部で、メモリ内容のコピーが行われます。“__device__”修飾された関数はデバイス内で動作します。

4. cudaMemcpyにて、GPU側データをCPU側にコピーします。

5. CPU側で標準出力に文字列を表示します。

ファイル:CUDA 漫ろ歩きその2-1.jpg


[参考文献]

http://gpu.fixstars.com/index.php/%E7%B0%A1%E5%8D%98%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86


ナン 2009年8月17日 (月) 13:45 (JST)


この記事へのコメントをお寄せください

  • サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください
  • トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
  • あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
  • コメントを書き込む場合は名前にひらがなを織り交ぜてください。
  • あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

<comments hideform="false" />


Comments

ノート:メニーコアと格闘ブログ:CUDA 漫ろ歩き その2

個人用ツール