linux opencl(AMD) Example

最近對并行計算很感興趣。不過搞MPI對我來說暫時沒什么用,基于GPU的并行計算倒是挺實用。網上的資料都是CUDA的。實質上我對CUDA一點興趣都沒有。無論別人的架構多么先進,我這個只有AMD顯卡的小孩都是旁觀者而已。在這里記錄一下一個opencl程序的編譯過程。
? ? 當然,首先要安裝AMD-APP-SDK和AMD的顯卡驅動。我的是linux系統加AMD顯卡。我下APP的地址:http://developer.amd.com/Downloads/AMD-APP-SDK-v2.7-lnx64.tgz。
? ? 搞定以后就可以開始寫程序了。找到apple的一個例程:http://developer.apple.com/library/mac/#samplecode/OpenCL_Hello_World_Example/Listings/hello_c.html。
? ? 當然,我這非蘋果的系統直接用這個是不行的。需要把#include <OpenCL/opencl.h>改為#include <CL/opencl.h>。apple的頭文件目錄和其他的平臺有區別的。
? ? 好了,開始編譯:
? ? ? ? ? g++ -L/opt/AMDAPP/lib/x86_64 -lOpenCL -I/opt/AMDAPP/include /home/delat2/mac_square.cpp -o /home/delat2/mac_square.cpp.o
? ? 編譯成功,運行看看。居然提示:Error: Failed to create a device group!看看代碼,可以發現是clGetDeviceIDs這個函數返回了錯誤。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判斷一下錯誤,說是CL_INVALID_PLATFORM。莫非我的APP-SDK還沒裝好?用/opt/AMDAPP/samples/opencl/bin/x86_64下的例程測試一下是可以的。google一下CL_INVALID_PLATFORM,找到了AMD的說明(http://developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=71)。原來是新版本的SDK有幾處修改。按照說明,clGetDeviceIDs的cl_platform_id參數不能為NULL。而獲取platform_id的方法

? ? cl_platform_id platform_id=NULL;

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

相應的clGetDeviceIDs改為

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

重新編譯,運行就沒出錯了。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448835.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php使用supervisor管理進程腳本

supervisor是用python開發的一個在linux系統下的進程管理工具&#xff0c;可以方便的監聽&#xff0c;啟動&#xff0c;停止一個或多個進程。當一個進程被意外殺死后&#xff0c;supervisor監聽到后&#xff0c;會自動重新拉起進程。 一、supervisor的安裝 1、通過easy_install…

重寫規則和重載規則

重寫規則&#xff1a; 發生在有繼承關系的類之間&#xff08;同一類就是重載了&#xff09;相同的方法名&#xff0c;參數列表&#xff0c;返回類型可見性&#xff08;public,protected,private&#xff09;不能被縮小異常不能被放大規則與c中不一樣靜態類型不能被重寫方法重載…

消息中間件:RocketMQ 介紹(特性、術語、原理、優缺點、消息順序、消息重復)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 消息中間件的作用 1. 應用解耦 2. 異步處理 比如用戶注冊場景&#xff0c;注冊主流程完成以后&#xff0c;需要調用郵件系統發送郵件…

C# JsonHelper類

記錄一下&#xff0c;方便下次用。 public class JsonHelper{#region Json/// <summary>/// JavaScriptSerializer/// </summary>/// <typeparam name"T"></typeparam>/// <param name"obj"></param>/// <returns&…

[譯】Redux入門教程(一)

前言 老外寫技術文章真是叼&#xff0c;這是國外的一個程序員寫的一個簡單易懂,循序漸進的Redux教程&#xff0c;本著共享的精神&#xff0c;就翻譯出來給大家一起看&#xff0c;文章最后有鏈接&#xff0c;不想看我翻譯的直接去看原文吧。 下面是原教程的英文目錄 這篇先更三分…

使用 Intellij Idea 打包 java 工程為可執行 jar 包

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 其實還有個簡單多了方法&#xff0c;見&#xff1a; 超簡單方法&#xff1a; Intellij Idea 把 java 工程打成可運行的 jar 步驟&#x…

QuickStart系列:docker部署之Gitlab本地代碼倉庫

gitlab是可以在本地搭建的使用git作為源代碼管理的倉庫。 運行環境&#xff1a; win10vmware14docker7docker 1. 使用命令拉取鏡像&#xff08;非必須&#xff0c;耗時比較久&#xff0c;這里以ce為準&#xff0c;ce是社區版&#xff0c;ee是企業版&#xff09;&#xff1a; do…

超簡單方法: Intellij Idea 把 java 工程打成可運行的 jar

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 找到 Intellij Idea 最下面的 Terminal 選項&#xff0c;并點擊進入該界面。 2. 在光標位置輸入命令&#xff1a;mvn clean 。清理…

LDAP-輕量級目錄訪問協議(統一認證)

概念 LDAP是輕量目錄訪問協議&#xff0c;英文全稱是Lightweight Directory Access Protocol&#xff0c;一般都簡稱為LDAP。 參考資料 LDAP概念和原理介紹 我花了一個五一終于搞懂了OpenLDAP LDAP-Apache Directory Studio使用&#xff08;創建DC.OU及用戶&#xff09; 轉載于…

kafka集群搭建(消息)

1、Kafka使用背景在我們大量使用分布式數據庫、分布式計算集群的時候&#xff0c;是否會遇到這樣的一些問題&#xff1a;我們想分析下用戶行為&#xff08;pageviews&#xff09;&#xff0c;以便我們設計出更好的廣告位我想對用戶的搜索關鍵詞進行統計&#xff0c;分析出當前的…

[轉]在Windows 下使用OpenCL

目前&#xff0c;NVIDIA和AMD的Windows driver均有支援OpenCL&#xff08;NVIDIA的正式版driver是從195.62版開始&#xff0c;而AMD則是從9.11版開始&#xff09;。NVIDIA的正式版driver中包含OpenCL.dll&#xff0c;因此可以直接使用。AMD到目前為止&#xff0c;則仍需要安裝其…

docker 之 Dockerfile 實踐

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 上一篇介紹了Dockerfile中使用的指令&#xff0c;現在開始進行指令實踐 先查看下本地的鏡像&#xff0c;選一個作為base image&#xf…

tomcat啟動后命令行日志中文亂碼

這是日志的編碼設置和窗體的編碼格式不一致。 將 conf\logging.properties 文件中的 UTF-8 改成 GBK 重啟tomcat &#xff08;右鍵cmd標題欄部分&#xff0c;可以查看cmd屬性&#xff09; 轉載于:https://www.cnblogs.com/Echiops/p/10974587.html

Coursera機器學習筆記(一) - 監督學習vs無監督學習

轉載 http://daniellaah.github.io/2016/Machine-Learning-Andrew-Ng-My-Notes-Week-1-Introduction.html 一. 監督學習 什么是監督學習? 我們來看看維基百科中給出的定義: 監督式學習&#xff08;英語&#xff1a;Supervised learning&#xff09;&#xff0c;是一個機器學習…

基于OpenCL的mean filter性能

1.對于一個標準的3*3 均值濾波&#xff0c;kernel代碼如下&#xff1a; 使用buffer/image緩沖對象 __kernel void filter(__global uchar4* inputImage, __global uchar4* outputImage, uint N) {int x get_global_id(0);int y get_global_id(1);int width get_global_size(…

Docker 實戰:編寫 Dockerfile

一、編譯鏡像 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 編譯鏡像 Dockerfile類似于Makfile&#xff0c;用戶使用docker build就可以編譯鏡像&#xff0c;使用該命令可以設置編譯…

dubbo-環境搭建,實現一個簡單地dubbo實例(附github地址)

一、建立maven模塊和provider、consumer、service子模塊&#xff0c;其中service是開發接口的模塊 建立一個maven模塊&#xff0c;不選擇樣板&#xff0c;直接next知道完成&#xff0c;建立三個子模塊,建立完后發現各個模塊的java目錄不是源目錄 右鍵——>make Directory as…

static 二次理解

當api底層用到static修飾的話&#xff0c;因為是類的&#xff0c;此容器中只有一份轉載于:https://blog.51cto.com/jiaxiaoxu/2394844

AMD 5XXX 系列顯卡的 peak bandwidth計算

在ATI Stream Computing Programming Guide中&#xff0c;例舉了AMD 5系列顯卡的參數信息。 我比較關注其中Peak bandwidths的計算&#xff0c;以便在opencl程序測試bandwidth利用率。 下面&#xff0c;我以5870為例&#xff0c;探討一下如何計算得到這些結果&#xff1a; L1 c…

Docker : Dockerfile 定制鏡像

使用 Dockerfile 定制鏡像 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 鏡像的定制實際上就是定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構建、操作的命令都寫…