開発環境であるSDKではディレクトリ構成を尊重すること

  • SDKを使ってGUIベースでプログラムを作るときは、GUIディレクトリ構成等の面倒を見てくれるので意識する必要はない(のだと思う)が、GUIを使わずにSDKのサンプルプロジェクトを書き換えながら、新規のプログラムを作るときには、ディレクトリ構成を気にする必要がある
  • "/home/usr/NVDIA_CUDA_SDK/"のようにSDKを入れているとする。
    • 配下には、次のディレクトリがある
      • "bin"
      • "common"
      • "commonlib"
      • "doc"
      • "lib"
      • "projects"
      • "releaseNotesData"
      • "tools"
    • プログラム作りで、最低限、気にするべきは、"projects/"と"bin/linux/release/"である
      • "projects/"
        • ここは、cudaのソースを書き、Makefileを作って、"make"をするところ
        • "projects/"以下に、開発単位でディレクトリを作成し、ファイルを置く
        • サンプルプロジェクトである、"matrixMul"を例に取れば
          • "matrixMul.cu":いわゆるmain関数を持つ、ホストソース
          • "matrixMul_kernel.cu":カーネルソース
          • "matrixMul.h":関数プロトタイプ、グローバル変数の宣言、記号定数といったものを記述しておく、ヘッダファイル
          • "matrixMul_gold.cpp":よく分からないけれど、CなのかC++なのかの道案内のためのファイルのよう。中に'extern "C"'という記載があるからそう思うわけだけれど、'extern "C"'についてはこちら
          • "matrixMul.linkinfo":これまたよくわからないけれど、コンパイルとかSDK上での作業のためのファイルのように思える
          • "Makefile":実行可能ファイルの名前を決める、ソースファイルを決める、C/C++を選ばせるための"hoge_gold.cpp"ファイルを指定する、includeの範囲を定める
            • ここのパスが相対パスで書いてあるので、プロジェクト作りは"projects/hoge/"以下で作らねばならず、出来上がる実行可能ファイルは、"bin/linux/release/"以下にできるわけである。
  • 試し方
    • 自分用のディレクトリを"projects/hoge/"と作る
    • サンプルプロジェクトをひとつ選び(たとえば"matrixMul"、その中のファイルをそっくりコピーする
    • 必要に応じて書き換える
      • まず、"Makefile"を見る
        • プロジェクト特異的な記載は以下の通りなので、3箇所ある"matrixMul"を"hoge"に書き換える
# Add source files here
EXECUTABLE	:= matrixMul
# Cuda source files (compiled with cudacc)
CUFILES		:= matrixMul.cu
# C/C++ source files (compiled with gcc / c++)
CCFILES		:= \
	matrixMul_gold.cpp
      • 書き換えた3箇所のうち、ひとつは、出来上がる実行可能ファイルの名前が"hoge"になるということで、あとの2箇所はファイルの名前だから、該当するファイルの名前を変えないといけない。変えよう
      • 名前を変えてできた"hoge.cu","hoge_gold.cpp"はそれぞれ、使われることが分かっているファイルだから、その中味を見る
        • "hoge.cu"は以下の既述があって、カーネルソースを呼んでいることが分かるから、カーネルソースも"hoge_kernel.cu"に変える
// includes, kernels
#include <matrixMul_kernel.cu>
      • 新たに変名してできた"hoge_kernel.cu"はヘッダファイルを読んでいるから、ヘッダファイルも"hoge.h"に変名する。ヘッダファイル内はプロジェクト名特異的な表現がないから、名前変更作業の枝はここで行き止まり。"hoge_gold.cpp"に戻る
#include <stdio.h>
#include "matrixMul2.h"
      • "hoge_gold.cpp"は、その中に、プロジェクト名特異的な表現がないから、これで作業は終了
    • 結果として、"Makefile"を適宜書き換え
    • ホストソースとカーネルソース、ヘッダファイルとC/C++の選別ファイルの名前を変更し、それぞれのファイルの中で読んでいるファイル名も変更すると、新規プロジェクトの出来上がり。
    • 後は、ホストソースとカーネルソースを書き換えていく。必要に応じて、別ファイルにコードを書きつつ、そのコードファイルをincludeしていけばよさそう
  • "make"と実行可能ファイル
    • 上記でできた、ソースファイルたちについて、"projects/hoge/"以下で"make"コマンドを醗酵すると、"/home/NCDIA_CUDA_SDK/bin/linux/release/"に"hoge"なるファイルができている
    • これは、実行可能ファイル。"./hoge"とコマンドを発行すると、実行される。
    • 中味はまだ、何もいじっていないけれども、「自分が作った」プログラムが、GPGPUしていることになる