编译DPC++ Compiler(支持Nvidia显卡)
开始使用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显卡)相关推荐
- 为Apollo项目安装NVIDIA显卡驱动的有效方法
严正声明:本文系作者davidhopper原创,未经许可,不得转载. 虽然本文仅针对ThinkPad P50s型笔记本电脑进行介绍,但本文方法适用于所有机型,作者已在另外的台式机上进行过成功安装. 相 ...
- Ubuntu 16.04系统中利用CUDA安装更新NVIDIA显卡驱动程序的方法
严正声明:本文系作者davidhopper原创,未经许可,不得转载. 在ThinkPad系列笔记本电脑中使用过Ubuntu 16.04系统的同学都知道,NVIDIA显卡驱动程序特别难安装.以我使用的T ...
- 超级详细Ubuntu20.04.5系统下编译安装OpenCV with ffmpeg4.2.7、NVIDIA显卡驱动515、cuda11.5、cudnn8.3.3并编译使用darknet-yolov4
这篇文章是本人折腾了两天之后将步骤捋顺然后记录一下.如果你的电脑刚刚装好系统,想要安装显卡驱动.编译安装ffmpeg.编译安装cuda与cudnn.编译安装opencv再或者想要使用darknet-y ...
- Ubuntu18.04下安装NVIDIA显卡驱动、docker、nvidia-docker;容器中编译安装opencv-4.4.0与darknet-yolov4并完成测试;容器封装镜像转移。2022
记录一下第一次在CSDN发博客,欢迎大家光临~ 文章目录 前言 一.宿主机配置 1.安装Ubunntu18.04 64位系统 2.为宿主机系统更换国内软件源Ubuntu 官方源服务器在欧洲,国内访问很 ...
- 黑苹果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)版本] 驱动下载地址:点击此处
- 黑苹果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)版本] 下载地址:点击此处
- 黑苹果NVIDIA显卡驱动程序【WebDriver-378.05.05.25f16 +支持 macOS 10.12.6 Sierra (16G2016)版本】
黑苹果NVIDIA显卡驱动程序 [WebDriver-378.05.05.25f16 +支持 macOS 10.12.6 Sierra (16G2016)版本] 驱动下载:点击下载
- 黑苹果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)版本] 驱动下载:点击此处
- Linux启用显卡opengl,如何使你的Nvidia显卡支持OpenGL?
如何使你的Nvidia显卡支持OpenGL? (2007-02-26 14:21:01) 如何使你的Nvidia显卡支持OpenGL? 闲来无事,想在Debian下找个游戏玩玩,听说Nexuiz这个3 ...
最新文章
- 如何解决没有文件扩展“.js”的脚本引擎
- 【图像分类】 关于图像分类中类别不平衡那些事
- html流动布局,自适应css布局——流动布局新时代
- ADO连接ACCESS数据库
- C++ 多继承 初步01
- 阿里技术|Java 的这些坑,你踩到了吗?
- DreamFactory 第8章 保护您的DreamFactory环境
- 会动的图解 | 既然IP层会分片,为什么TCP层也还要分段?
- 删库跑路事件发生,SaaS 云服务如何守护数据安全?
- 如何做相册_苹果手机相册不想让人看怎么办?看这里教你加密
- ECharts地图省会,城市,县坐标
- UESTC 1636 梦后楼台高锁,酒醒帘幕低垂 最小生成树Kruskal算法的扩展
- php微信上传图文素材,php使用curl 上传微信公共平台素材文件
- 中移动Open NFV实验室迎新合作伙伴
- 一个爬取图片的app
- HTML网页制作入门
- H3C Neighbor Discovery Protocol,邻居发现协议
- linux查询awk命令用法
- 编译原理——语法制导翻译并产生中间代码(布尔表达式和控制语句)
- lua(1):lua,luarocks介绍及lua库安装
热门文章
- 面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)
- 隔夜茶到底能不能喝?
- 【无标题】OSPF协议及ACL的使用及配置
- mysql百万数据join_MySQL百万级、千万级数据多表关联SQL语句调优
- 高斯分布Gaussian distribution、线性回归、逻辑回归logistics regression
- 传智播客成都中心“基础加强班”优惠活动最后一期,立马围观。
- Spring Security(15)——权限鉴定结构
- 2021世界燕窝展|上海滋补品展谈燕窝可以提高人体的免疫力?
- 服务器防火墙 配置端口号
- OPENGL ES 2.0 知识串讲 (4)——GLSL 语法(II)