加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2023-01-08 12:01:35 所属栏目:Linux 来源:网络
导读: Linux下Intel编译器oneAPI安装和链接MKL库编译
Linux下安装oneAPI
很多时候再Windows下使用VStudio+ivf+mkl进行编译的程序,在Linux下使用会遇到一些问题,这是因为linux下默认的gcc、g++还

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,或者点击 访问,在该页面下方有不同的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文件中,这样每一次启动终端,就会自动初始化环境

#for 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编译器默认采用的是单精度编译linux编译器,例如程序中的real,默认给定的是单精度编译,一次需要加上opt控制指令进行双精度编译,如

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

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!