前言 #
本次我们基于 Intel Arc 系列的 GPU,在 windows 的 WSL 上安装 oneAPI,
之前发表过纯 CPU,通过 VM 虚拟机的方式,而现在我们在 WSL 上实现GPU版本的安装
环境 #
| 系统 OS | CPU | GPU | WSL | 内核版本 | WSLg | Ubuntu |
|---|---|---|---|---|---|---|
| windows11 专业版 22H2 22621.819 | 13th Gen Intel(R) Core(TM) i5-13600KF | lntel(R) Arc(TM) A770 Graphics | 1.0.0.0 | 5.15.74.2 | 1.0.47 | 22.04 |
基础知识 #
因为是在 WSL 上操作,所以需要知道 WSL 的基本操作,我们可以参考官方的文档,接下来只列出常用的命令
安装:
wsl --install安装 Ubuntu
- Microsoft store 搜索 ubuntu,选择合适的版本,点击获取,下载完成后会自动启动安装,安装时要求输入一个新的用户名和密码。
- 某些情况不能在 Microsoft store 安装的时候,可以前往这里,使用以下链接来下载并手动安装 Linux 发行版。
修改 wsl 系统存放路径(当你 C 盘吃紧的时候,可以时候,)
使用
wsl -l --all -v查询你安装的子系统名称打包 wsl,导出子系统
wsl --export 子系统名称 D:\子系统名称.tar注销原 wsl 系统
wsl --unregister 子系统名称从其他分区导入子系统,这里的路径名就是你搬家后的目的地址
wsl --import 新子系统名称 d:\路径名 D:\子系统名称.tar-
设置默认用户 #
1. 因为搬家后,用户名不会是你原来一开始设置的,但是密码一样,用户名会变成root,如果觉得难受,可以用以下命令修改 2. 使用wsl命令启动: ``` wsl --distribution <Distribution Name> --user <User Name> ``` 3. 如果使用powershell,可以直接这样设置
4. 还可以使用命令:子系统名称 config --default-user your_username
启动方式
- 手动输入
wsl -d 系统名,接下来会在后台自行启动,接下来每次输入ubuntu就会自行进入 - 直接输入
ubuntu就会自行进入 - 安装过window Terminal的同志可以在“+”直接启动 ubuntu
- 手动输入
友情提醒:使用 Ubuntu 之前请更换国内源,这里不做过多介绍
windows 与 WSL 文件关系:
- 在 windows 的文件资源管理器输入
\\wsl$就能进入 linux 文件系统 - 默认打开的~的就是
home/your name的文件夹里面,windows 系统挂载在 mnt 里面 - 在 WSL 中输入
explorer.exe .可以直接打开 windows 的文件资源管理器,能够查看 linux 相关文件
- 在 windows 的文件资源管理器输入
oneAPI 安装 #
下载安装包 #
打开网址,下载Intel oneAPI Base Toolkit和Intel® oneAPI HPC Toolkit的离线版本,在线版本可能会有网络错误什么的,所以能离线最好离线。
如果电脑可以快速上网的话,推荐在 windows 下好,以Base Toolkit为例

再根据 windows 和 WSL 的文件关系,直接移入 linux 文件系统。

分别输入sudo sh ./l_BaseKit_p_2022.3.1.17310_offline.sh和sudo sh ./l_HPCKit_p_2022.3.1.16997_offline.sh
图形界面安装 #
- 等待命令加载如图所示窗口。

- 选中协议,并且使用
Customize

- 去除 intel 优化的 python,Intel 社区有层贴说自带的 python 直接安装存在问题,建议通过 Anaconda安装 Intel Distribution for Python

- 继续运行,你会发现如下几个问题:

第一个问题属于没有安装 Intel GPU 的驱动。
首先我们是在 windows 的大环境下的,所以需要在 windows 安装 intel GPU 的驱动,点击这里安装
接下来我们在 WSL 的 Ubuntu 22.04 环境下
sudo apt-get install -y gpg-agent wget
wget -qO - https://repositories.intel.com/graphics/intel-graphics.key |
sudo gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg
echo 'deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/graphics/ubuntu jammy arc' | \
sudo tee /etc/apt/sources.list.d/intel.gpu.jammy.list
- 这个代码具有版本迁移性,jammy 是 22.04 的版本代号,如果使用其它版本,可以替换相应的版本!
sudo apt-get install intel-opencl-icd intel-level-zero-gpu level-zero
- 最后,关闭 WSL,重新启动安装界面,这个报错就能消失。



第二个问题就是缺少了关键的包,大家可以对比文章,是否就缺少了如上,我将这些错误提示整合起来,方便大家一键安装
sudo apt-get install libgbm1 libgtk-3-0 libnotify4 libnss3 xdg-utils libxcb-dri3-0 libatspi2.0-0
第三个kernel headers的问题在前面两步操作后刷新就不存在了,但在实际编译文件之后就会报头文件缺少的错误,并且无法使用上面的 WSL2 标准库命令进行安装,我们需要使用如下命令:
sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev
接下来刷新界面
就能出现 IDE 配置界面,如果没有这个我们可以直接跳过

然后点击同意协议

直到安装成功。

解决完 Base Tooolkit 的问题,接下来安装 HPC,相同流程下来没有任何报错信息。
DEMO #
// gpu_sample.cpp
// 使用这个DEMO,能够检查安装oneapi是否编译成功,另外也能检测GPU是否启用
#include <CL/sycl.hpp>
using namespace cl::sycl;
int main() {
//# Create a device queue with device selector
gpu_selector selector;
//cpu_selector selector;
//default_selector selector;
//host_selector selector;
queue q(selector);
//# Print the device name
std::cout << "Device: " << q.get_device().get_info<info::device::name>() << "\n";
return 0;
}
编译方法:
source /opt/intel/oneapi/setvars.sh
dpcpp gpu_sample.cpp
./a.out

如图所示,结果为 intel 的 GPU,说明 GPU 下的 oneAPI 安装成功
关于 oneDNN 的说明 #
oneAPI 的Base Toolkit组件已包含:oneDNN
GITHUB 上的 oneDNN 仓库是处于开发版不稳定状态,如果想要稳定功能,直接在 toolkit 里安装,这样方便。
组件卸载/修复 #
如果觉得自己安装的组件有问题,需要卸载和修复
在 oneapi Base toolkit 的安装包目录,重新执行sudo sh ./l_BaseKit_p_2022.3.1.17310_offline.sh或者sudo sh ./l_HPCKit_p_2022.3.1.16997_offline.sh
就能出现管理界面:

例如我们增加和卸载组件,就可以打开安装时候的界面,在这个界面能够自己管理自己的组件

继续执行等待修改,直到成功!

致谢 #
最后,感谢教育部-英特尔产学合作专业综合改革项目提供的 DevCloud 平台支持,感谢英特尔亚太研发有限公司技术团队提供的技术支持。
有关高性能计算课程及相关资料请参阅以下链接:
