Intel DPC++安装与使用
DPC++(Data Parallel C++)是Intel公司使用oneAPI实现的SYCL和SYCL编译器,这里记录一下V100服务器安装DPC++过程
下载安装DPC++编译器
前往官网下载地址,左侧选择Compilers->Intel® oneAPI DPC++/C++ Compiler and Intel® C++ Compiler Classic,选择目前最新的离线版本下载。
使用chmod +x
授予执行权限,然后用./
命令开始安装,这里如果用sudo权限安装会安装到/opt/intel/oneapi文件夹下,如果用普通用户权限安装会安装到/home/username/intel/oneapi目录下。
由于新版本DPC++没有在Ubuntu 18.04系统上测试过,安装过程中可能会出现警告,直接无视。
安装完成后需要设置变量,以普通用户安装为例,直接运行
source /home/username/intel/oneapi/setvars.sh intel64
,注意每次启动终端都要设置一次。
编译运行DPC++程序
设置完成后就可以使用icpx编译DPC++程序,编译时需要加上-fsycl命令,例如以下代码运行了一个简单的sycl程序,并打印了所有支持的设备。需要注意的是sycl 2020语法与sycl 1.x语法有很大差距,DPC++默认支持sycl 2020语法,使用旧版本语法将会报错。
#include <CL/sycl.hpp> #include <array> #include <iostream> using namespace sycl; int main() { constexpr int size = 16; std::array<int, size> data; queue Q; buffer B { data }; Q.submit([&](handler& h) { accessor A(B, h); h.parallel_for(size, [=](auto& idx) { A[idx] = idx; }); }); host_accessor A { B }; for (int i = 0; i < size; i++) { std::cout << "data[" << i << "]=" << A[i] << "\n"; } for (auto const& this_platform : platform::get_platforms()) { std::cout << "Platform: " << this_platform.get_info<info::platform::name>() << std::endl; for (auto const& this_device : this_platform.get_devices()) { std::cout << "Device: " << this_device.get_info<info::device::name>() << std::endl; } } return 0; }
运行命令icpx -fsycl test.cpp
编译代码,然后./a.out
执行,输出运行结果。
安装CUDA插件
DPC++默认不支持CUDA,需要下载安装CUDA插件才能在英伟达GPU上运行,参考文档oneAPI for NVIDIA® GPUs。
首先下载CUDA插件,下载地址Downloads-oneAPI for NVIDIA GPUS,oneAPI版本选择已经安装过的DPC++版本,这里版本一定要一致,否则会找不到安装路径。CUDA版本需要选择当前oneAPI支持的CUDA版本。
下载后同样用chmod +x
授予执行权限,然后用./
命令执行,插件安装完成后就可以在DPC++中使用英伟达GPU了,编译使用GPU的DPC++程序需要添加编译选项-fsycl-targets=nvptx64-nvidia-cuda
卸载DPC++
重新运行安装脚本,会出现卸载选项,选择卸载选项卸载即可,卸载完成后可以删除intel文件夹。
DPC++和SYCL教程
主要看了下面两个教程
-
Data Parallel C++,中文译本地址Data Parallel C++中文版,这本书写于SYCL 2020标准发布之前,所以有些语法跟SYCL 2020有些不一致,需要参考其他文档修改
-
SYCL 2020 Specification,标准SYCL规范,比起说明书更像是一个教程,也可以用来入门
除了DPC++还有其他SYCL编译器实现,比如OpenSYCL(之前叫hipSYCL)、ComputeCpp、triSYCL等,感觉不同的SYCL编译器实现方式有很大不同,语法和编译方式也有一些区别,相比之下还是DPC++文档和教程更多一些。
本文来自博客园,作者:zhuwlong,未经授权禁止转载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?