開発環境

CUDA


Visual Studio 2008及びWindows 7 x64でのCUDA環境構築

  • ※ Visual Studio 2008及び各種CUDA関連のソフトウェアのインストール先はデフォルトのCドライブとする
  • ※ x64環境での開発を行う場合は、デフォルトではオプションとなっているVisual C++のx64向けコンパイラをインストールする必要がある

必要なもの

  • ここからDL
  • 下記ソフトウェアを1-3の順でインストールする
    • 1. NVIDIA CUDA Toolkit v3.2
      • CUDAを使用するのに必要な最低限の開発環境
      • インストール先
        C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\
    • 2. NVIDIA GPU Computing SDK 3.2
      • SDK。ユーティリティ群や各種サンプルソース有り
      • インストール先
        C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\
    • 3. CUDA VS Wizard
      • 新規プロジェクトウィザードでCUDAプロジェクトの作成が可能

環境変数について

  • NVIDIA CUDA Toolkit 3.2及びNVIDIA GPU Computing SDK 3.2のインストール段階で環境変数Pathに以下のディレクトリへのパスが通される
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\bin\;
    C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
    C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\bin
  • オリジナルのプロジェクトでCUDAやOpenGL等を使用する際に各種dllの入った以下のディレクトリへのパスを通す必要がある
    ;C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\bin\win64\Release
    ;C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\bin\win64\Debug
    ;C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\bin\win64\Debug
    ;C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\bin\win64\Release

cutil64.dll及びcutil64D.dllのコピー

  • 実行時にダイナミックリンクライブラリのcutil64.dll及びcutil64D.dllが正しくリンクできるように以下のディレクトリ
    C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\lib
  • から、該当ファイルを
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\bin
  • へコピーを行う

Visual Studioのインクルードファイル及びライブラリファイル

  • [ツール]→[オプション]→[プロジェクトおよびソリューション]→[VC++ ディレクトリ]の右上にあるプルダウンメニューからインクルードファイル及びライブラリファイルを選択し、下記のディレクトリへのパスを通す
    [インクルードファイル]
    C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\inc
    C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\inc
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\include
    [ライブラリファイル]
    C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\lib
    C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\lib
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\lib

ユーザー定義キーワード

  • Visual Studio 2008のエディタの機能に登録キーワードをカラー表示してくれる機能があるが、それをCUDAにも適用させる
  • 以下のディレクトリの
    C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\doc\syntax_highlighting\visual_studio_8
  • usertype.datを以下のディレクトリにコピーする(既に存在する場合はコピー元のusertype.datの内容をコピー先にあるusertype.datの末尾に追記する)
    C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE
  • 次に[ツール]→[オプション]→[テキスト エディタ]→[ファイル拡張子]の、拡張子の部分にcuと入力、エディタをMicrosoft Visual C++と選択して追加する。同じように拡張子cuhにも行う

Visual C++ 2008 + OpenGL + GLUT + x64

  • 新しいプロジェクトではWin32の[Win32 コンソール アプリケーション]を選択する
  • x64でビルドするために構成マネージャから以下のページを参考にしてx64ビルド構成にする
  • アプリケーションを実行すると「アプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。」と表示される問題を解決する
    • ソリューション構成Debug及びReleaseの[プロジェクト]→[(プロジェクト名)のプロパティ]→[構成プロパティ]→[C/C++]→[コード生成]のランタイムライブラリをそれぞれマルチスレッドデバッグ(/MTd)及びマルチスレッド(/MT)にする
  • 自動でリンクされないglut64.libをリンクさせる
    • ソリューション構成Debug及びReleaseの[プロジェクト]→[(プロジェクト名)のプロパティ]→[構成プロパティ]→[入力]の[追加の依存ファイルにglut64.libを追加
  • ソリューション構成がDebugの時に「mt.exe : general error c101008a: Failed to save the updated manifest to the file ".\x64\Debug\(実行ファイル名).exe.embed.manifest". (文字化け)」と表示される問題を解決する
    • ソリューション構成Debugの[プロジェクト]→[(プロジェクト名)のプロパティ]→[構成プロパティ]→[マニフェスト ツール]→[入力と出力]の埋め込みマニフェストを、いいえにする
  • アプリケーションを実行すると「アプリケーションを正しく初期化できませんでした。(0xc000007b)」と表示される場合の解決策
    • glut32.dll等のOpenGLやGLUTのDLLを実行ファイルと同じディレクトリ若しくはパスの通してある場所に置く

各種Tips

ビルド時に「(プロジェクト名).obj : error LNK2019: 未解決の外部シンボル (呼び出し先関数名) が関数 (呼び出し元関数名) で参照されました。」と表示される場合の解決策

  • 考えられる状況としては関数の呼び出し元としてC言語で書かれたプログラム(拡張子.c)から.cu内の関数を呼び出そうとしている場合など
  • 解決策は2種類あり、一つは呼び出し元のプログラムの拡張子を.cから.cppへ変更してC++コンパイラでコンパイルさせる方法
  • もう一つは関数を定義している部分にextern "C"を追記する
    • 例 : int f(int x){return x+1;}の場合、extern "C" int f(int x){return x+1;}とする

OpenGLのコードをクラス化して終了処理用のデストラクタを用意したり、atexit関数で終了処理関数を定義しているのにも関らず、それらの関数が正しくコールされない

  • GPU Computing SDK(3.2.16)の64-bit版に同梱されているx64向けのGLUT(e.g. glut64.lib, glut64.dll,...)がバグっている模様
  • 解決方法
    • まず、ここからx64向けにビルドしたGLUT 3.7.6(glut-3.7.6-bin-32and64.zip (0.2 MB))をダウンロードして展開する
    • 次に展開したフォルダの中にあるglut.hをテキストエディタで開き、145行目付近にある以下の記述
      # ifndef GLUT_BUILDING_LIB
      extern _CRTIMP void __cdecl exit(int);
      # endif
    • を以下のように変更する
      #ifndef GLUT_BUILDING_LIB_FOR_VC8
      extern _CRTIMP void __cdecl exit(int);
      #else
      _CRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code);
      # endif
      • ※編集する理由として、GLUT 3.7.6のglut.hではexit関数を再定義しており、VC8環境下でstdlib.hより先にglut.hをインクルードした際に衝突が発生してビルドに失敗する。対策方法の一つとしては、glut.hより先にstdlib.hをインクルードする方法があるが、今回はヘッダファイルを直接編集する方法をとる。上記のように編集することによって、VC8環境下でマクロGLUT_BUILDING_LIB_FOR_VC8が定義されていた場合に正しくビルドすることができる
    • 編集したglut.hファイル及び他の展開したファイルを下記のディレクトリにある対応するファイルと置き換える
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\inc\GL // glut.h
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\lib // glut32.lib, glut64.lib
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\bin // glut32.dll
      
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\bin\win64\Debug // glut32.dll
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\bin\win64\Release // glut32.dll
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\bin\win32\Debug // glut32.dll
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\bin\win32\Release // glut32.dll
      
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\inc\GL // glut.h
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\lib // glut32.lib, glut64.lib
      
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\bin\win64\Debug // glut32.dll
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\bin\win64\Release // glut32.dll
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\bin\win32\Debug // glut32.dll
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\shared\bin\win32\Release // glut32.dll
      
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\OpenCL\bin\Win64\Debug // glut32.dll
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\OpenCL\bin\Win64\Release // glut32.dll
    • さらにglut64.dllを下記のディレクトリにコピーする
      C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\bin
    • 最後にマクロGLUT_BUILDING_LIB_FOR_VC8を定義する。以下に二種類の方法を示す
      • プログラムの先頭で「#define GLUT_BUILDING_LIB_FOR_VC8」と記述する
      • ソリューション構成Debug及びReleaseの[プロジェクト]→[(プロジェクト名)のプロパティ]→[構成プロパティ]→[C/C++]→[プリプロセッサ]→[プリプロセッサの定義]に「;GLUT_BUILDING_LIB_FOR_VC8」を追加する
    • ちなみにベースとなったWin32(x86)向けのGLUT 3.7.6は、OpenGL公式ページ曰くNate RobinsとPaul Mayfieldの両氏によって移植されたらしい

参考リンク



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-11-01 (火) 12:40:48 (2939d)