2009年12月2日 星期三

在 Windows 下使用 OpenCL

新文章:在 Windows 下使用 OpenCL

8 則留言:

HadesWing 提到...

不好意思
想詢問一下
目前剛開始學程式
但對寫OpenCL的程式有興趣
也知道
至少要有一點經驗
開發過普通C/C++程式
所以想問一下
如果想寫這方面的程式
至少需要怎樣的基礎?
例如線性代數要很好之類的...
或者硬體上應該要有哪些配備
有在ATI的網站上看到
似乎ATI Stream 2.0 的SDK
不支援3850的卡
那是不是表示
我編譯之後的程式
沒辦法在3850的卡上跑?
那有工具可以讓我在非上述所支援的顯卡中
也能夠執行的模擬環境嗎?

Hotball 提到...

OpenCL 的程式基本上和一般 C/C++ 程式差不多。所以如果已經熟悉 C/C++ 程式,那要寫 OpenCL 程式並不會特別困難。但是可能要對平行化演算法以及平行化程式設計有一些基本的瞭解(例如 race condition 等問題)。

Radeon 3xxx 系列目前已經確定不會支援 OpenCL,這是硬體上的限制,無法由軟體克服。不過,如果沒有支援的顯示卡,使用 AMD Stream SDK 2.0 仍可以利用 CPU 來跑 OpenCL。

HadesWing 提到...

您好
上次詢問完之後
發現
不知道該如何開始撰寫OpenCL程式
是像平常一樣開啟
VC++專案嗎?
還是安裝完AMD STREAM SDK之後
VS2008會多出OpenCL的專案選項?
不曉得大大從哪裡開始學習OpenCL的撰寫?
目前摸不著頭緒...

HadesWing 提到...

還有個問題
大大有說到
就算是非ATI四系列以上的使用者
也可以執行OpenCL程式
目前編譯是可以的了
但是
執行的時候都會說找不到OpenCL.lib
但我確定有裝了ATI STREAM SDK了

Hotball 提到...

如果你裝的 AMD Stream SDK 是 32 bits 版,那它的 opencl.lib 是放在

%ATISTREAMSDKROOT%\lib

裡面。64 bits 版的 SDK 的話,32 bits 的 opencl.lib 是在

%ATISTREAMSDKROOT%\lib\x86

裡面。所以路徑可能要設定一下。
另一個方法是把兩個路徑都打進去,例如

%ATISTREAMSDKROOT%\lib;%ATISTREAMSDKROOT%\lib\x86

這樣不管系統上裝的是 32 bits 還是 64 bits 的 SDK 都能用。

HadesWing 提到...

%ATISTREAMSDKROOT%
這個環境變數
我打上之後
他說沒有這個所以我只好直接指定路徑了
C:\.....\ATI Stream\...

HadesWing 提到...

目前是可以執行了
但是main主程式跑之後
第一個if
就進入了
就是您教學的
if(context == 0) {

std::cerr << "Can't create OpenCL context\n";

return 0;

}
他直接就跑進去了
請問這是甚麼原因呢?
另問一下
您有沒有使用過
DirectComputeBenchmark
這個東西
小弟測的時候
都出現找不到d3d11.dll
但是小弟用XP
應該不能裝DX11吧

Hotball 提到...

目前 ATI Stream SDK 2.0 的 OpenCL ICD 需要指定 platform,無法在 platform 直接傳入 0。我原本有打算加寫一篇文章介紹做法,不過到現在還沒找到時間寫…
AMD 有一篇文章說明基本的做法,可以參考看看:

http://developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=71

另外,Windows XP 的確不能使用 DirectX 11。DirectX 11 需要 Windows Vista 或 Windows 7。