英特尔oneAPI——通过DPC++实现异构计算

本文介绍了英特尔的OneAPI编程模型,它旨在简化跨架构开发,解决多硬件平台的编程挑战。DPC++是基于SYCL和C++17的编程语言,用于异构计算,提高代码的可移植性和效率。文中通过一个cross entropy实验,展示了如何利用DPC++进行异构异步计算,包括设备选择、内存管理和并行计算的核心——parallel_for。
摘要由CSDN通过智能技术生成

OneAPI与DPC++简介

OneAPI是英特尔提出的一种开放的跨架构的编程模型,使开发人员可以自由地跨多个架构使用单个代码库,从而帮助加速计算。

在如今的高性能计算领域,有多种硬件架构可用于运行工作负载——CPU,GPU,FPGA和专用加速器。没有一个架构最适合每一个工作负载。因此,使用混合架构可以在大多数情况下获得最佳性能。但是多种架构的使用也带来了一些编程挑战:

  • 开发人员需要使用以数据为中心的不同硬件架构。
  • 每个架构都需要各自的编程模型和工具链。
  • 软件开发的复杂性限制了架构选择的自由。

在这里插入图片描述

而OneAPI提供了一个不同的编程模型,简化了不同架构的开发。通过oneAPI编程模型,开发人员可以用相同的语言和库瞄准不同的硬件平台,并可以使用同一套调试和性能分析工具在不同的平台上开发和优化代码。

在不同的平台和硬件架构上使用相同的语言,使得源代码更容易被重用;即使在代码被转移到不同的硬件架构上时,仍然需要进行平台特定的优化,也不再需要进行代码翻译。而且,使用共同的语言和工具集会使新的开发人员的培训更快,调试更快,生产率更高。

而DPC++是Intel为了将SYCL引入LLVM和oneAPI所开发的开源项目。SYCL是为了提高各种加速设备上的编程效率而开发的一种高级别的编程模型,简单来说它是一种跨平台的抽象层,用户不需要关心底层的加速器具体是什么,按照标准编写统一的代码就可以在各种平台上运行。可以说SYCL大大提高了编写异构计算代码的可移植性和编程效率,已经成为了异构计算的行业标准。值得一提的是SYCL并不是由多个单词的首字母的缩写。DPC++正是建立在SYCL和现代C++语言之上,具体来说是建立在C++17标准之上的。

实验cross entropy:使用DPC++实现异构异步计算程序设计

本节先简单介绍使用DPC++实现异构计算的相关语法,再通过编写CPU和GPU计算程序计算cross entropy的实验帮助大家入门DPC++异构计算程序的设计。

设备

设备,表示 OneAPI 系统中的各种硬件。设备类是预定义的设备选择和查询的方法,包含用于查询设备信息的成员函数,支持创建不同硬件, CPU/GPU/FPGA/…

device_selector 类支持运行时选择特定设备,如default_selector、cpu_selector、gpu_selector…

// Patric Zhao:  patric.zhao@intel.com

#include <CL/sycl.hpp>
#include <iostream>
using namespace sycl;

int main() {
  queue my_gpu_queue( gpu_selector{} );

  std::cout << "Selected GPU device: " <<
    my_gpu_queue.get_device().get_info<info::device::name>() << "\n";

  return 0;
}

可以在oneAPI官网注册账号,进入https://devcloud.intel.com/oneapi/ge

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值