- 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"はそれぞれ、使われることが分かっているファイルだから、その中味を見る
// 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していることになる