日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux opencl(AMD) Example

發(fā)布時(shí)間:2023/12/18 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux opencl(AMD) Example 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近對(duì)并行計(jì)算很感興趣。不過(guò)搞MPI對(duì)我來(lái)說(shuō)暫時(shí)沒什么用,基于GPU的并行計(jì)算倒是挺實(shí)用。網(wǎng)上的資料都是CUDA的。實(shí)質(zhì)上我對(duì)CUDA一點(diǎn)興趣都沒有。無(wú)論別人的架構(gòu)多么先進(jìn),我這個(gè)只有AMD顯卡的小孩都是旁觀者而已。在這里記錄一下一個(gè)opencl程序的編譯過(guò)程。
? ? 當(dāng)然,首先要安裝AMD-APP-SDK和AMD的顯卡驅(qū)動(dòng)。我的是linux系統(tǒng)加AMD顯卡。我下APP的地址:http://developer.amd.com/Downloads/AMD-APP-SDK-v2.7-lnx64.tgz。
? ? 搞定以后就可以開始寫程序了。找到apple的一個(gè)例程:http://developer.apple.com/library/mac/#samplecode/OpenCL_Hello_World_Example/Listings/hello_c.html。
? ? 當(dāng)然,我這非蘋果的系統(tǒng)直接用這個(gè)是不行的。需要把#include <OpenCL/opencl.h>改為#include <CL/opencl.h>。apple的頭文件目錄和其他的平臺(tái)有區(qū)別的。
? ? 好了,開始編譯:
? ? ? ? ? g++ -L/opt/AMDAPP/lib/x86_64 -lOpenCL -I/opt/AMDAPP/include /home/delat2/mac_square.cpp -o /home/delat2/mac_square.cpp.o
? ? 編譯成功,運(yùn)行看看。居然提示:Error: Failed to create a device group!看看代碼,可以發(fā)現(xiàn)是clGetDeviceIDs這個(gè)函數(shù)返回了錯(cuò)誤。google一下,得知


clGetDeviceIDs returns CL_SUCCESS if the function is executed successfully. Otherwise it returns the following:

CL_INVALID_PLATFORM if platform is not a valid platform.

CL_INVALID_DEVICE_TYPE if device_type is not a valid value.

CL_INVALID_VALUE if num_entries is equal to zero and device_type is not NULL or if both num_devices and device_type are NULL.
CL_DEVICE_NOT_FOUND if no OpenCL devices that matched device_type were found.

?

? ? 用switch case判斷一下錯(cuò)誤,說(shuō)是CL_INVALID_PLATFORM。莫非我的APP-SDK還沒裝好?用/opt/AMDAPP/samples/opencl/bin/x86_64下的例程測(cè)試一下是可以的。google一下CL_INVALID_PLATFORM,找到了AMD的說(shuō)明(http://developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=71)。原來(lái)是新版本的SDK有幾處修改。按照說(shuō)明,clGetDeviceIDs的cl_platform_id參數(shù)不能為NULL。而獲取platform_id的方法

? ? cl_platform_id platform_id=NULL;

? ? err=clGetPlatformIDs(1,&platform_id,NULL);

相應(yīng)的clGetDeviceIDs改為

? ? ?err = clGetDeviceIDs(platform_id, gpu ? CL_DEVICE_TYPE_GPU : CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);

重新編譯,運(yùn)行就沒出錯(cuò)了。

?

總結(jié)

以上是生活随笔為你收集整理的linux opencl(AMD) Example的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。