amd Ubuntu opencl 安装

news2024/12/23 3:31:34

amd cpu+gpu

安装amd显卡驱动,下载地址:
https://www.amd.com/en/support/linux-drivers

//eg:
sudo apt install ./amdgpu-install_5.4.50403-1_all.deb
amdgpu-install

安装成功之后可输入 glxinfo | grep rendering,显示 yes 则显卡驱动安装成功。

安装 openCL 头文件

// 单独安装头文件和库
sudo apt install opencl-headers 
sudo apt install ocl-icd-libopencl1 
sudo apt install ocl-icd-opencl-dev
sudo apt install clinfo

OpenCl opencl SDK 下载地址:
https://github.com/ghostlander/AMD-App-SDK/releases

wget https://github.com/ghostlander/AMD-APP-SDK/releases/download/v2.9.1/AMD-APP-SDK-v2.9.1-lnx64.tar.xz

// 解压
tar xvJf  xx.tar.xz

// 进入解压后文件夹 安装install 
 sudo ./install.sh

clinfo 工具查看显卡对 openCL 的支持情况

clinfo

在这里插入图片描述

重启
进入 /opt/AMDAPPSDK-2.9-1/samples/opencl/bin/x86_64 下有很多 demo,可以点击尝试运行,比如运行 SimpleGL 会有类似正弦波的界面出来。

opencl 测试

cl_test.c

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
 
#ifdef MAC  
#include <OpenCL/cl.h>  
#else  
#include <CL/cl.h>  
#endif  
 
int main() {  
 
    /* Host data structures */  
    cl_platform_id *platforms;  
    //每一个cl_platform_id 结构表示一个在主机上的OpenCL执行平台,就是指电脑中支持OpenCL的硬件,如nvidia显卡,intel CPU和显卡,AMD显卡和CPU等  
    cl_uint num_platforms;  
    cl_int i, err, platform_index = -1;  
 
    /* Extension data */  
    char* ext_data;                           
    size_t ext_size;     
    const char icd_ext[] = "cl_khr_icd";  
 
    //要使platform工作,需要两个步骤。1 需要为cl_platform_id结构分配内存空间。2 需要调用clGetPlatformIDs初始化这些数据结构。一般还需要步骤0:询问主机上有多少platforms  
 
    /* Find number of platforms */  
    //返回值如果为-1就说明调用函数失败,如果为0标明成功  
    //第二个参数为NULL代表要咨询主机上有多少个platform,并使用num_platforms取得实际platform数量。  
    //第一个参数为1,代表我们需要取最多1个platform。可以改为任意大如:INT_MAX整数最大值。但是据说0,否则会报错,实际测试好像不会报错。下面是步骤0:询问主机有多少platforms  
    err = clGetPlatformIDs(5, NULL, &num_platforms);          
    if(err < 0) {          
        perror("Couldn't find any platforms.");           
        exit(1);                              
    }                                     
 
    printf("I have platforms: %d\n", num_platforms); //本人计算机上显示为2,有intel和nvidia两个平台  
 
    /* Access all installed platforms */  
    //步骤1 创建cl_platform_id,并分配空间  
    platforms = (cl_platform_id*)                     
        malloc(sizeof(cl_platform_id) * num_platforms);   
    //步骤2 第二个参数用指针platforms存储platform  
    clGetPlatformIDs(num_platforms, platforms, NULL);         
 
    /* Find extensions of all platforms */  
    //获取额外的平台信息。上面已经取得了平台id了,那么就可以进一步获取更加详细的信息了。  
    //一个for循环获取所有的主机上的platforms信息  
    for(i=0; i<num_platforms; i++)   
    {  
        /* Find size of extension data */  
        //也是和前面一样,先设置第三和第四个参数为0和NULL,然后就可以用第五个参数ext_size获取额外信息的长度了。  
        err = clGetPlatformInfo(platforms[i],             
            CL_PLATFORM_EXTENSIONS, 0, NULL, &ext_size);      
        if(err < 0)   
        {  
            perror("Couldn't read extension data.");              
            exit(1);  
        }     
 
        printf("The size of extension data is: %d\n", (int)ext_size);//我的计算机显示224.  
 
        /* Access extension data */    
        //这里的ext_data相当于一个缓存,存储相关信息。  
        ext_data = (char*)malloc(ext_size);   
        //这个函数就是获取相关信息的函数,第二个参数指明了需要什么样的信息,如这里的CL_PLATFORM_EXTENSIONS表示是opencl支持的扩展功能信息  
        clGetPlatformInfo(platforms[i], CL_PLATFORM_EXTENSIONS,       
            ext_size, ext_data, NULL);                
        printf("Platform %d supports extensions: %s\n", i, ext_data);  
 
        //这里是输出生产商的名字,比如我显卡信息是:NVIDIA CUDA  
        char *name = (char*)malloc(ext_size);  
        clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME,     
            ext_size, name, NULL);                
        printf("Platform %d name: %s\n", i, name);  
 
        //这里是供应商信息,我显卡信息:NVIDIA Corporation  
        char *vendor = (char*)malloc(ext_size);  
        clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR,       
            ext_size, vendor, NULL);                  
        printf("Platform %d vendor: %s\n", i, vendor);  
 
        //最高支持的OpenCL版本,本机显示:OpenCL1.1 CUDA 4.2.1  
        char *version = (char*)malloc(ext_size);  
        clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION,      
            ext_size, version, NULL);                 
        printf("Platform %d version: %s\n", i, version);  
 
        //这个只有两个值:full profile 和 embeded profile  
        char *profile = (char*)malloc(ext_size);  
        clGetPlatformInfo(platforms[i], CL_PLATFORM_PROFILE,      
            ext_size, profile, NULL);                 
        printf("Platform %d full profile or embeded profile?: %s\n", i, profile);  
 
        /* Look for ICD extension */     
        //如果支持ICD这一扩展功能的platform,输出显示,本机的Intel和Nvidia都支持这一扩展功能  
        if(strstr(ext_data, icd_ext) != NULL)   
            platform_index = i;  
        //std::cout<<"Platform_index = "<<platform_index<<std::endl;  
        printf("Platform_index is: %d\n", platform_index);  
        /* Display whether ICD extension is supported */  
        if(platform_index > -1)  
            printf("Platform %d supports the %s extension.\n",   
            platform_index, icd_ext);  
 
 
        //释放空间  
        free(ext_data);  
        free(name);  
        free(vendor);  
        free(version);  
        free(profile);  
    }  
 
    if(platform_index <= -1)  
        printf("No platforms support the %s extension.\n", icd_ext);  
 
    /* Deallocate resources */  
    free(platforms);  
    return 0;  
}   

gcc cl_test.c -o opencl_test -lOpenCL
./opencl_test

运行结果
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浙江大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;20金币 获取条件&#xff1a;提交浙江大学任意中危或以上级别漏洞

财务自由纲领

一、大道至简 抓住事物的要害和根本&#xff0c;剔除那些无效的、非本质的东西&#xff0c;化繁为简 二、空杯心态 空杯心态象征意义是做事的前提是先要有好心态。如果想学到更多学问&#xff0c;先要把自己想象成“一个空着的杯子”&#xff0c;而不是骄傲自满。有一句话说&a…

【更新公告】AirtestIDE更新至1.2.16版本

1. 前言 本次更新为AirtestIDE、Airtest、Poco更新。 AirtestIDE更新至1.2.16版本&#xff0c;Airtest更新为1.3.1版本&#xff0c;Poco更新为1.0.92版本&#xff0c;主要为iOS内容更新、新增Android剪切板功能、poco问题修复等。更多更新内容详见下文。 2. 更新内容 1&…

易基因:cfDNA甲基化诊断和监测肿瘤的研究进展与展望:胰腺癌|深度综述

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 胰腺癌因其病死率高而成为目前最具挑战性的恶性肿瘤之一。考虑到目前的治疗方案诊断较晚&#xff0c;生存获益有限&#xff0c;优化早期检测、预后和治疗反应预测势在必行。近年来大量研…

Git设置显示中文

git config --global i18n.comitencoding utf-8 git config --global i18n.logoutputencoding utf-8 export LESSCHARSETutf-8

不会平面设计软件,如何做好一本精美的产品画册?

想要制作一本优秀精美的产品画册&#xff0c;还是有一定难度的&#xff0c;一本好的产品画册不仅需要好的内容&#xff0c;同时也需要一个美观、方便阅读的呈现形式。 那很多人都会问&#xff0c;这么多要求的产品画册&#xff0c;像我这种不会平面设计软件的&#xff0c;要如…

Promise链式调用改写成async/await

首先&#xff0c;Promise链式调用和async/await都是用来解决异步调用层层嵌套的问题。 promise解决了回调地狱的问题&#xff0c;把异步任务完成后的处理函数换个位置放&#xff1a;传给then方法&#xff0c;并支持链式调用&#xff0c;避免层层回调。用catch方法捕获错误。 …

sd-wan专线异地组网|分支机构与总部间外贸MES系统高速访问解决方案

随着全球化的快速发展&#xff0c;国际市场对于企业的重要性日益增加&#xff0c;很多外贸企业都会选择在海外建立工厂&#xff0c;以求更好的发展国际市场&#xff0c;但是&#xff0c;海外建立工厂必然会在当地招聘新的公司人员&#xff0c;如何做好异地管理和监控海外工厂的…

培训心得怎么写?CHAT帮你解决问题

问CHAT&#xff1a;请写一篇入职教师的培训心得 CHAT回复&#xff1a;作为一名新入职的教师&#xff0c;我非常感谢学校给予的这次培训机会。此次培训让我收获颇丰&#xff0c;无论是在教学理念、教学技巧上&#xff0c;还是在如何与学生、家长建立良好关系方面&#xff0c;都有…

【高分快刊】Elsevier旗下,中科院2区SCI,2个月19天录用!

计算机类 • 高分快刊解读 今天小编带来Elsevier旗下计算机领域好刊的解读&#xff0c;如有相关领域作者有意向投稿&#xff0c;可作为重点关注&#xff01;后文有真实发表案例&#xff0c;供您投稿参考~ 01 期刊简介 ☑️出版社&#xff1a;Elsevier ☑️影响因子&#xf…

双11观察:给用户的越多,用户给予的更多

这几年&#xff0c;双11风向倏然转变。 一个明显趋势在于&#xff0c;各大平台商家不再唯销量论&#xff0c;转而更关注消费者。今年&#xff0c;天猫提出要“办一届快乐的天猫双11&#xff0c;让用户开心地来、快乐地逛”&#xff1b;京东也联合了全国超40万实体门店&#xf…

【MySQL】嵌套查询—数据之旅:解析层层嵌套的迷思

&#x1f38a;专栏【MySQL】 &#x1f33a;每日一句&#xff1a;宝剑锋从磨砺出,梅花香自苦寒来 ⭐欢迎并且感谢大家指出我的问题 文章目录 嵌套查询 (1)不相关子查询(带有IN谓词的子查询) &#x1f354;定义 &#x1f354;使用说明 &#x1f354;特点 &#x1f354;实际…

【python海洋专题三十八】海洋指数画法--折线图样式二

【python海洋专题三十八】海洋指数画法–折线图样式二 数据&#xff1a;AMO_index 图像展示&#xff1a; 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像…

Centos7利用tftp与shell备份H3C设备配置

二、TFTPH3C TFTP&#xff08;Trivial File Transfer Protocol&#xff09;是一种简单的文件传输协议&#xff0c;通常用于在计算机网络中传输小文件&#xff0c;如配置文件、固件和其他小型数据文件。TFTP被设计成一种轻量级的协议&#xff0c;因此相对于其他文件传输协议&…

win7电脑怎么录屏?教你一键捕捉电脑屏幕

在Win7操作系统中&#xff0c;录制屏幕活动是一项重要且有用的功能。不仅可以用于制作教程和演示文稿&#xff0c;还可以用于记录游戏过程或视频会议。可是win7电脑怎么录屏呢&#xff1f;在本文中&#xff0c;我们将介绍三种流行的Win7电脑录屏方法。通过本文&#xff0c;您将…

浅谈余压监控系统在某高层住宅的应用方案

【摘要】&#xff1a; 本文介绍了余压监控系统的基本架构和功能&#xff0c;结合某高层住宅建设实例分析了高层民用建筑中设置此系统的优点与必要性&#xff0c;总结了余压监控系统的功能用于高层建筑物中楼梯间和前室、前室和走道之间的余压的监控与调节&#xff0c;使监控区域…

3D可视化字母出现频率_vtkLinearExtrusionFilter

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码目的&#xff1a;学习与总结 demo解决问题&#xff1a;统计输入文本中字母出现的频率&#xff0c;不区分大小写&#xff0c;使用3D可是化方式进行显示&…

Floor报错注入理论及实战

rand()函数&#xff1a;随机返回0-1之间的小数 floor()函数&#xff1a;小数向下取证书。向上取整数ceiling() concat_ws函数&#xff1a;将括号内数据用第一个字段连接起来 group by子句&#xff1a;分组语句&#xff0c;常用语结合统计函数&#xff0c;根据一个或多个列&a…

Spring Security使用总结五,加密用户密码,不再使用明文保存密码

上一章我们成功的注册了一个新用户&#xff0c;按照正常逻辑来说&#xff0c;这一章应该是登录了&#xff0c;但是我们也看到了&#xff0c;这数据库保存的居然是明文密码&#xff0c;这谁受得了&#xff0c;这要是用户信息泄露了&#xff0c;这不让人一锅端了啊&#xff0c;还…

LeetCode | 21. 合并两个有序链表

LeetCode | 21. 合并两个有序链表 OJ链接 定义一个新链表&#xff0c;把小的结点尾插到新的链表注意在插入新的链表中&#xff0c;1. 空链表&#xff0c;插入的节点就是链表的头节点和尾结点。2. 非空链表&#xff0c;插入的节点就是链表的新的尾结点&#xff0c;头结点不变…