Intel oneAPI 环境变量设置
因工作需要,需要在linux系统配置多个不同环境的库,需要使用environment-modules工具管理环境变量,为保持配置方法的一致性,也使用modulefile文件加载Intel oneAPI软件。
以下参考自 https://software.intel.com/content/www/us/en/develop/documentation/oneapi-programming-guide/top/oneapi-development-environment-setup/use-modulefiles-with-linux.html
使用Linux的modulefile配置oneAPI开放环境
大多数组件工具文件夹包含一个或多个modulefile脚本,它们配置该组件环境变量。modulefile可以替代setvars.sh脚本去设置环境变量。
由于moudlefile不支持参数,对于支持多个配置(如32位和64位)的oneAPI工具和库,有多个modulefile
注意:Intel oneAPI工具提供的modulefile与Tcl Environment Modules (Tmod)和Lua Environment Modules (Lmod)兼容。以下是支持的最低版本 Tmod 4.1
Tcl version 8.4
Lmod version 8.2.10 输入以下命令,查看测试系统安装了哪个版本的文件:
module --version
每一个modulefile都可以自动验证系统的Tcl版本是否支持
oneAPI modulefile脚本存放在每个组件文件夹的moudulefiles文件夹下。例如,对于默认安装,ipp的modulefile脚本存放在 /opt/intel/ipp/latest/modulefiles/ 目录。
由于oneAPI组件文件夹在磁盘中的组织方式,直接在安装oneAPI模块文件的位置使用它们可能会很困难。oneAPI安装文件夹中提供了一个特殊的modulefiles-setup.sh脚本,以便于使用oneAPI modulefile。在默认安装中,该安装脚本位于此处:/opt/intel/oneapi/modulefiles-setup.sh
modulefile-setup.sh脚本查找oneAPI安装中的所有modulefile脚本,并将它们组织到单个文件夹目录中。这些文件夹是为包含一个或多个ModuleFile的每个已安装oneAPI组件命名的。
每个名为文件夹的组件都包含指向该oneAPI组件提供的所有modulefile的符号链接。这些符号链接被组织为版本化的modulefile文件。每个组件文件夹都包含(至少)一个“最新”版本的modulefile,默认情况下,在加载组件modulefile而不指定版本标签时将选中该文件。
oneAPI modulefiles顶级目录的默认名称为modulefiles,位于oneAPI安装文件夹中。例如:/opt/intel/oneapi/modulefile
创建modulefiles目录
运行modulefiles-setup.sh脚本
etvars.sh脚本去设置环境变量。
由于moudlefile不支持参数,对于支持多个配置(如32位和64位)的oneAPI工具和库,有多个modulefile:
注意:默认情况下,modulefiles-setup.sh脚本在oneAPI工具安装的目录下创建了一个名为modulefiles的文件夹。如果你的oneAPI安装文件夹不具有写权限,使用--output-dir=<path-to-folder>选项去在一个具有写权限的位置创建modulefiles文件夹。输入modulefiles-setup.sh --help查看更多信息。
在modulefiles-setup.sh脚本运行后,在modulefiles文件夹下创建了如下组织形式的文件。
[oneapi_root]
- [modulefiles] - - [compiler] - - - [1.0] -> [oneapi_root/compiler/1.0/modulefiles/compiler] # symlink named 1.0 points to compiler modulefile - - [compiler32] - - - [1.0] -> [oneapi_root/compiler/1.0/modulefiles/compiler32] # symlink named 1.0 points to compiler32 modulefile - - [ipp] - - - [1.1] -> [oneapi_root/ipp/1.1/modulefiles/ipp] - - - [1.2] -> [oneapi_root/ipp/1.2/modulefiles/ipp] - - [ipp32] - - - [1.1] -> [oneapi_root/ipp/1.1/modulefiles/ipp32] - - - [1.2] -> [oneapi_root/ipp/1.2/modulefiles/ipp32] etc…
现在,可以将MODULEFILESPATH进行更新,从而指向新的modulefiles目录。
在你的系统中安装module工具
以下指导可以帮助你迅速熟悉Ubuntu*环境下的Environment Modules 工具。想要关于module工具安装的完整细节,参见http://modules.sourceforge.net/.
$ sudo apt update
$ sudo apt install tcl
$ sudo apt install environment-modules
确保本地的tclsh的版本足够新(截止文章写的时候,需要8.4以上的版本)
$ tclsh
% puts $tcl_version
8.6
% exit
测试module安装,module别名
$ source /usr/share/modules/init/sh
$ module
注意:Bourne兼容Shell的初始化应使用上面显示的源命令。/usr/share/modules/init/文件夹中提供了其他特定shell的init 脚本。有关更多详细信息,请参阅man模块中的该文件夹和初始化部分。
包括sourcing module别名初始化脚本 ( .../modules/init/sh) 在以下设置脚本中,用以确保module命令通常可用。之后,系统可以准备好使用module命令了。
modulefiles-setup.sh脚本入门
- 在Linux开发系统中安装了tclsh
- 在系统中安装了Environment Modules工具 (i.e., module)
- 已经sourced了.../modules/init/sh (或等价的) module 初始化命令
- 安装了oneAPI开发所需的oneAPI工具包
$ cd <oneapi-root-folder> # cd to the oneapi_root install directory
$ ./modulefiles-setup.sh # run the modulefiles setup script
$ module use modulefiles # use the modulefiles folder created above
$ module avail # will show tbb/X.Y, etc.
$ module load tbb # loads tbb/X.Y module
$ module list # should list the tbb/X.Y module you just loaded
$ module unload tbb # removes tbb/X.Y changes from the environment
$ module list # should no longer list the tbb/X.Y env var module
在unload步骤之前,使用env命令检查环境并查找您加载的modulefile所做的更改。例如,如果加载了tbb modulefile,该命令将显示该modulefile所做的一些环境更改(检查modulefile以查看它将进行的所有更改):
$ env | grep -i "intel"
注意:modulefile是一个脚本,但它不需要设置“x”(可执行)权限,因为它由最终用户安装和维护的“模块”解释器加载和解释。oneAPI产品的安装不包括modulefile解释器。它必须单独安装。同样,ModuleFile不要求设置“w”权限,但必须可读(理想情况下,为所有用户设置“r”权限)。
Versioning
oneAPI工具包安装程序将version文件夹应用于各个oneAPI工具和库,其形式为每个工具或库的顶级目录中的版本化的子目录。这些版本化组件文件夹用于创建版本化模块文件。这就是modulefiles-setup.sh脚本的基本功能;它将在顶级$(ONEAPI_ROOT)/modulefiles文件夹中创建的符号链接组织为<modulefile name>/version,因此在使用module命令时,可以按版本引用相应的modulefile。
$ module avail
---------------- modulefiles -----------------
ipp/1.1 ipp/1.2 compiler/1.0 compiler32/1.0
多个modulefiles
一个工具或库可以在其modulefiles文件夹中提供多个modulefiles。每个模块都成为可加载的模块。将根据提取它们的零部件文件夹为它们分配一个版本。
了解使用oneAPI时如何编写模块文件
modulefiles-setup.sh脚本使用符号链接将所有可用的工具和库modulefiles收集到oneAPI的一个顶级modulefiles文件夹中。这意味着不会移动或触摸oneAPI的ModuleFile。作为这种方法的结果,${ModulesCurrentModulefile}变量指向每个modulefile的符号链接,而不是指向各个安装文件夹中的实际modulefile。因此,由于符号链接,这些模块文件无法引用模块文件的组件文件夹中的其他文件夹或文件。
因此,oneAPI的每个modulefile都使用如下语句以获取对相应安装目录中原始modulefile的引用:
[ file readlink ${ModulesCurrentModulefile} ]
为了更好地理解,请查看安装附带的模块文件。大多数注释包括解释如何解析对真实文件的符号链接引用,以及解析版本号(和版本目录)。它们还包括检查以确保安装的TCL是适当的版本级别,并包括检查以防止您无意中加载同一modulefile的两个版本。
通过ModuleFile使用module load命令
几个modulefile使用module load命令来确保也加载了所有必需的依赖模块。没有尝试指定这些依赖ModuleFile的版本。这意味着,在加载需要依赖模块的模块之前,可以手动预加载特定的依赖模块。如果未预加载从属模块,则会加载最新的可用版本。
这是设计的,因为它提供了控制环境的灵活性。例如,您可能已经安装了一个库的更新版本,您希望根据以前版本的编译器进行测试。也许更新后的库有一个bug修复,而您对更改构建中任何其他库的版本不感兴趣。如果依赖ModuleFile被硬编码为需要此库的特定依赖版本,则无法执行此类测试。
注意:如果无法满足从属模块加载,则当前加载的模块文件将被终止,并且不会对您的环境进行任何更改。
额外资源
Intel oneAPI 环境变量设置的更多相关文章
- jdk1.8.0环境变量设置
jdk1.8.0环境变量设置 1.jdk安装完毕 打开如下链接:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloa ...
- SQL*Plus环境变量设置浅析
SQL*Plus的使用环境是可以通过login.sql 或 glogin.sql脚本来设置的,可能很多初学者或不习惯使用SQL*Plus的老鸟都不知道.因为在如今UI工具(Toad.PL/SQL De ...
- [Java] Tomcat环境变量设置
@echo off title Tomcat环境变量设置 color 0a set /p inputTH=D:\Work\024_Tomcat if /i "%inputTH%"= ...
- java环境变量设置
java环境变量设置 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Ja ...
- AIX系统的环境变量设置
AIX系统的环境变量设置 用户环境的定义是通过设置环境变量来实现的.AIX系统主要使用两大类profile文件来定义用户环境.一类是用来为所有用户定制环境,另一类是为个人定义自己的环境. 登录时,sh ...
- tomcat配置及使用 环境变量设置
Tomcat的配置及测试: 第一步:下载tomcat,然后解压到任意盘符 第二步:配置系统环境变量 我这里是tomcat5.5,解压到的D盘 (路径为: D:\Program Files\tomcat ...
- jdk-tomcat环境变量设置
1.export命令直接在shell下设置 export JAVA_HOME=/home/yn4a/jdk1.6.0_16export PATH=$JAVA_HOME/bin:$PATHexport ...
- 【转】linux环境变量设置
1. 显示环境变量HOME $ echo $HOME /home/terry 2. 设置一个新的环境变量WELCOME $ export WELCOME="Hello!" $ ec ...
- linux 学习:环境变量设置
一.临时环境变量 临时环境变量,只对当前打开的shell生效,shell关闭后,环境变量失效. 设置方法一: 分两步 MYPARA=hello export MYPARA 设置方法二:一步完成 exp ...
- 【Linux】环境变量设置
在Windows中环境变量设置是非常easy的事情.例如以下图.仅仅要右键我的电脑->高级系统设置->环境变量,选择Path之后,点击"编辑"就能够输入你要加入的内容. ...
随机推荐
- Vscode报错: error:0308010C:digital envelope routines::unsupported错误记录解决
Vscode报错: error:0308010C:digital envelope routines::unsupported错误记录解决 因为安装了新版本的node才报的错误:node版本: v18 ...
- c# RegistryKey 的相关简单操作(转)
c# RegistryKey 的相关简单操作 以下从'读''写''删除''判断'四个事例实现对注册表的简单操作 1.读取指定名称的注册表的值 private string GetRegistDat ...
- SPI读写官方Demo
// SPDX-License-Identifier: GPL-2.0-only /* * SPI testing utility (using spidev driver) * * Copyrigh ...
- Spring oauth2 ,Spring security, Session,Cookie,token,SSO 是什么,解决什么问题,如何集成?
背景假设就是一个多个域名web系统需要SSO单点登陆 什么Session? 2.什么是Token? 3.什么是Cookie? 4.Spring security? 5.Spring oauth2?
- Educational Codeforces Round 112 E、Boring Segments
原题网址 https://codeforces.com/contest/1555/problem/E 题目大意 有n个区间.每个区间是[1,m]的子区间.从a可以一步走到b的充要条件是存在区间同时覆盖 ...
- reids 启动方法
---恢复内容开始--- 在windows环境下启动redis服务,前提是你安装好了,启动如下: 一,进入redis的安装目录下,在地址栏输入"cmd",回车 二,然后会进入cmd ...
- 你到底懂不懂JavaScript?来做做这12道面试题试试!
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 21 天,点击查看活动详情 JavaScript 是每一个前端开发者都应该掌握的基础技术,但是很多时候,你可能并不完全懂 Jav ...
- CryptoKit 实现 椭圆曲线ECC加密
1.有没有一种方式让两个人的对话绝对安全呢?答案是肯定有的 那就是使用 椭圆曲线ECC加密 2.椭圆曲线ECC加密原理 假设有两个用户A和B .A随机生成一个密码对包含了公钥和私钥 同理B也随机生成一 ...
- C. Tea Tasting
https://codeforces.com/contest/1795/problem/C 用二分+前缀和+差分卡过 #include <iostream> #include <cs ...
- class的知识点
1. 在class类中,定义方法在constructor里面和外面的区别?? 定义在constructor里面是原型方法,定义在外边是实例方法. 里面的原型方法在new的时候会改变this指向 2. ...