自炊のフィルター処理を GIMP でバッチ化できたが、複数の CPU がある場合、有効活用できていない。そんなのい・や・だ!
というわけで、バッチのマルチスレッド化に着手してみた。
基本コンセプトは、バッチ処理をキュー化し、キューを処理するバッチを並列で起動する。
バッチは、すべて windows 標準機能だけで動作するようになっている。
Java とか使えば、もっとシンプルになるのだが、バッチでやることに意味があるのだよ。フッフッフ・・・
2012年2月26日日曜日
2010年4月25日日曜日
拡張現実の旅-NyARToolkit C# 編 1泊目
本家の ARToolKit のビルドには、あっさり敗北して思い知った。もはやC言語には戻れない体になってしまっていることを・・・
出来ないものは、しょうがないよねっ!
気を取り直して、よく考えてみた。
「別に全部C言語じゃなくてもよくね?」
というわけで、メイン部分は C# ですることにした。
調べてみると、ARToolKit には、NyARToolkit という C# での実装版が存在し、OpenCL には、OpenCL .NET という C# ラッパーがあるようだ。
NyARToolkit は、オリジナルを参考に実装しなおしているらしい。ソースコードレベルでは、移植ではなく別物と考えたほうがよさそうだ。API レベルでは、互換があるとのこと。
動作環境は以下とする。Windows Vista Business 64bit SP2
AMD Phenom II X4 955 3.20GHz
ATI HD4890 メモリ 1G
以下のものは導入済みとして作業を進める。
Microsoft DirectX SDK (February 2010)
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
Visual C# 2008
ATI Stream SDK 2.01 Vista, Win7 64bit
では、以下の必要なものをダウンロードしてくる。
FrontPage - NyARToolkit から NyARToolkitCS-2.5.1.zip
SourceForge.net: OpenCL .Net から OpenCLNet 0.4.zip
最初は、OpenCL .NET からいってみる。
OpenCLNet 0.4.zip ファイルを適当な場所に解凍する。
上記解凍場所の source\OpenCLNet.sln を Visual C# で開く
なんだか、「プロジェクトの場所は信頼されていません」とか言われる。
なんだろう?
とりあえず、全て「OK」ボタンを押しておく。
2010/04/26 追記 : [プロジェクトの場所は信頼されていません] ダイアログ ボックス ページの下の方にあるコミュニティ コンテンツを見て対処法は分かったが、上の方の説明は意味不明。専門用語を専門用語で説明すんなっ!
何も考えず、ソリューションのリビルドをしてみる。
成功。
ImageCrossFade プロジェクトをスタートアッププロジェクトに設定して、実行してみる。
動いているようだ。
次に、NyARToolkit をコンパイルしてみる。
Visual C# で ”forFW2.0\NyARToolkitCS.sln”を開く。
またもや、「プロジェクトの場所は信頼されていません」とか言われる。
なんだろう?
やっぱり、全て「OK」ボタンを 押しておく。
Web カメラを接続してから、”CaptureTest”プロジェクトをスタートアッププロジェクトに設定して、実行してみる。
ウィンドウが開き、Web カメラの映像が表示される。タスクマネージャからプロセスを確認すると、64bit モード(プロセス名の末尾に”*32”が付いていない)で動作していることを確認できた。
なんだか、あっけないくらいにうまくいった。やっぱりソースは生もの。時間が経つと腐敗していく。
はじめから NyARToolkit にしておけばよかった。
では、今回はここまで。
出来ないものは、しょうがないよねっ!
気を取り直して、よく考えてみた。
「別に全部C言語じゃなくてもよくね?」
というわけで、メイン部分は C# ですることにした。
調べてみると、ARToolKit には、NyARToolkit という C# での実装版が存在し、OpenCL には、OpenCL .NET という C# ラッパーがあるようだ。
NyARToolkit は、オリジナルを参考に実装しなおしているらしい。ソースコードレベルでは、移植ではなく別物と考えたほうがよさそうだ。API レベルでは、互換があるとのこと。
動作環境は以下とする。Windows Vista Business 64bit SP2
AMD Phenom II X4 955 3.20GHz
ATI HD4890 メモリ 1G
以下のものは導入済みとして作業を進める。
Microsoft DirectX SDK (February 2010)
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
Visual C# 2008
ATI Stream SDK 2.01 Vista, Win7 64bit
では、以下の必要なものをダウンロードしてくる。
FrontPage - NyARToolkit から NyARToolkitCS-2.5.1.zip
SourceForge.net: OpenCL .Net から OpenCLNet 0.4.zip
最初は、OpenCL .NET からいってみる。
OpenCLNet 0.4.zip ファイルを適当な場所に解凍する。
上記解凍場所の source\OpenCLNet.sln を Visual C# で開く
なんだか、「プロジェクトの場所は信頼されていません」とか言われる。
なんだろう?
とりあえず、全て「OK」ボタンを押しておく。
2010/04/26 追記 : [プロジェクトの場所は信頼されていません] ダイアログ ボックス ページの下の方にあるコミュニティ コンテンツを見て対処法は分かったが、上の方の説明は意味不明。専門用語を専門用語で説明すんなっ!
何も考えず、ソリューションのリビルドをしてみる。
成功。
ImageCrossFade プロジェクトをスタートアッププロジェクトに設定して、実行してみる。
動いているようだ。
次に、NyARToolkit をコンパイルしてみる。
Visual C# で ”forFW2.0\NyARToolkitCS.sln”を開く。
またもや、「プロジェクトの場所は信頼されていません」とか言われる。
なんだろう?
やっぱり、全て「OK」ボタンを 押しておく。
Web カメラを接続してから、”CaptureTest”プロジェクトをスタートアッププロジェクトに設定して、実行してみる。
ウィンドウが開き、Web カメラの映像が表示される。タスクマネージャからプロセスを確認すると、64bit モード(プロセス名の末尾に”*32”が付いていない)で動作していることを確認できた。
なんだか、あっけないくらいにうまくいった。やっぱりソースは生もの。時間が経つと腐敗していく。
はじめから NyARToolkit にしておけばよかった。
では、今回はここまで。
ラベル:
NyARToolkit,
OpenCL,
拡張現実,
並列プログラミング
2010年4月5日月曜日
OpenCLマスターへの道 - ATI Stream SDK 編 第六話
今回は、サンプルソースを 64bit 版のWin32 コンソールアプリケーションとしてビルドしてみる。
参考にしたドキュメントは、”ATI Stream SDK OpenCL™ Programming Guide (v1.0) [PDF 900 KB]”
このファイルには、以下の手順で たどりつける。
「スタート」メニューから「すべてのプログラム」-「ATI Stream SDK v2」-「ATI Stream SDK Documentation」を選択すると、ブラウザで、「ATI Stream SDK v2.01 Documentation」のページが開く。開いたページのリスト中に上記ファイルがある。
Visual C++ 2008 Express Edition を起動する。
「ファイル」メニューから「新規作成」-「プロジェクト」を選択。
「プロジェクトの種類」から「Win32」を選択する。
「テンプレート」から「Win32 コンソール アプリケーション」を選択する。
「プロジェクト名」に”HelloCL”と入力し、「OK」ボタンを押す。
次に”HelloCL.cpp”ファイルを編集していく。
楽をするために、ATI Stream SDK のサンプルファイルの中身をコピーする作戦でいくことにする。
コピー元は、サンプルをインストールしたディレクトリ以 下”samples\opencl\cpp_cl\app\HelloCL\”の”HelloCL.cpp”と”HelloCL_Kernels.cl” とする。
”HelloCL_Kernels.cl” はそのまま、”HelloCL”プロジェクトのディレクトリにコピーして、既存の項目として「ソースファイル」に追加。
サ ンプルの”HelloCL.cpp”ファイルからインクルード行とmain関数の中身をコピーする。
main 関数の定義部分は、書き換えないことにする。
// HelloCLWin32.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <sdkutil/sdkfile.hpp>
#include <sdkutil/sdkcommon.hpp>
#define __NO_STD_VECTOR
#define __NO_STD_STRING
#include <cl cl.hpp>
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
cl_int err;
// Platform info
cl::vector<cl::platform> platforms;
std::cout<<"HelloCL!\nGetting Platform Information\n";
err = cl::Platform::get(&platforms);
if(err != CL_SUCCESS)
{
<中 略>
err = queue.finish();
if (err != CL_SUCCESS) {
std::cerr << "Event::wait() failed (" << err << ")\n";
}
delete pProgram;
std::cout<<"Done\nPassed!\n";
return SDK_SUCCESS;
}
上記ソース中で”SDKUtil”を利用している ので、ドキュメントの手順をみると、インクルードファイルとライブラリ指定を追加するだけで大丈夫となっているが、”SDKUtil.lib”なんてどこ にもない。 しかたがないので、ドキュメントの手順は実行しない。
実行しない手順の代わりに、”SDKUtil”をサンプルからプロジェクトごと、新規作成し た”HelloCL”ソリューションの下にコピー。
既存のプロジェクトとして追加。
このままだと、とんでもね~ところにビル ド済みファイルを吐き出すので、以下のように設定を変更。
”SDKUtil”プロジェクトのプロパティを開く。
「構成プロパティ」-「全般」を選 択。
「出力ディレクトリ」とし て”$(SolutionDir)$(PlatformName)\$(ConfigurationName)”を設定。
「中間ディレクト リ」として”$(PlatformName)\$(ConfigurationName)”を設定。
プロジェクトの依存関係を以下のように設定。
ソリューションのプロパティを開く。
「共 通プロパティ」-「プロジェクト依存関係」を選択。
「プロジェクト」には”HelloCL”を選択。
「依存先」 で”SDKUtil”をチェックして、「OK」ボタンを押す。
次に、OpenCL 本体のヘッダやライブラリに関する追加設定を、ドキュメントの手順で設定する。
”HelloCL”プロジェクトのプロパティを開く。
「構成プロパティ」-「C/C++」 -「全般」を選択。
「追加のインクルード ディレクトリ」に”"$(ATISTREAMSDKSAMPLESROOT)\include";"$(ATISTREAMSDKROOT)\include"” を設定。
「構成プロパティ」-「C/C++」-「プリプロセッサ」を選択。
「プリプロセッサの定 義」に”ATI_OS_WIN”を追加。
「構成プロパティ」-「リンカ」-「全般」を選択。
「追加のライブラリ ディレクトリ」に”$(ATISTREAMSDKROOT)/lib/x86”を追加。
「構成プロパティ」-「リンカ」-「入力」を選択。
「追加の依存ファイル」 に”OpenCL.lib”を追加。
「OK」ボタンを押す。
では、32bit版をビルドしてみる。「ビルド」メニューから「ソリューションのビルド」を選択。
error C2065: 'cl_int' : 定義されていない識別子です。
error C2146: 構文エラー : ';' が、識別子 'err' の前に必要です。
error C2065: 'err' : 定義されていない識別子です。
error C2653: 'cl' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'vector' : 定義されていない識別子です。
error C2653: 'cl' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'Platform' : 定義されていない識別子です。
error C2065: 'platforms' : 定義されていない識別子です。
error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'cout' : 定義されていない識別子です。
error C2065: 'err' : 定義されていない識別子です。
<中略>
error C2065: 'cerr' : 定義されていない識別子です。
error C2065: 'err' : 定義されていない識別子です。
error C2065: 'SDK_FAILURE' : 定義されていない識別子です。
error C2065: 'devices' : 定義されていない識別子です。
error C2228: '.size' の左側はクラス、構造体、共用体でなければなりません
型は ''unknown-type'' です。
error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'cerr' : 定義されていない識別子です。
error C2065: 'SDK_FAILURE' : 定義されていない識別子です。
error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'cout' : 定義されていない識別子です。
fatal error C1003: プログラム内のエラーが 100 個を超えました。コンパイルは中断されます。
ビルドログは "file://e:\work\program\VisualStudio2008\CPProjects\HelloCL\HelloCL\Debug\BuildLog.htm" に保存されました。
HelloCL - エラー 102、警告 8
========== ビルド: 1 正常終了、1 失敗、0 更新不要、0 スキップ ==========
大量にエラーになった。何かが間違っているようだ。
どうやら、#include "stdafx.h" の記述位置が悪いらしい、最初に持ってきてみる。 (そもそもプリコンパイルヘッダについて無知なのでトンチンカンなことをやっているかもしれない)
再びビルド。今度は先ほどとは違うエラーでいっぱいだ・・・
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: unsigned int __thiscall std::basic_string>char,struct std::char_traits>char<,class std::allocator>char< <::size(void)const " (?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ) は既に sdkutil.lib(SDKFile.obj) で定義されています。
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: __thiscall std::basic_string>char,struct std::char_traits>char<,class std::allocator>char< <::basic_string>char,struct std::char_traits>char<,class std::allocator>char< <(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) は既に sdkutil.lib(SDKFile.obj) で定義されています。
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: void __thiscall std::basic_ios>char,struct std::char_traits>char< <::setstate(int,bool)" (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) は既に sdkutil.lib(SDKFile.obj) で定義されています。
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: static bool __cdecl std::char_traits>char<::eq_int_type(int const &,int const &)" (?eq_int_type@?$char_traits@D@std@@SA_NABH0@Z) は既に sdkutil.lib(SDKFile.obj) で定義されています。
とか
libcpmtd.lib(ios.obj) : error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" (?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
libcpmtd.lib(ios.obj) : error LNK2005: "public: static void __cdecl std::ios_base::_Addstd(class std::ios_base *)" (?_Addstd@ios_base@std@@SAXPAV12@@Z) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
libcpmtd.lib(locale0.obj) : error LNK2005: "void __cdecl _AtModuleExit(void (__cdecl*)(void))" (?_AtModuleExit@@YAXP6AXXZ@Z) は既に msvcprtd.lib(locale0_implib.obj) で定義されています。
libcpmtd.lib(locale0.obj) : error LNK2005: __Fac_tidy は既に msvcprtd.lib(locale0_implib.obj) で定義されています。
とか
libcpmtd.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QAE@H@Z) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
libcpmtd.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
LIBCMTD.lib(setlocal.obj) : error LNK2005: __configthreadlocale は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMTD.lib(tidtable.obj) : error LNK2005: __encode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMTD.lib(tidtable.obj) : error LNK2005: __decode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
とか
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
LINK : warning LNK4098: defaultlib 'LIBCMTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
LIBCMTD.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。
HelloCL - エラー 51、警告 2
========== すべてリビルド: 1 正常終了、1 失敗、0 スキップ ==========
まだ設定が足りないらしい、色々調べると以下の手順が足りてないようだ。
この手順は、ドキュメントには書いていない、でもサンプルプロジェクトでは、設定されている。
”HelloCL”プ ロジェクトのプロパティを開く。
「構成のプロパティ」-「C/C++」-「コード生成」を選択。
「ラ ンタイム ライブラリ」を”マルチスレッド デバッグ DLL (/MDd)” から ”マルチスレッド デバッグ (/MTd)”に変更して、「OK」ボタンを押す。(ここらへんについても無知なのでよくわからない)
再びビルドする。
今度はうまくいった。
では、実行してみる。
「デバッグ」メニューから「デバッグなしで開始」を選択
HelloCL!
Getting Platform Information
Platform::get() failed (-1001)
続行するには何かキーを押してください . . .
ありゃ?なんでじゃ?
サンプルプログラムを動かしても、同様の状態・・・なんかオレに恨みでもあんのか?
64bit 対応化騒動で、何か大切なものを無くしてしまったのか?
ATI Stream SDK をインストーラでリペアしてもだめだった。
しかたがないので、ATI Stream SDK をアンインストール後、再びインストールした。サンプルをコンパイルして動作確認。うまくいった。
ようやく、”HelloCL”に戻ってきた。
こっちもビルドして実行。成功!
では、本題の 64bit 版をビルドする。
その前に、”HelloCL”プロジェクトのプロパティを開く。
「構成プロパティ」-「リンカ」-「全般」を選択する。
「追加のライブラリ ディレクトリを”$(ATISTREAMSDKROOT)/lib/x86_64”に変更する。
「OK」ボタンを押す。
「ビルド」メニューの「構成マネージャ」を選択。
”HelloCL”プロジェクトの「プラットフォーム」から”<新規作成>”を選択する。
「新しいプラットフォーム」で”x64”を選択し、「OK」ボタンを押す。
もし”同じ名前のソリューション プラットフォームが既に存在するため、このプラットフォームを作成できませんでした。”と表示される場合は、「キャンセル」ボタンを押して、「構成マネージャ」の「アクティブ ソリューション プラットフォーム」で”<編集>”を選択し、”x64”を削除してから、再びこの手順を行う。
こんな画面になる。
「閉じる」ボタンを押す。
「ビルド」メニューから「ソリューションのビルド」を選択する。
ビルドが成功したら。
「デバッグ」メニューから「デバッグなしで開始」を選択。
HelloCL!
Getting Platform Information
Creating a context AMD platform
Getting device info
Loading and compiling CL source
Running CL program
Done
Passed!
続行するには何かキーを押してください . . .
よし!成功!
長かった・・・丸二日もかかってしまった。
能力不足を再認識・・・欝だ・・・もう寝よう。
というわけで、今回はここまで。
参考にしたドキュメントは、”ATI Stream SDK OpenCL™ Programming Guide (v1.0) [PDF 900 KB]”
このファイルには、以下の手順で たどりつける。
「スタート」メニューから「すべてのプログラム」-「ATI Stream SDK v2」-「ATI Stream SDK Documentation」を選択すると、ブラウザで、「ATI Stream SDK v2.01 Documentation」のページが開く。開いたページのリスト中に上記ファイルがある。
Visual C++ 2008 Express Edition を起動する。
「ファイル」メニューから「新規作成」-「プロジェクト」を選択。
「プロジェクトの種類」から「Win32」を選択する。
「テンプレート」から「Win32 コンソール アプリケーション」を選択する。
「プロジェクト名」に”HelloCL”と入力し、「OK」ボタンを押す。
次に”HelloCL.cpp”ファイルを編集していく。
楽をするために、ATI Stream SDK のサンプルファイルの中身をコピーする作戦でいくことにする。
コピー元は、サンプルをインストールしたディレクトリ以 下”samples\opencl\cpp_cl\app\HelloCL\”の”HelloCL.cpp”と”HelloCL_Kernels.cl” とする。
”HelloCL_Kernels.cl” はそのまま、”HelloCL”プロジェクトのディレクトリにコピーして、既存の項目として「ソースファイル」に追加。
サ ンプルの”HelloCL.cpp”ファイルからインクルード行とmain関数の中身をコピーする。
main 関数の定義部分は、書き換えないことにする。
// HelloCLWin32.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <sdkutil/sdkfile.hpp>
#include <sdkutil/sdkcommon.hpp>
#define __NO_STD_VECTOR
#define __NO_STD_STRING
#include <cl cl.hpp>
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
cl_int err;
// Platform info
cl::vector<cl::platform> platforms;
std::cout<<"HelloCL!\nGetting Platform Information\n";
err = cl::Platform::get(&platforms);
if(err != CL_SUCCESS)
{
<中 略>
err = queue.finish();
if (err != CL_SUCCESS) {
std::cerr << "Event::wait() failed (" << err << ")\n";
}
delete pProgram;
std::cout<<"Done\nPassed!\n";
return SDK_SUCCESS;
}
上記ソース中で”SDKUtil”を利用している ので、ドキュメントの手順をみると、インクルードファイルとライブラリ指定を追加するだけで大丈夫となっているが、”SDKUtil.lib”なんてどこ にもない。 しかたがないので、ドキュメントの手順は実行しない。
実行しない手順の代わりに、”SDKUtil”をサンプルからプロジェクトごと、新規作成し た”HelloCL”ソリューションの下にコピー。
既存のプロジェクトとして追加。
このままだと、とんでもね~ところにビル ド済みファイルを吐き出すので、以下のように設定を変更。
”SDKUtil”プロジェクトのプロパティを開く。
「構成プロパティ」-「全般」を選 択。
「出力ディレクトリ」とし て”$(SolutionDir)$(PlatformName)\$(ConfigurationName)”を設定。
「中間ディレクト リ」として”$(PlatformName)\$(ConfigurationName)”を設定。
プロジェクトの依存関係を以下のように設定。
ソリューションのプロパティを開く。
「共 通プロパティ」-「プロジェクト依存関係」を選択。
「プロジェクト」には”HelloCL”を選択。
「依存先」 で”SDKUtil”をチェックして、「OK」ボタンを押す。
次に、OpenCL 本体のヘッダやライブラリに関する追加設定を、ドキュメントの手順で設定する。
”HelloCL”プロジェクトのプロパティを開く。
「構成プロパティ」-「C/C++」 -「全般」を選択。
「追加のインクルード ディレクトリ」に”"$(ATISTREAMSDKSAMPLESROOT)\include";"$(ATISTREAMSDKROOT)\include"” を設定。
「構成プロパティ」-「C/C++」-「プリプロセッサ」を選択。
「プリプロセッサの定 義」に”ATI_OS_WIN”を追加。
「構成プロパティ」-「リンカ」-「全般」を選択。
「追加のライブラリ ディレクトリ」に”$(ATISTREAMSDKROOT)/lib/x86”を追加。
「構成プロパティ」-「リンカ」-「入力」を選択。
「追加の依存ファイル」 に”OpenCL.lib”を追加。
「OK」ボタンを押す。
では、32bit版をビルドしてみる。「ビルド」メニューから「ソリューションのビルド」を選択。
error C2065: 'cl_int' : 定義されていない識別子です。
error C2146: 構文エラー : ';' が、識別子 'err' の前に必要です。
error C2065: 'err' : 定義されていない識別子です。
error C2653: 'cl' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'vector' : 定義されていない識別子です。
error C2653: 'cl' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'Platform' : 定義されていない識別子です。
error C2065: 'platforms' : 定義されていない識別子です。
error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'cout' : 定義されていない識別子です。
error C2065: 'err' : 定義されていない識別子です。
<中略>
error C2065: 'cerr' : 定義されていない識別子です。
error C2065: 'err' : 定義されていない識別子です。
error C2065: 'SDK_FAILURE' : 定義されていない識別子です。
error C2065: 'devices' : 定義されていない識別子です。
error C2228: '.size' の左側はクラス、構造体、共用体でなければなりません
型は ''unknown-type'' です。
error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'cerr' : 定義されていない識別子です。
error C2065: 'SDK_FAILURE' : 定義されていない識別子です。
error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。
error C2065: 'cout' : 定義されていない識別子です。
fatal error C1003: プログラム内のエラーが 100 個を超えました。コンパイルは中断されます。
ビルドログは "file://e:\work\program\VisualStudio2008\CPProjects\HelloCL\HelloCL\Debug\BuildLog.htm" に保存されました。
HelloCL - エラー 102、警告 8
========== ビルド: 1 正常終了、1 失敗、0 更新不要、0 スキップ ==========
大量にエラーになった。何かが間違っているようだ。
どうやら、#include "stdafx.h" の記述位置が悪いらしい、最初に持ってきてみる。 (そもそもプリコンパイルヘッダについて無知なのでトンチンカンなことをやっているかもしれない)
再びビルド。今度は先ほどとは違うエラーでいっぱいだ・・・
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: unsigned int __thiscall std::basic_string>char,struct std::char_traits>char<,class std::allocator>char< <::size(void)const " (?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ) は既に sdkutil.lib(SDKFile.obj) で定義されています。
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: __thiscall std::basic_string>char,struct std::char_traits>char<,class std::allocator>char< <::basic_string>char,struct std::char_traits>char<,class std::allocator>char< <(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) は既に sdkutil.lib(SDKFile.obj) で定義されています。
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: void __thiscall std::basic_ios>char,struct std::char_traits>char< <::setstate(int,bool)" (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) は既に sdkutil.lib(SDKFile.obj) で定義されています。
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: static bool __cdecl std::char_traits>char<::eq_int_type(int const &,int const &)" (?eq_int_type@?$char_traits@D@std@@SA_NABH0@Z) は既に sdkutil.lib(SDKFile.obj) で定義されています。
とか
libcpmtd.lib(ios.obj) : error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" (?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
libcpmtd.lib(ios.obj) : error LNK2005: "public: static void __cdecl std::ios_base::_Addstd(class std::ios_base *)" (?_Addstd@ios_base@std@@SAXPAV12@@Z) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
libcpmtd.lib(locale0.obj) : error LNK2005: "void __cdecl _AtModuleExit(void (__cdecl*)(void))" (?_AtModuleExit@@YAXP6AXXZ@Z) は既に msvcprtd.lib(locale0_implib.obj) で定義されています。
libcpmtd.lib(locale0.obj) : error LNK2005: __Fac_tidy は既に msvcprtd.lib(locale0_implib.obj) で定義されています。
とか
libcpmtd.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QAE@H@Z) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
libcpmtd.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
LIBCMTD.lib(setlocal.obj) : error LNK2005: __configthreadlocale は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMTD.lib(tidtable.obj) : error LNK2005: __encode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMTD.lib(tidtable.obj) : error LNK2005: __decode_pointer は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
とか
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
LINK : warning LNK4098: defaultlib 'LIBCMTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
LIBCMTD.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。
HelloCL - エラー 51、警告 2
========== すべてリビルド: 1 正常終了、1 失敗、0 スキップ ==========
まだ設定が足りないらしい、色々調べると以下の手順が足りてないようだ。
この手順は、ドキュメントには書いていない、でもサンプルプロジェクトでは、設定されている。
”HelloCL”プ ロジェクトのプロパティを開く。
「構成のプロパティ」-「C/C++」-「コード生成」を選択。
「ラ ンタイム ライブラリ」を”マルチスレッド デバッグ DLL (/MDd)” から ”マルチスレッド デバッグ (/MTd)”に変更して、「OK」ボタンを押す。(ここらへんについても無知なのでよくわからない)
再びビルドする。
今度はうまくいった。
では、実行してみる。
「デバッグ」メニューから「デバッグなしで開始」を選択
HelloCL!
Getting Platform Information
Platform::get() failed (-1001)
続行するには何かキーを押してください . . .
ありゃ?なんでじゃ?
サンプルプログラムを動かしても、同様の状態・・・なんかオレに恨みでもあんのか?
64bit 対応化騒動で、何か大切なものを無くしてしまったのか?
ATI Stream SDK をインストーラでリペアしてもだめだった。
しかたがないので、ATI Stream SDK をアンインストール後、再びインストールした。サンプルをコンパイルして動作確認。うまくいった。
ようやく、”HelloCL”に戻ってきた。
こっちもビルドして実行。成功!
では、本題の 64bit 版をビルドする。
その前に、”HelloCL”プロジェクトのプロパティを開く。
「構成プロパティ」-「リンカ」-「全般」を選択する。
「追加のライブラリ ディレクトリを”$(ATISTREAMSDKROOT)/lib/x86_64”に変更する。
「OK」ボタンを押す。
「ビルド」メニューの「構成マネージャ」を選択。
”HelloCL”プロジェクトの「プラットフォーム」から”<新規作成>”を選択する。
「新しいプラットフォーム」で”x64”を選択し、「OK」ボタンを押す。
もし”同じ名前のソリューション プラットフォームが既に存在するため、このプラットフォームを作成できませんでした。”と表示される場合は、「キャンセル」ボタンを押して、「構成マネージャ」の「アクティブ ソリューション プラットフォーム」で”<編集>”を選択し、”x64”を削除してから、再びこの手順を行う。
こんな画面になる。
「閉じる」ボタンを押す。
「ビルド」メニューから「ソリューションのビルド」を選択する。
ビルドが成功したら。
「デバッグ」メニューから「デバッグなしで開始」を選択。
HelloCL!
Getting Platform Information
Creating a context AMD platform
Getting device info
Loading and compiling CL source
Running CL program
Done
Passed!
続行するには何かキーを押してください . . .
よし!成功!
長かった・・・丸二日もかかってしまった。
能力不足を再認識・・・欝だ・・・もう寝よう。
というわけで、今回はここまで。
2010年4月4日日曜日
OpenCLマスターへの道 - ATI Stream SDK 編 第五話
前回、サンプルプログラムが動いたので、今回は、プロジェクトを始めから作成してみる。
ただし、普通にやってもつまらないので、64bit CLR コンソールアプリケーションを作成してみる。
とその前に、Express Edition は、64bit 版のビルドはサポート外なので、Microsoft Visual C++ 2008 Express Edition で64ビット版のプログラムを作る方法を参考に(ありがたやありがたや~)以下のものを導入して、64bit 版をビルドできるようにした。
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
Visual C++ 2008 Express Edition And 64-Bit Targets本文中の”Updated patch for Win7 SDK:”の下の”VCE64BIT_WIN7SDK.zip”
最初、私の環境では、以下の手順を実施してもうまくいかなかった。
おそらく、Visual C++ をデフォルトのディレクトリにインストールしていなかったのが原因と思われる。
しかたがないので、Visual シリーズ(C#など)、および、Windows SDK など関係するものを全てアンインストールして、Visual Studio に関連する設定ファイルをすべて削除し、アンインストールしたものをインストールし直す、その際にインストール先をデフォルト値のままとし、再び以下の手順を繰り返したらうまくいった。
64bit 版ビルド対応化の手順は以下のようにする。
Visual C++ 2008 Express Edition with SP1 をインストール。
インストール後、Windows Update を実行し、Visual C++ を最新の状態にしておくこと。
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1のページから”winsdk_web.exe”をダウンロードして実行する。画面の指示通りにインストールする。
”VCE64BIT_WIN7SDK.zip”を解凍する。
解凍したファイルの”readme.txt”を開いて読む。
”readme.txt”の手順3は、リンク先の情報をよく読むこと、OSが32bitか64bitかで手順が変わるようだ。私のマシンはVista 64bitなので手順1は行わなかった(確証なし)
手順2として、「スタート」メニューから「すべてのプログラム」-「Microsoft Windows SDK v7.0」-「Visual Studio Registration」-「Windows SDK Configuration Tool」を実行
「Installed Windows SDK Versions:」で”v7.0”を選択。
「Make Current」ボタンを押す。
成功。「OK」ボタンを押す。
次に、コマンドプロンプトを管理者権限で開く。手順は次のようにする。
「スタート」メニューから「すべてのプログラム」-「アクセサリ」-「コマンドプロンプト」を右クリックして、コンテキストメニューから「管理者として実行」を選択。
開いたコマンドプロンプトで”VCE64BIT_WIN7SDK.zip”を解凍したディレクトリに移動する。
”setup_x64.bat”を実行する。(32bit OSの場合は”setup_x86.bat”)
> setup_x64.bat
> regedit /s x64\VC_OBJECTS_PLATFORM_INFO.reg
> regedit /s x64\600dd186-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\600dd187-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\600dd188-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\600dd189-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\656d875f-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\656d8760-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\656d8763-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\656d8766-2429-11d7-8bf6-00b0d03daa06.reg
> copy "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\AMD64.VCPlatform.config" "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\AMD64.VCPlatform.Express.config"
1 個のファイルをコピーしました。
> copy "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\Itanium.VCPlatform.config" "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\Itanium.VCPlatform.Express.config"
1 個のファイルをコピーしました。
Visual C++ 2008 Express Edition を起動。
「ファイル」メニューから「新規作成」-「プロジェクト」を選択。
「プロジェクトの種類」から”CLR”を選択。
「テンプレート」から”CLR コンソール アプリケーション”を選択。
「プロジェクト名」に”HelloCL”と入力し、「OK」ボタンを押す。
「ビルド」メニューの「構成マネージャ」を選択。
「プラットフォーム」で「<新規作成...>」を選択
「新しいプラットフォーム」で”Itanium”と”x64”がリストアップされていれば 64 bit ビルド対応パッチが成功している。”x64”を選択して、「OK」ボタンを押す。
変更後の画面。「閉じる」ボタンを押す。
「ビルド」メニューから「ソリューションのビルド」を選択。
こんな感じのディレクトリ構成になっていれば成功。環境によっては、多少異なるかもしれない。
というわけで、今回はここまで。
ただし、普通にやってもつまらないので、64bit CLR コンソールアプリケーションを作成してみる。
とその前に、Express Edition は、64bit 版のビルドはサポート外なので、Microsoft Visual C++ 2008 Express Edition で64ビット版のプログラムを作る方法を参考に(ありがたやありがたや~)以下のものを導入して、64bit 版をビルドできるようにした。
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
Visual C++ 2008 Express Edition And 64-Bit Targets本文中の”Updated patch for Win7 SDK:”の下の”VCE64BIT_WIN7SDK.zip”
最初、私の環境では、以下の手順を実施してもうまくいかなかった。
おそらく、Visual C++ をデフォルトのディレクトリにインストールしていなかったのが原因と思われる。
しかたがないので、Visual シリーズ(C#など)、および、Windows SDK など関係するものを全てアンインストールして、Visual Studio に関連する設定ファイルをすべて削除し、アンインストールしたものをインストールし直す、その際にインストール先をデフォルト値のままとし、再び以下の手順を繰り返したらうまくいった。
64bit 版ビルド対応化の手順は以下のようにする。
Visual C++ 2008 Express Edition with SP1 をインストール。
インストール後、Windows Update を実行し、Visual C++ を最新の状態にしておくこと。
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1のページから”winsdk_web.exe”をダウンロードして実行する。画面の指示通りにインストールする。
”VCE64BIT_WIN7SDK.zip”を解凍する。
解凍したファイルの”readme.txt”を開いて読む。
”readme.txt”の手順3は、リンク先の情報をよく読むこと、OSが32bitか64bitかで手順が変わるようだ。私のマシンはVista 64bitなので手順1は行わなかった(確証なし)
手順2として、「スタート」メニューから「すべてのプログラム」-「Microsoft Windows SDK v7.0」-「Visual Studio Registration」-「Windows SDK Configuration Tool」を実行
「Installed Windows SDK Versions:」で”v7.0”を選択。
「Make Current」ボタンを押す。
成功。「OK」ボタンを押す。
次に、コマンドプロンプトを管理者権限で開く。手順は次のようにする。
「スタート」メニューから「すべてのプログラム」-「アクセサリ」-「コマンドプロンプト」を右クリックして、コンテキストメニューから「管理者として実行」を選択。
開いたコマンドプロンプトで”VCE64BIT_WIN7SDK.zip”を解凍したディレクトリに移動する。
”setup_x64.bat”を実行する。(32bit OSの場合は”setup_x86.bat”)
> setup_x64.bat
> regedit /s x64\VC_OBJECTS_PLATFORM_INFO.reg
> regedit /s x64\600dd186-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\600dd187-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\600dd188-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\600dd189-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\656d875f-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\656d8760-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\656d8763-2429-11d7-8bf6-00b0d03daa06.reg
> regedit /s x64\656d8766-2429-11d7-8bf6-00b0d03daa06.reg
> copy "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\AMD64.VCPlatform.config" "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\AMD64.VCPlatform.Express.config"
1 個のファイルをコピーしました。
> copy "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\Itanium.VCPlatform.config" "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\Itanium.VCPlatform.Express.config"
1 個のファイルをコピーしました。
Visual C++ 2008 Express Edition を起動。
「ファイル」メニューから「新規作成」-「プロジェクト」を選択。
「プロジェクトの種類」から”CLR”を選択。
「テンプレート」から”CLR コンソール アプリケーション”を選択。
「プロジェクト名」に”HelloCL”と入力し、「OK」ボタンを押す。
「ビルド」メニューの「構成マネージャ」を選択。
「プラットフォーム」で「<新規作成...>」を選択
「新しいプラットフォーム」で”Itanium”と”x64”がリストアップされていれば 64 bit ビルド対応パッチが成功している。”x64”を選択して、「OK」ボタンを押す。
変更後の画面。「閉じる」ボタンを押す。
「ビルド」メニューから「ソリューションのビルド」を選択。
こんな感じのディレクトリ構成になっていれば成功。環境によっては、多少異なるかもしれない。
というわけで、今回はここまで。
2010年3月30日火曜日
OpenCLマスターへの道 - ATI Stream SDK 編 第四話
前回までのあらすじ、SQL Server 2008 の呪いにより、ATI Stream SDK のインストールが行えなかったが、偉大なる先人の知恵により Windows にパッチをあて、事なきを得た。
無事に ATI Stream SDK をインストールし、サンプルプログラムを動かしてみた。多少の問題はあったが、動作に問題はないようだ。
今回は、サンプルプログラムを動作させる続き。
samples\cal の方を動作させてみることとする。
Visual Studio 2008 Express Edition で samples\cal\samples.sln ファイルを開く。
「Visual Studio 変換ウィザード」が起動する。なぜだ?
「次へ」ボタンを押す。
「完了」ボタンを押す。
”ソリューションに関連付けられているプロパティのいくつかを読み取れませんでした。”だって。
ま、無視する。
「閉じる」ボタンを押す。
変換レポートを確認すると、全て変換されているようだ。
変換レポートを閉じる。
「ビルド」メニューから「ソリューションのビルド」を選択する。
========== ビルド: 48 正常終了、1 失敗、0 更新不要、0 スキップ ==========
また1つ失敗している。しかし、このメッセージは見にくいなぁ、ビルド48に正常終了1に見える・・・
int_instr_IL で失敗している模様。これまたメッセージが見づらい・・・左についてる”5>”とかの数字はなんだろうか?意味が分からない。
ログは、samples\cal\app\cal_d3d10_interop\Debug\BuildLog.htm らしいので確認する。
どうやら d3d10.h が読めないようだ。これって DirectX SDK にあるんじゃまいか?
しょうがないので、DirectX SDK をインストールする。バージョンは、February 2010
Visual Studio 2008 を再起動する。
再起動後、「ツール」メニューの「オプション」を選択
「プロジェクトおよびソリューション」-「VC++ ディレクトリ」を選択
「ディレクトリを表示するプロジェクト」で”インクルード ファイル」を選択
一覧に、”C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include”があることを確認
再び、samples\cal\samples.sln を開く
「ビルド」メニューから「ソリューションのビルド」を選択
今度はビルド成功
cal_d3d10_interop をスタートアッププロジェクトに変更して実行
なんだか、うにゃうにゃ動く
どうやら成功したようだ
というわけで、今回は終了
無事に ATI Stream SDK をインストールし、サンプルプログラムを動かしてみた。多少の問題はあったが、動作に問題はないようだ。
今回は、サンプルプログラムを動作させる続き。
samples\cal の方を動作させてみることとする。
Visual Studio 2008 Express Edition で samples\cal\samples.sln ファイルを開く。
「Visual Studio 変換ウィザード」が起動する。なぜだ?
「次へ」ボタンを押す。
「完了」ボタンを押す。
”ソリューションに関連付けられているプロパティのいくつかを読み取れませんでした。”だって。
ま、無視する。
「閉じる」ボタンを押す。
変換レポートを確認すると、全て変換されているようだ。
変換レポートを閉じる。
「ビルド」メニューから「ソリューションのビルド」を選択する。
========== ビルド: 48 正常終了、1 失敗、0 更新不要、0 スキップ ==========
また1つ失敗している。しかし、このメッセージは見にくいなぁ、ビルド48に正常終了1に見える・・・
int_instr_IL で失敗している模様。これまたメッセージが見づらい・・・左についてる”5>”とかの数字はなんだろうか?意味が分からない。
ログは、samples\cal\app\cal_d3d10_interop\Debug\BuildLog.htm らしいので確認する。
どうやら d3d10.h が読めないようだ。これって DirectX SDK にあるんじゃまいか?
しょうがないので、DirectX SDK をインストールする。バージョンは、February 2010
Visual Studio 2008 を再起動する。
再起動後、「ツール」メニューの「オプション」を選択
「プロジェクトおよびソリューション」-「VC++ ディレクトリ」を選択
「ディレクトリを表示するプロジェクト」で”インクルード ファイル」を選択
一覧に、”C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include”があることを確認
再び、samples\cal\samples.sln を開く
「ビルド」メニューから「ソリューションのビルド」を選択
今度はビルド成功
cal_d3d10_interop をスタートアッププロジェクトに変更して実行
なんだか、うにゃうにゃ動く
どうやら成功したようだ
というわけで、今回は終了
2010年3月28日日曜日
OpenCLマスターへの道 - ATI Stream SDK 編 第三話
今回は、ハローワールドまでたどり着く予定。
その前に、現時点での装備品を確認しておく。
本 : 「OpenCL 入門 - マルチコア CPU ・ GPU のための並列プログラミング」
OS : Windows Vista Business 64bit SP2
CPU : AMD Phenom(tm) II X4 955 Processor 3.2GHz
メモリ : 8GB
グラフィックカード : ATI HD4890 1GB
グラフィックドライバ : ATI Catalyst Control Center バージョン 2009.1124.2131.38610
統合開発環境 : Visual C++ 2008 Express Edition
OpenCL 環境 : ATI Stream SDK v2.01 Vista & Windows 7 64bit (以下 Stream SDK と記述)
作業は、インストールした Stream SDK のドキュメント「ATI Stream SDK Getting Started Guide」にそって行うこととする。
ドキュメントを読むと、Windows 用の Stream SDK には、以下のものが含まれると書いてある。
次に、ビルドのやり方のサンプルに取り掛かる。
インストールしたStram SDK のサンプルプログラムの、OpenCLSamples.sln ファイル(サンプルをインストールしたディレクトリの opencl の中にある)を Visula Studio で開く。
”ソリューション フォルダはこのバージョンのアプリケーションではサポートされていません。”だと!?
”ソリューション フォルダ { cl、cpp_cl、app、app(2)、SDKUtil }は使用できないものとして表示されます。” だって。ふーん
”ソリューションに関連付けられているプロパティのいくつかを読み取れませんでした。”
・・・ ぜんぶまとめて華麗にスルー!
Visual Studio の「ビルド」メニューから「ソリューションのビルド」を選択する。
うがっ、エラーが1個でた。どうやらファイルがコピーできないらしい。どいつだ?
samples\opencl\cl\app\BoxFilter\Debug\Win32\BuildLog.htm に出力されたエラーログを確認すると、BoxFilter_Input.bmp をコピーしている箇所のようだ。
samples\opencl\cl\app\BoxFilter の中には該当のファイルがない。しょうがないので、ファイル検索をしてみると、samples\opencl\bin\x86 の下に見つけた。
samples\opencl\cl\app\BoxFilter にコピーして、BoxFiler を右クリックして「追加」-「既存のファイル」でファイルを追加した。
再び「ビルド」メニューから「ソリューションのビルド」を選択。
今度は成功した。
では、早速実行してみる。
スタートアッププロジェクトが、BitonicSort になっていたので、そのままこれを実行してみる。
「デバッグ」メニューから「デバッグなしで開始」を選択して実行。
コマンドラインで実行されていかのような結果となった。
Unsorted Input
65 226 252 161 146 128 217 169 89 79 179 41 243 93 111 218 135 191 172 174 60 143 252 222 42 176 173 25 245 165 102 87 113 68 48 90 59 139 26 104 175 91 25 66 32 113 86 227 195 73 137 10 38 86 141 30 169 52 213 112 219 51 235 96
Executing kernel for 1 iterations
-------------------------------------------
Output
252 252 245 243 235 227 226 222 219 218 217 213 195 191 179 176 175 174 173 172 169 169 165 161 146 143 141 139 137 135 128 113 113 112 111 104 102 96 93 91 90 89 87 86 86 79 73 68 66 65 60 59 52 51 48 42 41 38 32 30 26 25 25 10
どうやらソートをするプログラムらしい。結果を見る限り大丈夫そうだ。
他も実行してみる。
HelloCL プロジェクトを右クリックして、「スタートアップ プロジェクトに設定」を選択する。
「デバッグ」メニューから「デバッグなしで開始」を選択して実行。
HelloCL!
Getting Platform Information
Creating a context AMD platform
Getting device info
Loading and compiling CL source
Running CL program
Done
Passed!
おお、動く動く!
というわけで、今回はここまで。
その前に、現時点での装備品を確認しておく。
本 : 「OpenCL 入門 - マルチコア CPU ・ GPU のための並列プログラミング」
OS : Windows Vista Business 64bit SP2
CPU : AMD Phenom(tm) II X4 955 Processor 3.2GHz
メモリ : 8GB
グラフィックカード : ATI HD4890 1GB
グラフィックドライバ : ATI Catalyst Control Center バージョン 2009.1124.2131.38610
統合開発環境 : Visual C++ 2008 Express Edition
OpenCL 環境 : ATI Stream SDK v2.01 Vista & Windows 7 64bit (以下 Stream SDK と記述)
作業は、インストールした Stream SDK のドキュメント「ATI Stream SDK Getting Started Guide」にそって行うこととする。
ドキュメントを読むと、Windows 用の Stream SDK には、以下のものが含まれると書いてある。
- OpenCL コンパイラーおよびランタイム
- ATI CAL ヘッダーファイルおよびコンパイル用ライブラリ(CAL 用の DLL ライブラリは、現在 ATI ディスプレイドライバーの一部であり、Stream SDK には含まれない。らしい・・・)
- 開発者用ドキュメント
- サンプルアプリケーション
- サンプルアプリケーションのドキュメント
- プロファイラー(なんだろう?)
次に、ビルドのやり方のサンプルに取り掛かる。
インストールしたStram SDK のサンプルプログラムの、OpenCLSamples.sln ファイル(サンプルをインストールしたディレクトリの opencl の中にある)を Visula Studio で開く。
”ソリューション フォルダはこのバージョンのアプリケーションではサポートされていません。”だと!?
”ソリューション フォルダ { cl、cpp_cl、app、app(2)、SDKUtil }は使用できないものとして表示されます。” だって。ふーん
”ソリューションに関連付けられているプロパティのいくつかを読み取れませんでした。”
・・・ ぜんぶまとめて華麗にスルー!
Visual Studio の「ビルド」メニューから「ソリューションのビルド」を選択する。
うがっ、エラーが1個でた。どうやらファイルがコピーできないらしい。どいつだ?
samples\opencl\cl\app\BoxFilter\Debug\Win32\BuildLog.htm に出力されたエラーログを確認すると、BoxFilter_Input.bmp をコピーしている箇所のようだ。
samples\opencl\cl\app\BoxFilter の中には該当のファイルがない。しょうがないので、ファイル検索をしてみると、samples\opencl\bin\x86 の下に見つけた。
samples\opencl\cl\app\BoxFilter にコピーして、BoxFiler を右クリックして「追加」-「既存のファイル」でファイルを追加した。
再び「ビルド」メニューから「ソリューションのビルド」を選択。
今度は成功した。
では、早速実行してみる。
スタートアッププロジェクトが、BitonicSort になっていたので、そのままこれを実行してみる。
「デバッグ」メニューから「デバッグなしで開始」を選択して実行。
コマンドラインで実行されていかのような結果となった。
Unsorted Input
65 226 252 161 146 128 217 169 89 79 179 41 243 93 111 218 135 191 172 174 60 143 252 222 42 176 173 25 245 165 102 87 113 68 48 90 59 139 26 104 175 91 25 66 32 113 86 227 195 73 137 10 38 86 141 30 169 52 213 112 219 51 235 96
Executing kernel for 1 iterations
-------------------------------------------
Output
252 252 245 243 235 227 226 222 219 218 217 213 195 191 179 176 175 174 173 172 169 169 165 161 146 143 141 139 137 135 128 113 113 112 111 104 102 96 93 91 90 89 87 86 86 79 73 68 66 65 60 59 52 51 48 42 41 38 32 30 26 25 25 10
どうやらソートをするプログラムらしい。結果を見る限り大丈夫そうだ。
他も実行してみる。
HelloCL プロジェクトを右クリックして、「スタートアップ プロジェクトに設定」を選択する。
「デバッグ」メニューから「デバッグなしで開始」を選択して実行。
HelloCL!
Getting Platform Information
Creating a context AMD platform
Getting device info
Loading and compiling CL source
Running CL program
Done
Passed!
おお、動く動く!
というわけで、今回はここまで。
OpenCLマスターへの道 - ATI Stream SDK 編 第二話
前回撃沈された ATI Stream SDK インストールに再チャレンジ!
インストーラーでのインストールが不調に終わったのだが、何気なしにインストーラーが解凍したインストール実行ファイル(C:\ATI\SUPPORT\streamsdk_2-0-1_win764\Setup.exe)を直接実行してみた。
言語サポートを「日本語」のまま「次へ」ボタンを押す。お、なんかいけるっぽい。
「インストール」ボタンを押す。
・・・やっぱりだめ。。。
しかたなくネットを彷徨ってみると、ここの情報によってこのパッチを当てればいいことが分かった。
早速パッチを当て、再び上記の「インストール」ボタンを押してみた。
「インストーラへようこそ」・・・・・・やったやりました!ありがとう!ありがとう!パッチ情報を載せてくれた人!
では、続きを。
折角なので「カスタム」を選択し、「次へ」ボタンを押す。
全てチェックしたまま、「次へ」ボタンを押す。
ライセンスをよく読んでから、同意できるなら「受諾する」ボタンを押す。
「Next」ボタンを押す。
インストール先を指定して、「Next」ボタンを押す。
ライセンスをよく読んでから、同意できるなら”I accept the terms in the license agreement”を選択してから、「Next」ボタンを押す。
「Install」ボタンを押す。
「Finish」ボタンを押す。
次に、サンプルのインストールが自動的に始まる。「Next」ボタンを押す。
サンプルのインストール先を指定して、「Next」ボタンを押す。
ライセンスをよく読んでから、同意できるなら”I accept the terms in the license agreement”を選択してから、「Next」ボタンを押す。
「Install」ボタンを押す。
「Finish」ボタンを押す。
次に、プロファイラーのインストールが自動的に始まる。プロファイラーってなんだろう?
とりあえず「Next」ボタンを押す。
ライセンスをよく読んでから、同意できるなら”I accept the terms in the license agreement”を選択してから、「Next」ボタンを押す。
インストール先を指定して、「Next」ボタンを押す。
「Next」ボタンを押す。
「Finish」ボタンを押す。
「終了」ボタンを押して、インストーラーを終了する。
インストール完了。長かった・・・
インストール後は、このようなディレクトリ構成になる。
以上でインストールは完了!
インストーラーでのインストールが不調に終わったのだが、何気なしにインストーラーが解凍したインストール実行ファイル(C:\ATI\SUPPORT\streamsdk_2-0-1_win764\Setup.exe)を直接実行してみた。
言語サポートを「日本語」のまま「次へ」ボタンを押す。お、なんかいけるっぽい。
「インストール」ボタンを押す。
・・・やっぱりだめ。。。
しかたなくネットを彷徨ってみると、ここの情報によってこのパッチを当てればいいことが分かった。
早速パッチを当て、再び上記の「インストール」ボタンを押してみた。
「インストーラへようこそ」・・・・・・やったやりました!ありがとう!ありがとう!パッチ情報を載せてくれた人!
では、続きを。
折角なので「カスタム」を選択し、「次へ」ボタンを押す。
全てチェックしたまま、「次へ」ボタンを押す。
ライセンスをよく読んでから、同意できるなら「受諾する」ボタンを押す。
「Next」ボタンを押す。
インストール先を指定して、「Next」ボタンを押す。
ライセンスをよく読んでから、同意できるなら”I accept the terms in the license agreement”を選択してから、「Next」ボタンを押す。
「Install」ボタンを押す。
「Finish」ボタンを押す。
次に、サンプルのインストールが自動的に始まる。「Next」ボタンを押す。
サンプルのインストール先を指定して、「Next」ボタンを押す。
ライセンスをよく読んでから、同意できるなら”I accept the terms in the license agreement”を選択してから、「Next」ボタンを押す。
「Install」ボタンを押す。
「Finish」ボタンを押す。
次に、プロファイラーのインストールが自動的に始まる。プロファイラーってなんだろう?
とりあえず「Next」ボタンを押す。
ライセンスをよく読んでから、同意できるなら”I accept the terms in the license agreement”を選択してから、「Next」ボタンを押す。
インストール先を指定して、「Next」ボタンを押す。
「Next」ボタンを押す。
「Finish」ボタンを押す。
「終了」ボタンを押して、インストーラーを終了する。
インストール完了。長かった・・・
インストール後は、このようなディレクトリ構成になる。
以上でインストールは完了!
2010年3月20日土曜日
OpenCLマスターへの道 - ATI Stream SDK 編 第一話
Amazon にやられた。うっかり「OpenCL入門」なる本を買ってしまった。
というわけで、無謀にも並列プログラミングに足を突っ込むことにした。
考えれば、CPUはクアッドコアだし、GPUはそこそこだし。
やっぱり並列プログラミング・だ・よ・ね!
うちの環境は AMD Phenom II X4 で ATI Radeon なので、OpenCLと言えば当然 ATI Stream SDK になるわけだす。
と言うわけで ATI Stream SDK を AMD のページから落としてくる。
うちの OS は Vista 64bit なので ati-stream-sdk-v2.01-vista-win7-64.exe を落としてきた。
早速インストールする。
実行すると、解凍する必要があるらしいので、適当な所に Unzip ボタンを押して解凍する。
解凍完了。OKボタンを押す
こんな画面が表示されるので、そのまま次へボタンを押す。
こんな画面が出てきた。インストール続行不能。以上おわり。
むむう。SP2 には対応していないのか?
今回は、ここで断念。
というわけで、無謀にも並列プログラミングに足を突っ込むことにした。
考えれば、CPUはクアッドコアだし、GPUはそこそこだし。
やっぱり並列プログラミング・だ・よ・ね!
うちの環境は AMD Phenom II X4 で ATI Radeon なので、OpenCLと言えば当然 ATI Stream SDK になるわけだす。
と言うわけで ATI Stream SDK を AMD のページから落としてくる。
うちの OS は Vista 64bit なので ati-stream-sdk-v2.01-vista-win7-64.exe を落としてきた。
早速インストールする。
実行すると、解凍する必要があるらしいので、適当な所に Unzip ボタンを押して解凍する。
解凍完了。OKボタンを押す
こんな画面が表示されるので、そのまま次へボタンを押す。
こんな画面が出てきた。インストール続行不能。以上おわり。
むむう。SP2 には対応していないのか?
今回は、ここで断念。
登録:
投稿 (Atom)













































