Linux下Intel编译器oneAPI安装和链接MKL库编译

Linux下安装oneAPI

很多时候再Windows下使用VStudio+ivf+mkl进行编译的程序,在Linux下使用会遇到一些问题,这是因为linux下默认的gcc、g++还有gfortran都是开源编译器,与Intel的编译器icc、icpc和ifort所编译的方式不同,因此采用VStudio+ivf+mkl库所写的程序会在linux下无法直接编译,特别是程序中使用了MKL的相关函数情况下,就更需要安装oneAPI,安装教程参考:Linux下安装Intel oneAPI.
具体操作方式如下:

下载Toolkit

访问Intel官方网站,搜索toolkit,或者点击 Intel toolkit 访问,在该页面下方有不同的toolkit,注意不支持Fortran77.
在这里插入图片描述我们主要采用的是Base toolkit和HPC toolkit,其中如上图所示,不同的包里面有不同的工具,Base主要包含一些数学库,HPC包含C/C++和Fortran的编译器。

下载离线安装包

点击上述的Download,下载库文件,官方推荐下载离线目录,并且还提供下载教程
在这里插入图片描述

Base toolkit离线安装包大概有3G,HPC toolkit离线安装包大概有1G.

开始安装

下载完成之后,开始安装,首先按照官方教程安装Base toolkit

sudo sh ./l_BaseKit_p_xxxxx_offline.sh #加sudo为所有用户安装,不加则为当前用户安装

输入之后会弹出图形界面,按照图形界面的指示进行安装即可,默认安装路径是

/opt/intel/oneapi/

同样的,HPC toolkit的安装方式也一样

sudo sh ./l_HPCKit_pxxxxx_offline.sh  #加sudo为所有用户安装,不加则为当前用户安装

初始化环境

上述安装完成之后,Intel的oneapi环境并没有启动,此时输入icc、icpc或者ifort都弹出没有该命令,因此需要初始化oneAPI环境,采用命令

  • 手动初始化
. /opt/intel/oneapi/setvars.sh

此时终端弹出初始化输出结果
在这里插入图片描述
此时再在终端输入

icc --version

即可看到icc所对应的版本,表明在该终端下,oneapi环境已经启动。

  • 自动初始化
    也可以将初始化命令放到.bashrc文件中,这样每一次启动终端,就会自动初始化环境
    .bashrc中添加
#for oneapi
source /opt/intel/oneapi/setvars.sh

或者在.bashrc中设置alias,然后在终端输入oneapi即可启动环境

alias oneapi='source /opt/intel/oneapi/setvars.sh'

但是需要注意,oneapi中带有Intel python环境,每次初始化用,之前安装的anaconda环境会被自动取代,如果初始化之后输入conda init 则.bashrc文件中conda环境路径也会给成Intel环境的路径,注意备份好.bashrc文件,因此本人目前还是在终端输入指令启动环境
注释,这个环境替代问题在最新版本似乎已经没有了

可能遇到的问题

(来自参考链接
一般来说运行安装脚本几十秒后即可启动安装界面。若有读者运行安装脚本超过3 min仍无反应,屏幕上只有Extract xxxxxxxx completed!字样,而未切换至安装界面,那么可以按键盘组合键Ctrl+C中断安装。然后改用完全静默安装模式

sudo sh ./l_HPCKit_p_2021.2.0.2997_offline.sh -s -a --silent --eula accept

在安装MKL库时若有同样问题,可同样执行

sudo sh ./l_onemkl_p_2021.2.0.296_offline.sh -s -a --silent --eula accept

这样也是默认安装进/opt/intel/。

编译问题

链接MKL库

如上所述,当采用MKL编写程序时,在编译时,编译器必须采用icc( C )、icpc(C++)、ifort(fortran),在编译时,需要给定指令-qmkl,进行链接mkl库编译,例如

icc -qmkl main.c -o main.out  #对于c
icpc -qmkl main.cpp -o main.out   #对于c++
ifort -qmkl main.f90 -o main.out  #对于Fortran

Fortran的双精度编译

在采用ifort编译时,Intel的Fortran编译器默认采用的是单精度编译,例如程序中的real,默认给定的是单精度编译,一次需要加上opt控制指令进行双精度编译,如

ifort -r8 -qmkl main.f90 -o main.out #实现双精度编译

找不到icc如何处理

根据oneapi官网的更新公告, icc,icpc在2023.2月之后的版本被废弃,取而代之的是icx,官网截图如下。推荐用户根据更新公告中的内容做出相应的修改。
在这里插入图片描述
Intel-oneapi提供了一个官方的社区,在该链接 下点击Gethelp,即可找到对应的社区,如图所示,用户可以在该链接下搜索自己所遇到的问题。在这里插入图片描述

  • 7
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值