OpenAcc环境搭建

发布于:2022-12-14 ⋅ 阅读:(518) ⋅ 点赞:(0)

(1).安装Linux版英韦达驱动

        1.更新库

              sudo apt-get update

         2. 卸载原有的英伟达驱动:

                sudo apt-get remove --purge nvidia*

        3.安装驱动

                sudo ubuntu-drivers devices

                sudo ubuntu-drivers autoinstall

       重启后在终端输入 nvidia-smi 返回版本信息则说明驱动安装成功

(2).安装hpc-sdk高性能编译器

        英韦达官网 NVIDIA HPC SDK Current Release Downloads | NVIDIA Developer  下载最新hpc-sdk编译器安装压缩包

        官方安装手册:https://docs.nvidia.com/hpc-sdk/hpc-sdk-install-guide/index.html

        配置环境变量

        sudo gedit ~/.bashrc

        文末添加以下内容:

        export NVARCH=`uname -s`_`uname -m`
        export NVCOMPILERS=/opt/nvidia/hpc_sdk
        export PATH=$NVCOMPILERS/$NVARCH/22.7/compilers/bin:$PATH
        export MANPATH=$MANPATH:$NVCOMPILERS/$NVARCH/22.7/compilers/man

        退出 运行 source ~/.bashrc

        验证

                pgcc -V

                nvc -V  返回版本信息说明安装成功

  (3).验证hpc-sdk已经安装完成

        1.创建一个.c文件

                touch test.c

        2.打开.c文件

                gedit test.c

        3.输入以下代码

        

#include <stdio.h>
#define N 1024
//#include <openacc.h>

int main(){
    int i,a[N],b[N],c[N];
    for(i = 0;i<N;++i){
        a[i] = 0;
        b[i] = c[i] = i;
    }
    //#pragma acc parallel num_gangs(1024) num_workers(32)
    {
        //#pragma acc loop
        for(i = 0;i<N;i++){
            a[i] = b[i] + c[i];
        } 
        //#pragma acc loop independent
        for(i = 1;i<N;i++){
            b[i]=b[i-1];
        }
        for(i = 0;i<2000000000;i++){
            //a[i] = b[i] + c[i];
        } 
    }
    //printf("a[N-1] = %d\n",a[N-1]);
    printf("b[2] = %d\n",b[1023]);
    return 0;
}

4.分别用gcc和hpc编译代码

        gcc test.c -o test1

        nvc -o test2 -acc test.c

        test1为普通gcc编译器编译的可执行文件 test2为hpc使用了openacc指令编译出的可执行文件

        终端运行./test1   后再运行./test2 

        如果发现test1运行速度高于test2则说明可以使用openacc指令


网站公告

今日签到

点亮在社区的每一天
去签到