CUDA導入メモ1~CUDA toolkit 8.0をWindows10に手っ取り早くインストール~

  • 7
    いいね
  • 0
    コメント

この記事は何?

 GPGPUが面白そうと思ってしまったので、勉強することにしました。これは、勉強したことのメモ書きです。また、筆者含め"ずぶの素人向けの、最新情報を反映している資料って中々ないよね"ということも感じたので、そのレベルに合わせた内容になっています。前提として、目標は

  CUDA Cをそこそこ使えるようにする

ことです。
 筆者のPCのマシンスペックは以下の通りです。これに合わせた内容を書いていきます。(=NVIDIAの最近のGPUが入っていてOSがWindowsというのを前提とします)

OS : Windows10 Home 64bit
CPU: Intel Core i7-6700k
GPU: NVIDIA GeForce GTX 960

筆者のスペック(使用してきた言語)は以下の通り。(なお、筆者はもともと機械系です)

・C/C++
 PICとAVRを動かすのにちょろっと
・MATLAB, GNU Octave
 ここ4年ほど普段使いしている

このように、筆者はプログラミングについてずぶの素人なので、モッサリした怪しげなことを書くかもしれませんが、その際はご指導ご鞭撻のほどよろしくお願いします。。

(今回の以下の投稿内容は、Qiitaに来る方々を想定すると釈迦に説法ですが、何分、機械系のこれまでプログラミングに触れてこなかった人を想定していますので…さらに言うと、ぶっちゃけCUDAを使うにあたって必要そうなドキュメントは、NVIDIAのこのページに纏まってるようなので、正確で最新の情報が知りたければそちらに行けばよいかと。)

では、まずWindowsPCにCUDAを入れていきましょう(NVIDIAが解説する方法はこちら

導入の前に確認

 GPGPUで遊んでやろうと思ったら、まず「自分のPCがそもそもGPGPUに使えるGPUを積んでいるのか」が気になると思いますが、次の要領で調べられます。

◎デバイスマネージャーから確認する場合
1. デバイスマネージャーを開く(Windows10の場合、スタートメニュー右クリック→メニューから選択 or "M"をタイプ)
2. ディスプレイアダプターを選択すると、(GPUを積んでいる場合)機種名が表示される

◎”NVIDIA Control Panel” or “NVIDIA Display” から確認する場合
1. デスクトップで右クリック
2. ”NVIDIA Control Panel” か “NVIDIA Display”の選択肢が現れた場合、NVIDIAのGPUを積んでいる
3. 表示された選択肢をクリックすると、GPUの機種名が表示される

 GPUを積んであることが分かれば、とりあえずドライバーを更新しましょう。

  1. デバイスマネージャーを開き、「ディスプレイアダプター」を左クリック
  2. 「NVIDIA (機種名)」で右クリックしてプロパティを開く
  3. 「設定の変更」を選択して、管理者権限でプロパティを開きなおす。
  4. タブで「ドライバー」を選択して、「ドライバーの更新」を選択する。

あとは、Windowsがいい感じにしてくれます。また、ドライバーをNVIDIAのサイトから手動でダウンロードすることもできるようです。

 表示されたGPUの機種が、CUDAにより高速化されたアプリケーションが利用できる”Modern GPU”かどうかは、次のNVIDIAのサイト冒頭にリストがあるので、そこから確認してください。
 ただし、”Legacy GPU”とされているものもCUDAの対応機種リストに入っていたりします。
 どうも”Legacy GPU”に、最新版CUDAは対応していないけれども、古いバージョンのCUDAなら対応しているようです(参考サイト)。"CUDA Toolkit Archive"でググると、以前のバージョンのCUDA toolkitがダウンロードできるページへ行けます。

Visual Studio 2015の導入

 Visual Studioのダウンロードサイトはググってください。 ”Community 2015” を入れた前提で話を進めます。
アカウント登録等その辺諸々をやった後、Visual Studioを立ち上げられるようになったら、以下の手順でVisual C++(Visual Studioに含まれるC/C++用統合開発環境)を使えるようにしましょう。
 デフォルト設定でインストールした場合、Visual C++はインストールされていないため追加でインストールする必要があります。OSがWindowsの場合、CUDAはVisual C++と連携して動作するので、Visual C++を入れないと当然に動かないのです。以下のサイトが参考になりますが、まぁ適当にやっても入れられるでしょう。
(参考サイト16/12/23閲覧) http://ishidate.my.coocan.jp/vcpp15_1/vcpp15_1.htm

 Visual C++を入れられたら、とりあえず動作確認のためCでHello Worldを作りましょう。「ファイル」→「新規作成」→「新しいプロジェクト」→「Visual C++」→「Win32コンソールアプリケーション」を選択していき、適当に名前と場所を決めて、ソリューションのディレクトリを作成にチェックがついているのを確認し、「OK」
を押します。

C++.png

 すると、「Win32アプリケーションウィザード」なるものが出てきます。Hello Worldをやるだけですので、ここで「完了」を押してもいいですし、「次へ」を押して真面目に設定してもいいです。
(参考サイト 16/12/23閲覧) https://www.yc.tcu.ac.jp/~vis/vs/12a1_ide_usage/101_ide_usage.html

 さて、後はHello World!を表示すればいいだけですが、それが分からないという場合であれば、次のC言語学習ページが個人的にはおすすめです。そんなに苦しみませんので大丈夫だと思います。
「苦しんで覚えるC言語」 http://9cguide.appspot.com/ (16/12/23閲覧)

 プログラムが書けたら、メニュー(上側のタブ)の 「ビルド」→「ソリューションのビルド」でコンパイルします(Ctrl+Alt+Bがショートカットキーらしいです)。コンパイルが通ったら、メニューの「デバッグ」→「デバッグなしで開始」で実行します(Ctrl+F5でも可)。
(既定のショートカット一覧16/12/23閲覧) https://msdn.microsoft.com/ja-jp/library/da5kh0wa.aspx

CUDAの導入

 次に、CUDA toolkitをダウンロードします。”CUDA 8.0 download”でググれば、ダウンロードサイトがすぐに出てきます。そこから、自分の環境にあったものをダウンロードしてください。Installer Typeは「複数のシステムにインストールしたい場合で、インターネット接続が狭い帯域しか無い」ような状況を除いて”exe (network)”が良いようです。あとは、インストーラーを立ち上げれば、大体いい感じにしてくれるので、デフォルト設定でインストールすればよかったです(昔のバージョンに比べて、インストールが格段に楽になったようです)。

SelectTarg.png

 インストールを終えてVisual Studioを立ち上げ、「新しいプロジェクト」を選択すると、画面左側に「NVIDIA」と出ていて、開くと「CUDA8.0」とあり、これを選択すると、CUDAを用いたプロジェクトが作成できます。

CUDAneq.png

 新規プロジェクトを作成すると、すでにサンプルプログラムのようなものができています。これをそのままビルドして実行すると(上記の"Hello Worldと手順は同じ)、GPUを用いた演算を実演してくれます。” cudaSetDevice failed! Do you have a CUDA-capable GPU installed?” のメッセージが出てきた場合、試しにGPUのドライバーの更新のために再起動を要求されていないかを、デバイスマネージャーから確認してみてください。私の場合は、それが原因でした。

サンプルプログラムについて

 良いサンプルプログラムは無いかなぁ、ということで各種探してみました。

CUDA toolkitダウンロード時についてくるもの

 C:\ProgramData\NVIDIA Corporation\CUDA Samples に大量のサンプルが入っています。中には、VisualStudioのプロジェクトファイルと、ソースコード(.cu)、readme.txtが入っています。

 説明の文書は、CUDA programming guide(英語)を読むことを想定しているようなのですが、ちょっと微妙なところがあると思っています。例として、vectorAddをあげてみます。

 まず、readme.txtで「programming guide の Chapter 6 に書いてある内容と同じだよ~」と書いてあるのに、chapter 6は存在していなかったりして、「どうも相当に古いのではないか?」という疑問を持っています。
(なお、プログラムのコメントアウトには「"Chapter 2”で説明されている内容に対応しているよ」と書かれていて、それは合っています)
 最新版のprogramming guideはバージョンが8.0で、過去のprogramming guideと比較して大幅な改定がされているようです。なお、2007年に出たprogramming guide ver1.0 にはChapter 6が存在して、確かにその内容とサンプルプログラムは一致していました。
 それと、「初めからいきなり、programming guideとソースコードから理解しようとするよりも、もうちょい楽できないかしら?」という気がします。ある程度、理解できたところで戻ってくればよいのかなぁ?と。

CUDA BY EXAMPLE

 タイトルそのまんまで、サンプルプログラムを示しながらCUDAの解説をしている本です。2010年出版で若干古いのが若干気になりますが、なかなか楽しいです。とりあえず、これを読んでいきます。