Intel DPC++安装与使用

DPC++(Data Parallel C++)是Intel公司使用oneAPI实现的SYCL和SYCL编译器,这里记录一下V100服务器安装DPC++过程

下载安装DPC++编译器

前往官网下载地址,左侧选择Compilers->Intel® oneAPI DPC++/C++ Compiler and Intel® C++ Compiler Classic,选择目前最新的离线版本下载。
image
使用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教程

主要看了下面两个教程

除了DPC++还有其他SYCL编译器实现,比如OpenSYCL(之前叫hipSYCL)、ComputeCpp、triSYCL等,感觉不同的SYCL编译器实现方式有很大不同,语法和编译方式也有一些区别,相比之下还是DPC++文档和教程更多一些。

posted @   zhuwlong  阅读(1541)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示