AMD APP SDK 3.0 下載安裝和配置詳解

一、介紹   

    AMD APP,是AMD Accelerated Parallel Processing的縮寫。中文譯作AMD加速並行處理技術。是AMD針對旗下圖形處理器(GPU)所推出的通用並行計算技術。利用這種技術可以充分發揮AMD GPU的並行運算能力,用於對軟件進行加速運算或進行大型的科學運算。AMD APP技術的前身稱作ATI Stream。2010年10月,隨着AMD Radeon HD6800系列顯卡的發佈,ATI品牌正式被AMD取代。ATI Stream技術也隨着技術升級並更名爲AMD APP技術。AMD APP的競爭對手是nVIDIA CUDA。(來自百度百科)

    AMD最近發佈了支持最新的OpenCL 2.0標準的最新通用計算開發包AMD APP SDK 3.0。這標誌着異構計算髮展道路上的一個新的里程碑。OpenCL 2.0實施了很多AMD所倡導的新的異構系統架構。值得注意的是,GPU和CPU設備之間的數據結構指針內存共享的概念可以大大地簡化GPU參與加速計算的步驟。比起利用OpenCL 1.2,GPU設備利用了OpenCL 2.0排隊功能進行計算任務,爲計算內核提供了一種更加強悍的編程模型。OpenCL 1.2的通用地址空間是一個強大的編程優勢,但是OpenCL 2.0 引用了一種新的內存對象,叫Pipe,這個在採用FIFO機制進行數據採集時起到重要的作用。OpenCL的這些還有其他優勢將會幫助你利用現代異構系統性能的巨大潛力。

二、使用前注意事項

    使用之前,先看看是否有OpenCL 2.0所支持的AMD顯卡型號,AMD Radeon HD 7790, AMD Radeon HD 8770, AMD Radeon HD 8500M/8600M/8700M/8800M/8900M Series(本人用的是8690M), AMD Radeon R5 M240, AMD Radeon R7 200 Series, AMD Radeon R9 290, AMD Radeon R9 290X, A-Series AMD Radeon R4 Graphics, A-Series AMD Radeon R5 Graphics, A-Series AMD Radeon R6 Graphics, A-Series AMD Radeon R7 Graphics, AMD FirePro W5100, AMD FirePro W9100, AMD FirePro S9150。

    支持的操作系統:

    1、Microsoft® 

    Windows®Win 7 (32/64 bits) and 8.1 (32/64 bits)

    2、Linux®

    openSUSE™ 13.1 (32-bit/64-bit)

    Ubuntu® 14.04 LTS, 14.10 (32-bit/64-bit)

    Red Hat® Enterprise 

    Linux® 7.0, 6.4, 6.5 (32-bit/64-bit)

    支持的編譯環境:

    1、Microsoft® 

    Windows®Intel® C Compiler (ICC) 11.x; 

    Microsoft® Visual Studio® (MSVS) 2012 Professional Edition; 

    Microsoft® Visual Studio® (MSVS) 2010 Professional Edition; 

    Microsoft® Visual Studio® (MSVS) 2008 Professional Edition; 

    Minimalist GNU for Windows (MinGW) [GCC 4.4]; 

    Microsoft® Visual Studio® (MSVS) 2013 Professional Edition

    2、Linux®

    Linux GNU Compiler Collection (GCC) 4.7.1 or later

三、SDK的下載

    官網下載地址:http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/

    由於該SDK分爲Linux 32 Linux 64 和windows 三個版本,所以在下載時得看清楚。Linux平臺上的是離線安裝包,Windows下的是在線安裝管理器。雖然都不大,但是從官網下載源的下載地址都很慢,特別是Windows下的在線安裝包不支持斷點續傳,所以比較麻煩。所以下面給出在線安裝包下載AMD-SDKInstaller-v1.2.116-Beta-windows-F-x86.exe的官方下載源地址和百度網盤的下載地址。

    官方下載地址:amd-dev.wpengine.netdna-cdn.com/app-sdk/installers/UnifiedSDKInstaller/1.2-Beta/full/AMD-SDKInstaller-v1.2.116-Beta-windows-F-x86.exe

    百度網盤地址:http://pan.baidu.com/s/1qWx7mzU

    AMD APP SDK包只包含了CPU runtime,GPU runtime包含在了Catalyst driver中。默認的安裝路徑是C:\Program Files\AMD APP SDK\3.0-0-Beta,在操作系統中安裝了以下三部分內容:

    1、AMD APP SDK CPU Runtime

    2、AMD APP SDK Developer component。

       這包含了以下兩部分內容:

       ---opencl編譯器

       ---最新版開發指南文件,AMD math libraries。

       包含了以下四個文件夾(C:\Program Files\AMD APP SDK\3.0-0-Beta):

       ---bin包含了編譯opencl應用所需工具以及運行所需opencl動態庫

       ---lib包含了基本的opencl CPU運行庫

       ---include包含了opencl運行的頭文件

    ---docs包含了AMD APP SDK開發文檔

    3、AMD APP SDK Samples。這包含了以下兩部分:

       ---sample applications

       ---sample documentation

 另外,AMD APP SDK安裝會自動添加變量AMDAPPSDKROOT到環境中去,這也指明瞭CPU Run-time 文件的安裝位置。sample applications被安裝在默認路徑或者用戶指定路徑,安裝過程也自動添加了opencl動態庫的路徑LD_LIBRARY_PATH到系統環境變量中去。

安裝前對系統的需求:

1、管理員權限

2、windows 8.1或者windows 7

3、Microsoft Visual Studio 2012 redistributable

4、具備以下一種ideMicrosoft Visual Studio 2010, Microsoft Visual Studio 2012, or Microsoft Visual Studio 2013.

5、爲了創建Bolt samples,需要Microsoft Visual Studio 2010或者Microsoft Visual Studio 2012

6、DirectX samples需要windows sdk 8.0及以上

7、c++ AMP samples需要Microsoft Visual Studio 2012及以上。


在windows system中,選擇的安裝文件如下,

–32位機 AMD-SDKInstaller-v1.<x.y>-Beta-windows-F-x86.exe
   –64位機 AMD-SDKInstaller-v1.<x.y>-Beta-windows-F-x64.exe

四、SDK的安裝

安裝過程,我們一般選擇默認路徑就行,直接點下一步完成安裝。如果選擇默認自動安裝,那麼會自動生成變量

AMDAPPSDKROOT=C:\Program Files\AMD APP SDK\3.0-0-Beta\(32位機)

AMDAPPSDKROOT=C:\Program Files(x86)\AMD APP SDK\3.0-0-Beta\(64位機)。

如果不是選擇默認安裝路徑,那麼就需要人爲修改。

系統環境變量PATH需要作如下修改,32位機和64位機分別添加

$(AMDAPPSDKROOT)\bin\x86,對應的就是C:\Program Files\AMD APP SDK\3.0-0-Beta\bin\x86

$(AMDAPPSDKROOT)\bin\x86_64,對應的就是C:\Program Files(x86)\AMD APP SDK\3.0-0-Beta\bin\x86_64

安裝好AMDAPPSDK之後,在命令行下運行clinfo命令,將顯示出你支持OpenCL的硬件信息。

五、VS 2012下的配置

   我們先新建一個簡單的工程,不妨取名爲SimpleProject,然後編譯連接運行。代碼的內容我們先不探討,在下文中會有詳細介紹。
#include <Cl/cl.h>
#include <stdio.h>
#define NWITEMS 512
//A simple memset kernel
const char *source = 
"__kernel void memset( __global uint *dst ) \n"
"{ \n"
" dst[get_global_id(0)] = get_global_id(0); \n"
"} \n";
int main(int argc, char ** argv)
{
// 1. Get a platform.
cl_platform_id platform;
clGetPlatformIDs( 1, &platform, NULL );
// 2. Find a gpu device.
cl_device_id device;
clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU,1,&device,NULL);
// 3. Create a context and command queue on that device.
cl_context context = clCreateContext( NULL, 1, &device, NULL, NULL, NULL);
cl_command_queue queue = clCreateCommandQueue( context, device, 0, NULL );
// 4. Perform runtime source compilation, and obtain kernel entry point.
cl_program program = clCreateProgramWithSource( context, 1, &source, NULL, NULL );
clBuildProgram( program, 1, &device, NULL, NULL, NULL );
cl_kernel kernel = clCreateKernel( program, "memset", NULL );
// 5. Create a data buffer.
cl_mem buffer = clCreateBuffer( context, CL_MEM_WRITE_ONLY, NWITEMS*sizeof(cl_float), NULL, NULL);
// 6. Launch the kernel. Let OpenCL pick the local work size.
size_t global_work_size = NWITEMS;
clSetKernelArg(kernel, 0, sizeof(buffer), (void*) &buffer);
clEnqueueNDRangeKernel( queue, kernel, 1, NULL, &global_work_size, NULL, 0, NULL, NULL);
clFinish( queue );
// 7. Look at the results via synchronous buffer map.
cl_uint *ptr;
ptr = (cl_uint *) clEnqueueMapBuffer( queue, buffer, CL_TRUE, CL_MAP_READ, 0, NWITEMS * sizeof(cl_uint), 0, NULL, NULL, NULL );
int i;
for(i=0; i < NWITEMS; i++)
printf("%d %d\n", i, ptr[i]);
return 0;
}
   不出意外的話,編譯過不了,有下面的提示。
fatal error C1083: Cannot open include file: 'Cl/cl.h': No such file or directory
   顯然,這是因爲工程需要的頭文件我們的環境並沒有把它包含進來,所以,要做如下配置:
   打開項目的Property Pages,在C/C++ -> General  ->Additional Include Directories 中添加
$(AMDAPPSDKROOT)/include;

   點擊Build工程之後,出現了下面錯誤。這是由於我們並沒有把工程需要的連接庫文件添加進來的問題。需要作如下配置。
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clGetPlatformIDs@12 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clGetDeviceIDs@24 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateContext@24 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateBuffer@24 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateProgramWithSource@20 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clBuildProgram@24 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateKernel@12 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clSetKernelArg@16 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clFinish@4 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clEnqueueMapBuffer@44 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clEnqueueNDRangeKernel@36 referenced in function _main
1>SimpleProject.obj : error LNK2019: unresolved external symbol _clCreateCommandQueue@20 referenced in function _main
   打開項目的Property Pages,在Linker -> General  ->Additional Library Directories 中添加
$(AMDAPPSDKROOT)\lib\x86\;
   在Linker -> Input  ->Additional Dependencies中選擇Edit,然後添加
OpenCL.lib
   Inherited values中默認的值應該爲:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib


    程序運行成功。至此,AMD APP SDK 3.0的下載安裝和配置都已經完成了,不明白之處請參閱手冊。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章