amd Ubuntu opencl 安装

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

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


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Ubuntu安装OpenCL,您可以按照以下步骤进行操作: 1. 检查您的显卡是否支持OpenCL。您可以访问显卡供应商的官方网站,查找有关OpenCL支持的信息。 2. 安装显卡驱动程序。根据您的显卡型号,可以通过以下命令来安装适当的显卡驱动程序: ``` sudo ubuntu-drivers autoinstall ``` 或者您也可以手动安装显卡驱动程序。根据您的显卡供应商,可能有不同的安装方法,请参考官方文档。 3. 安装OpenCL运行时和开发包。在Ubuntu上,可以使用以下命令来安装OpenCL相关软件包: ``` sudo apt-get install ocl-icd-opencl-dev ``` 4. 安装OpenCL实现。根据您的显卡供应商,可以选择不同的OpenCL实现。例如,如果您的显卡是AMD或Intel的,您可以使用AMD的ROCm或Intel的OpenCL NEO实现。可以根据您的需求选择合适的实现,并按照其官方文档进行安装。 5. 配置环境变量。打开终端并编辑.bashrc文件: ``` nano ~/.bashrc ``` 在文件末尾添加以下行来设置OpenCL环境变量(根据您的OpenCL实现进行相应更改): ``` export LD_LIBRARY_PATH=/path/to/opencl/lib:$LD_LIBRARY_PATH export OpenCL_VENDOR_PATH=/path/to/opencl/vendor:$OpenCL_VENDOR_PATH ``` 保存并关闭文件,然后运行以下命令使更改生效: ``` source ~/.bashrc ``` 现在,您已经成功在Ubuntu安装OpenCL。您可以编写和运行支持OpenCL的应用程序了。请注意,这些步骤可能会因您的硬件和软件配置而有所不同,所以请参考相关文档以获取更详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值