开始使用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. linux计划任务之at

    at是单次的计划任务 1.首先安装at yum -y install at 2.开启atd服务 systemctl start atd systemctl enabled atd 3.常用命令 -m ...

  2. HOOK API(四) —— 进程防终止

    0x00        前言 这算是一个实战吧,做的一个应用需要实现进程的防终止保护,查了相关资料后决定用HOOK API的方式实现.起初学习HOOK API的起因是因为要实现对剪切板的监控,后来面对 ...

  3. [翻译]Introduction to JSON Web Tokens

    JWT: Json Web Tokens JWT是一种开放标准(RFC 7519),它定义了一种紧凑且独立的方式,用于将各方之间的信息安全地传输为JSON对象.因为它是经过数字签名的,所以该信息可以进 ...

  4. JIRA 测试循环的创建和使用

    3.测试循环 3.1测试循环的创建      测试人员编写完测试用例,并评审通过后:测试负责人可以计划测试循环. 点击JIRA 选择列表栏中的"测试".点击"计划循环测试 ...

  5. HTML笔记整理--上节

    一.认识WEB 「网页」主要是由文字.图像和超链接等元素构成,当然除了这些元素,网页中还可以包括音频.视频以及Flash等. 「浏览器」是网页显示.运行的平台. 「浏览器内核」(排版引擎.解释引擎.渲 ...

  6. NPM 错误、问题等汇总

    一. npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西 二. 1. 修改npm配置为淘宝的源下载: npm install -g cnpm --r ...

  7. 【故障公告】k8s 开船记:增加控制舱(control-plane)造成的翻船

    春节期间我们更换了 kubernetes 生产集群,旧集群的 kubernetes 版本是 1.17.0,新集群版本是 1.23.3,新集群上部署了 dapr,最近准备将更多独立部署的服务器部署到 k ...

  8. DDD-领域驱动设计简谈

    看到网上讨论 DDD 的文章越来越多,咱也不能甘于人后啊,以下是我对 DDD 的个人理解,短小精悍,不喜忽喷. 也谈DDD(领域驱动设计) 解决什么问题 传统模式,产品评审结束,开发人员就凭经验拆分模 ...

  9. RocketMQ的invokeSync call timeout异常的解决办法

    缘起 在RocketMQ客户端的DefaultMQPushConsumer的start方法被执行时,时不时会报出invokeSync call timeout异常,如下: Caused by: jav ...

  10. 大厂晋升指南:材料准备,PPT 写作和现场答辩

    大部分公司在年初,都是绩效回顾.晋升答辩的时期,对于阿里.美团等不少互联网企业,财年是从前一年的 4 月到第二年的 3 月底,春节回来以后,就是一年一度的述职晋升环节. 这里我结合自己述职以及辅导其他 ...