さてさて前回の更新から1ヶ月近くたってしまったんですが、いろいろ忙しかったんす。申し訳。
引き続きOpenCL勉強しています。自分のためにも、ここに記録します。
OpenCLインストール方法ってか使うまで準備
実行環境
Intel Core i7 CPU 920 @2.67GHz 2.66GHz
GeForce 9800 GT
実装メモリ(RAM) 6.00GB
Windows 7 Professional 64bit
Microsoft Visual Studio 2010 Professional
OpenCLはMacは最初からサポートされているらしい
ぼくはWindowsなのでいろいろインストールしなければならないらしい
①OpenCL SDKを入れる(Windowsの場合)
http://software.intel.com/en-us/articles/vcsource-tools-opencl-sdk/ に行って右上の青いところからダウンロード(別に登録しなくてもいける)
そんでインストール
②NVIDIAのOpenCLドライバを入れる(NVIDIAの場合)
http://developer.nvidia.com/cuda-downloads に行って自分の環境にあったものをNVIDIAドライバ、CUDA Toolkit、GPU Computing SDKの順にダウンロードし、インストール
基本的にインストールは次へ連打でおk。でもGPU Computing SDKの保存場所は覚えておくように。のちのち使う。
③Visual Studioへの環境設定
ぼくは学校でもらえるMicrosoft Visual Studio 2010 Professionalを使ったが、無料で入手できるVisual C++ 2010 Expressでも出来るらしい
ここからが少しややこしいんだけど、、、
これはプロジェクトを作るたびに毎回設定しなければならない。まずVisual Studio起動して、「ファイル」→「新規作成」→「プロジェクト」で新しいプロジェクトを作る。このときにインストールされたテンプレートでVirtual C++の中でOpenCLではなく普通のWin32コンソールアプリケーションを選ぶ。名前は何でもいい。次へを押し、アプリケーションの設定で追加のオプションのカラのプロジェクトにチェック。完了。
次にソリューションエクスプローラのソースファイルのフォルダを右クリックし、「追加」→「新しい項目」を開く。そしてC++ファイルを追加する。
ここから具体的な設定に入る
1.次にソリューションエクスプローラにあるプロジェクト名を右クリックし「プロパティ」へ。
まずしなければならないのは、構成を「アクティブ(Debug)」から「すべての構成」
に変更する。そして「構成プロパティ」→「C/C++」→「全般」を開き、「追加のインクルードディレクトリ」に次のパスを登録する。
Intelの場合
"C:\Program Files (x86)\Intel\OpenCL SDK\2.0\include"
また、環境変数の相対パスを使ってもできる。その場合は、
$(INTELOCLSDKROOT)include
と指定。
NVIDIAの場合
"C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\OpenCL\common\inc"的なパスを指定。エクスプローラで確認してみると良い。
また、環境変数の相対パスを使ってもできる。その場合は、
$(CUDA_INC_PATH)
と指定。
IntelとNVIDIAの両方を設定したい場合は「;」で区切ってください。
2.プロパティを開いたそのまま、「構成プロパティ」→「リンカー」→「全般」を開き、「追加のライブラリディレクトリ」に次のパスを登録する。
Intelの場合
"C:\Program Files (x86)\Intel\OpenCL SDK\2.0\lib\x86"
環境変数の相対パスだと
$(INTELOCLSDKROOT)lib\x86
NVIDIAの場合
"C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\OpenCL\common\lib\Win32"
環境変数の相対パスだと
$(CUDA_INC_PATH)lib\Win32
ここでは32bit版か64bit版かでパスが変わってきます。エクスプローラで確認してみると良い。
3.プロパティを開いたそのまま、「構成プロパティ」→「リンカー」→「入力」を開き、「追加の依存ファイル」に次のライブラリ名を登録する。
IntelもNVIDIAも共通で
「OpenCL.lib」
大文字小文字を間違えないように。また、すでにライブラリが登録されている場合は、「;」をつけてから書き加える。
以上でOpenCLの設定は終わりです。
基本的にコンパイルはVSで行うことになると思うが、コマンドプロンプトでやる場合には
g++ main.cpp -lOpenCLl
でコンパイルすることができる。
まぁ簡単な話、卒論っすよ。
OpenCLとはなにか?
●CPU, GPU, DSP等が混在するプラットホームで並列処理プログラムを書くためのフレームワーク
●ヘテロジニアス(異種混交)な並列計算機環境に適した並列プログラミングのためのフレームワーク
高クロック化からマルチコア化という背景があって提唱されはじめた。
まぁ簡単に言うと、OpenCLを利用する事により、様々な計算資源に共通のインターフェースでアクセス・制御が可能となる。
もっとわかりやすく言うと、CPUとかGPUっていうコンピュータの頭脳があるんだけど、その頭脳によっても得手不得手があるから、計算が得意なGPUには計算だけさせて、タスク処理(?)が得意なCPUにはタスク処理だけさせようって話。GPU使わなくてもCPUだけの並列化もできるんだけど。
これはGPGPUのCUDAに非常に近い考え方なんだけど、それをNVIDIA以外のやつにも対応させようって話。
主にこれが概要。
メリット
エンドユーザー側
●単純にパソコンが高速になる
●演算デバイスの違いを気にすることなく利用できる
●プロセッサーを自由に選択できる
エンジニア側
●言語がCをベースにしており習得が容易な点(ソフトウェア)
●ソフトウェアレイヤーにおける互換性を意識せずにすむ(ハードウェア)
こんな感じ。意外とメリットが高速化以外に見つからない。
論文の内容についてはまだ模索中。
OpenCLとはなにか?
●CPU, GPU, DSP等が混在するプラットホームで並列処理プログラムを書くためのフレームワーク
●ヘテロジニアス(異種混交)な並列計算機環境に適した並列プログラミングのためのフレームワーク
高クロック化からマルチコア化という背景があって提唱されはじめた。
まぁ簡単に言うと、OpenCLを利用する事により、様々な計算資源に共通のインターフェースでアクセス・制御が可能となる。
もっとわかりやすく言うと、CPUとかGPUっていうコンピュータの頭脳があるんだけど、その頭脳によっても得手不得手があるから、計算が得意なGPUには計算だけさせて、タスク処理(?)が得意なCPUにはタスク処理だけさせようって話。GPU使わなくてもCPUだけの並列化もできるんだけど。
これはGPGPUのCUDAに非常に近い考え方なんだけど、それをNVIDIA以外のやつにも対応させようって話。
主にこれが概要。
メリット
エンドユーザー側
●単純にパソコンが高速になる
●演算デバイスの違いを気にすることなく利用できる
●プロセッサーを自由に選択できる
エンジニア側
●言語がCをベースにしており習得が容易な点(ソフトウェア)
●ソフトウェアレイヤーにおける互換性を意識せずにすむ(ハードウェア)
こんな感じ。意外とメリットが高速化以外に見つからない。
論文の内容についてはまだ模索中。
悩んで悩んで苦しんで、それでも悩み続けたやつが、やっぱり最後には幸せになってほしいじゃんか。てかそんな世界であってほしいじゃんか。だからこそ、悩むなら本気で悩め。それが一生懸命生きるってことだろ。