开始使用DPC++

官方安装教程

预备条件

请确保当前开发环境满足如下条件:

  • git
  • cmake版本需要满足3.14及以上。
  • python版本3.6以上的python。
  • nijia版本1.8及以上(使用1.8版本以下可以供非llvm开发使用)。
  • gcc版本7.1.0以上。
  • cuda版本11.2通过测试可行。

当然也可以通过docker技术来实现开发环境的配置:

docker run --name sycl_build -it -v /local/workspace/dir/:/src ghcr.io/intel/llvm/ubuntu2004_base /bin/bash

若当前开发环境中有多个版本的编译环境,需要指定编译环境:

下面命令默认在bash环境下运行

指定g++版本:

export CXX=/<path>/gcc-9.2.0/bin/g++

指定gcc版本:

export CC=/<path>/gcc-9.2.0/bin/gcc

指定libstdc++相关动态链接位置

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/<path>/gcc-9.2.0/lib64

创建工作空间

export DPCPP_HOME=~/sycl_workspace
mkdir $DPCPP_HOME
cd $DPCPP_HOME
git clone https://github.com/intel/llvm -b sycl

构建DPC++工具链

配置

运行下面脚本可实现自动化配置:

python $DPCPP_HOME/llvm/buildbot/configure.py

configure脚本存在如下参数:

  • --system-ocl使用系统自带的opencl
  • --no-werror编译 llvm 时不要将警告视为错误
  • --cuda使用cuda作为后端
  • --hip使用hip作为后端
  • --hip-platform指定hip的平台(Nvida 或 Amd)
  • --shared-libs构建动态链接库
  • -t构建类型(debug或release)
  • -o构建路径
  • --cmake-gen设置构建系统类型

若需要使用cuda,可以通过如下指令进行配置:

python $DPCPP_HOME/llvm/buildbot/configure.py --cuda -t release

需要注意python版本务必在3.6以上cmake版本在3.14以上,否则会出现很多异常。

编译需要一个较大的硬盘空间。

可能出现的错误

无法找到Ninja

错误信息

CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_ASM_COMPILER not set, after EnableLanguage

方法1

Ninja的绝对路径配置到PATH中:

export PATH=$PATH:/depot/ninja-1.7.1/

方法2

更改configure.py在参数中指定CMAKE_MAKE_PROGRAM的值为ninja的绝对路径。

方法3

在CMakeCache中指定Ninja的绝对路径

 CMAKE_MAKE_PROGRAM:FILEPATH=/depot/ninja-1.7.1/ninja

无法找到Cuda相关工具

方法1:修改configure.py文件

...
cmake_cmd = [
"cmake3",
...
"-DCUDA_TOOLKIT_ROOT_DIR=/depot/cuda/cuda-11.2/" #指定cuda路径
]
...

方法2

cuda的绝对路径配置到PATH中。

编译

运行下面脚本可实现自动化编译:

python $DPCPP_HOME/llvm/buildbot/compile.py

compile参数

  • -o -> 构建路径
  • -t -> 构建目标
  • -j -> 构建使用的线程数

可能出现的错误

libstdc++版本错误

错误信息

 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found

解决方案

修改本地LD_LIBRARY位置

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/depot/gcc-9.2.0/lib64/lib

python错误

错误信息

...
ILED: _deps/vc-intrinsics-build/GenXIntrinsics/include/llvm/GenXIntrinsics/GenXIntrinsicDescription.gen
cd /remote/us01home50/yuhangli/sycl_workspace/llvm/build/_deps/vc-intrinsics-build/GenXIntrinsics/include/llvm/GenXIntrinsics && /usr/local/bin/python -B /remote/us01home50/yuhangli/sycl_workspace/llvm/build/_deps/vc-intrinsics-src/GenXIntrinsics/include/llvm/GenXIntrinsics/Intrinsics.py /remote/us01home50/yuhangli/sycl_workspace/llvm/build/_deps/vc-intrinsics-src/GenXIntrinsics/include/llvm/GenXIntrinsics/Intrinsic_definitions.py /remote/us01home50/yuhangli/sycl_workspace/llvm/build/_deps/vc-intrinsics-build/GenXIntrinsics/include/llvm/GenXIntrinsics/GenXIntrinsicDescription.gen
....

错误原因

python版本不满足要求导致的

解决方案

修改CMakeCache.txt下python的位置为指定版本Python的位置

PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3.6

运行

配置运行环境

设置oneAPI环境:

export PATH=$PATH:$DPCPP_HOME/llvm/build/bin/
export PATH=$PATH:/slowfs/fs_model5/yhli/oneAPI/llvm/build/bin/

设置oneAPI链接库:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DPCPP_HOME/llvm/build/lib
export LD_LIBRARY_PATH=/depot/gcc-9.2.0/lib64:/slowfs/fs_model5/yhli/oneAPI/llvm/build/lib

测试用例

#include <CL/sycl.hpp>
int main() {
// Creating buffer of 4 ints to be used inside the kernel code
cl::sycl::buffer<cl::sycl::cl_int, 1> Buffer(4);
// Creating SYCL queue
cl::sycl::queue Queue; // Size of index space for kernel
cl::sycl::range<1> NumOfWorkItems{Buffer.size()}; std::cout << "Selected device: " <<
Queue.get_device().get_info<sycl::info::device::name>() << "\n";
// Submitting command group(work) to queue
Queue.submit([&](cl::sycl::handler &cgh) {
// Getting write only access to the buffer on a device
auto Accessor = Buffer.get_access<cl::sycl::access::mode::write>(cgh);
// Executing kernel
cgh.parallel_for<class FillBuffer>(
NumOfWorkItems, [=](cl::sycl::id<1> WIid) {
// Fill buffer with indexes
Accessor[WIid] = (cl::sycl::cl_int)WIid.get(0);
});
}); // Getting read only access to the buffer on the host.
// Implicit barrier waiting for queue to complete the work.
const auto HostAccessor = Buffer.get_access<cl::sycl::access::mode::read>();
// Check the results
bool MismatchFound = false;
for (size_t I = 0; I < Buffer.size(); ++I) {
if (HostAccessor[I] != I) {
std::cout << "The result is incorrect for element: " << I
<< " , expected: " << I << " , got: " << HostAccessor[I]
<< std::endl;
MismatchFound = true;
}
} if (!MismatchFound) {
std::cout << "The results are correct!" << std::endl;
} return MismatchFound;
return 0;
}

编译指令

clang++ -Wall -std=c++17  -fsycl --cuda-path="/depot/cuda/cuda-11.2" -fsycl-targets=nvptx64-nvidia-cuda --gcc-toolchain="/depot/gcc-9.2.0" -O3 source_code.cpp -o <application_name>

当需要依赖MKL时:

dpcpp -Wall --gcc-toolchain="/depot/gcc-9.2.0" -DMKL_ILP64 -lmkl_sycl -lmkl_intel_ilp64 -lmkl_tbb_thread -lmkl_core -std=c++17 -O3 <source_code>.cpp -o <application_name>

编译OneAPI(支持Nvidia显卡)的更多相关文章

  1. Linux secure boot(安全启动)时添加Nvidia显卡驱动

    开启Secure boot情况下,在Fedora 21下安装Nvidia 显卡驱动的方法. Nvidia显卡驱动可以从官网上下载最新版>> 点击进入 下载后添加可执行权限: #chmod ...

  2. docker挂载NVIDIA显卡运行pytorch

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃   写在前面: 请参考之前的文章安装好CentOS.NVIDIA相关驱动及软件.docker及 ...

  3. ubuntu14.04安装、NVIDIA显卡驱动安装及CUDA8.0、Cudnn5.1的环境搭建

    安装环境:hp-Z440工作站.64位Ubuntu14.04(64位Ubuntu16.04).Cuda8.0.Cudnn5.1.Nvidia GeForce GT 705.Tesla K40c 本文可 ...

  4. Linux 桌面玩家指南:11. 在同一个硬盘上安装多个 Linux 发行版以及为 Linux 安装 Nvidia 显卡驱动

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  5. ubuntu 14.04 如何安装nvidia显卡驱动 [转载]

    我的机子装的是64位ubuntu 14.04 LTS系统,显卡是GeForce 405 ,想使用cuda所以需要装NVidia官方驱动,但是总是碰到 nouveau 驱动正在使用的问题.找了好久,网上 ...

  6. [转]Fedora 下安装NVIDIA显卡驱动(使用后无法进入图形界面)

    http://www.linuxidc.com/Linux/2014-04/100689.htm rpmfusion安装法: 相对于ATi,在Linux下安装NVIDIA就简单得多.只需要一个命令即可 ...

  7. 解决Ubuntu Kylin 1610安装ANSYS17.2的NVIDIA显卡驱动问题

    Ubuntu Kylin 1610在安装完毕后,会自动安装显卡驱动,对于一般的图形图像使用来说自然不会有太大的问题,但是对于ANSYS17.2的一些模块,还是会出现问题.一个比较常见的问题就是Open ...

  8. 轻松解决fedora21装完NVIDIA显卡驱动后无法进入gnome问题

    本来打算昨天写的,最近感冒了,打点滴,耽搁了! 我用的是联想14寸笔记本,装好了fedora21后,想装个NVIDIA显卡驱动试试,结果和很多人一样无法进入gnome界面,搞了三四个小时终于搞定.下面 ...

  9. ubuntu13.04 Thinkpad W520安装nvidia显卡驱动

    Ubuntu13.04 amd64 Thinkpad W520安装Nvidia显卡驱动 曾经在ubuntu11.10上成功安装Nvidia显卡驱动.但是自从机器(Thinkpad W520)更新到13 ...

随机推荐

  1. MySQL 索引、事务与存储引擎

               MySQL 索引.事务与存储引擎 1.索引 2.事务 3.存储引擎 1.索引: 索引的概念 : 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址 ...

  2. 7、Linux基础--权限、查看用户信息

    笔记 1.晨考 1.Linux系统中的文件"身份证号"是什么 index node 号码 2.什么是硬链接,什么是软连接 硬链接是文件的入口,软连接是快捷方式. 3.硬链接中保存的 ...

  3. Graph Based SLAM 基本原理

    作者 | Alex 01 引言 SLAM 基本框架大致分为两大类:基于概率的方法如 EKF, UKF, particle filters 和基于图的方法 .基于图的方法本质上是种优化方法,一个以最小化 ...

  4. HTML5/CSS3/JS笔记

    HTML笔记: 前言: HTML无非就是围绕标签.属性.属性值这三个词展开的. (标签也可以叫做元素, 元素的内容是开始标签与结束标签之间的内容) *常规标签 <标签 属性1="属性值 ...

  5. 『德不孤』Pytest框架 — 7、Pytest预期失败

    目录 1.@pytest.mark.xfail()标记的作用 2.应用场景 3.语法参数说明 4.示例 5.忽略xfail标识 Pytest预期失败需要使用@pytest.mark.xfail()标记 ...

  6. [题解]Mail.Ru Cup 2018 Round 1 - B. Appending Mex

    [题目] B. Appending Mex [描述] Ildar定义了一种方法,可以由一个数组产生一个数.具体地,从这个数组中任选一个子集,不在这个子集中的最小的非负整数称为mex,就是由这个数组得到 ...

  7. RENIX发送固定个数报文——网络测试仪实操

    在使用RENIX软件时,有时候我们需要发送固定个数报文,那么该如何操作呢?以下为您讲解具体操作步骤. 第一步:预约测试资源 打开Renix软件,连接机箱, 预约端口 第二步:发送固定个数的报文 选中流 ...

  8. 更快的网络文件系統 — Oxfs

    什麽时候需要网络文件系统 ? 做嵌入式的同学经常会使用 NFS 将 host 上的某个目录挂载到开发板上,方便 host 上编译构建后能直接在板子上运行,减少手工拷贝操作.网站开发时,在 host 上 ...

  9. 【c#新手学习 练习 案例】 阶段项目一:开发团队调度软件

    案例是模仿java https://blog.csdn.net/bjfu170203101/article/details/109322590 改用C#:开发环境   vs2022/vscode .n ...

  10. weblogic自动化打补丁脚本

    转至:https://www.it610.com/article/1294086996750311424.htm 目的 weblogic每个季度都会有psu更新,打补丁操作也变成了每个季度都要做的事情 ...