开始使用DPC++

DPC++是Intel实现的SYCL版本用来支持异构计算,类似于OpenCL。

官方安装教程

预备条件

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

  • 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 codecl::sycl::buffer<cl::sycl::cl_int, 1> Buffer(4);// Creating SYCL queuecl::sycl::queue Queue;// Size of index space for kernelcl::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 queueQueue.submit([&](cl::sycl::handler &cgh) {// Getting write only access to the buffer on a deviceauto Accessor = Buffer.get_access<cl::sycl::access::mode::write>(cgh);// Executing kernelcgh.parallel_for<class FillBuffer>(NumOfWorkItems, [=](cl::sycl::id<1> WIid) {// Fill buffer with indexesAccessor[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 resultsbool 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>

编译DPC++ Compiler(支持Nvidia显卡)相关推荐

  1. 为Apollo项目安装NVIDIA显卡驱动的有效方法

    严正声明:本文系作者davidhopper原创,未经许可,不得转载. 虽然本文仅针对ThinkPad P50s型笔记本电脑进行介绍,但本文方法适用于所有机型,作者已在另外的台式机上进行过成功安装. 相 ...

  2. Ubuntu 16.04系统中利用CUDA安装更新NVIDIA显卡驱动程序的方法

    严正声明:本文系作者davidhopper原创,未经许可,不得转载. 在ThinkPad系列笔记本电脑中使用过Ubuntu 16.04系统的同学都知道,NVIDIA显卡驱动程序特别难安装.以我使用的T ...

  3. 超级详细Ubuntu20.04.5系统下编译安装OpenCV with ffmpeg4.2.7、NVIDIA显卡驱动515、cuda11.5、cudnn8.3.3并编译使用darknet-yolov4

    这篇文章是本人折腾了两天之后将步骤捋顺然后记录一下.如果你的电脑刚刚装好系统,想要安装显卡驱动.编译安装ffmpeg.编译安装cuda与cudnn.编译安装opencv再或者想要使用darknet-y ...

  4. Ubuntu18.04下安装NVIDIA显卡驱动、docker、nvidia-docker;容器中编译安装opencv-4.4.0与darknet-yolov4并完成测试;容器封装镜像转移。2022

    记录一下第一次在CSDN发博客,欢迎大家光临~ 文章目录 前言 一.宿主机配置 1.安装Ubunntu18.04 64位系统 2.为宿主机系统更换国内软件源Ubuntu 官方源服务器在欧洲,国内访问很 ...

  5. 黑苹果NVIDIA显卡驱动程序【 WebDriver-387.10.10.10.40.131+支持macOS 10.13.6 High Sierra (17G8037)版本】

    黑苹果NVIDIA显卡驱动程序 [ WebDriver-387.10.10.10.40.131+支持macOS 10.13.6 High Sierra (17G8037)版本] 驱动下载地址:点击此处

  6. 黑苹果NVIDIA显卡驱动程序【 WebDriver-378.10.10.10.20.108+支持macOS 10.13.1 High Sierra (17B1002)版本】

    黑苹果NVIDIA显卡驱动程序 [ WebDriver-378.10.10.10.20.108+支持macOS 10.13.1 High Sierra (17B1002)版本] 下载地址:点击此处

  7. 黑苹果NVIDIA显卡驱动程序【WebDriver-378.05.05.25f16 +支持 macOS 10.12.6 Sierra (16G2016)版本】

    黑苹果NVIDIA显卡驱动程序 [WebDriver-378.05.05.25f16 +支持 macOS 10.12.6 Sierra (16G2016)版本] 驱动下载:点击下载

  8. 黑苹果NVIDIA显卡驱动程序【WebDriver-378.10.10.10.25.103 +支持macOS 10.13.2 High Sierra (17C89)版本】

    黑苹果NVIDIA显卡驱动程序[WebDriver-378.10.10.10.25.103 +支持macOS 10.13.2 High Sierra (17C89)版本] 驱动下载:点击此处

  9. Linux启用显卡opengl,如何使你的Nvidia显卡支持OpenGL?

    如何使你的Nvidia显卡支持OpenGL? (2007-02-26 14:21:01) 如何使你的Nvidia显卡支持OpenGL? 闲来无事,想在Debian下找个游戏玩玩,听说Nexuiz这个3 ...

最新文章

  1. 如何解决没有文件扩展“.js”的脚本引擎
  2. 【图像分类】 关于图像分类中类别不平衡那些事
  3. html流动布局,自适应css布局——流动布局新时代
  4. ADO连接ACCESS数据库
  5. C++ 多继承 初步01
  6. 阿里技术|Java 的这些坑,你踩到了吗?
  7. DreamFactory 第8章 保护您的DreamFactory环境
  8. 会动的图解 | 既然IP层会分片,为什么TCP层也还要分段?
  9. 删库跑路事件发生,SaaS 云服务如何守护数据安全?
  10. 如何做相册_苹果手机相册不想让人看怎么办?看这里教你加密
  11. ECharts地图省会,城市,县坐标
  12. UESTC 1636 梦后楼台高锁,酒醒帘幕低垂 最小生成树Kruskal算法的扩展
  13. php微信上传图文素材,php使用curl 上传微信公共平台素材文件
  14. 中移动Open NFV实验室迎新合作伙伴
  15. 一个爬取图片的app
  16. HTML网页制作入门
  17. H3C Neighbor Discovery Protocol,邻居发现协议
  18. linux查询awk命令用法
  19. 编译原理——语法制导翻译并产生中间代码(布尔表达式和控制语句)
  20. lua(1):lua,luarocks介绍及lua库安装

热门文章

  1. 面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)
  2. 隔夜茶到底能不能喝?
  3. 【无标题】OSPF协议及ACL的使用及配置
  4. mysql百万数据join_MySQL百万级、千万级数据多表关联SQL语句调优
  5. 高斯分布Gaussian distribution、线性回归、逻辑回归logistics regression
  6. 传智播客成都中心“基础加强班”优惠活动最后一期,立马围观。
  7. Spring Security(15)——权限鉴定结构
  8. 2021世界燕窝展|上海滋补品展谈燕窝可以提高人体的免疫力?
  9. 服务器防火墙 配置端口号
  10. OPENGL ES 2.0 知识串讲 (4)——GLSL 语法(II)