1. oneAPI的体系架构和SYCL
oneAPI简介:oneAPI是由英特尔(Intel)推出的编程模型与工具集合,旨在简化多架构软件开发,提供统一、开放、标准化环境,支持CPU、GPU、FPGA等不同处理器进行并行代码编写。它具有开放性,支持多种架构与硬件供应商,为开发者提供自由选择最佳硬件以提高软件生产力与性能的可能。
oneAPI包含两种编程模型:直接编程与基于库的编程。直接编程利用统一编程语言SYCL,基于C++标准,允许开发者编写并行算法,并将其集成到现有C++代码中。库基于编程则提供一组用于不同工作流程的API接口。
直接编程使用C++与SYCL,由Khronos Group提供,允许灵活编写现代C++语言,实现并行算法与硬件优化。oneAPI定义库接口,如Math Kernel Library(oneMKL)与Deep Neural Network Library(oneDNN),为常见并行运算与深度学习应用提供支持。
实现:多个编译器支持C++与SYCL编程,包括Codeplay、华为、英特尔与海德堡大学实现,可在各种硬件(CPU、GPU)上进行优化。基于API的库如oneDNN与oneMKL拥有开源实现,支持不同平台与硬件。
oneAPI工具包包括基础工具套件与特定领域工具包,如高性能计算、物联网、渲染与人工智能等,详情可访问intel.com/u...
SYCL编程简介:SYCL是行业标准化对C++数据并行编程的支持,作为面向OpenCL的C++单一异构编程。它提供跨平台抽象层,使异构处理器代码以“单一源”风格编写,编译器可分析与优化程序,而无需关心运行设备。与OpenCL不同,SYCL包含模板与lambda函数,便于高级应用程序编码。
数据并行C++:数据并行C++(DPC++)是oneAPI对SYCL编译器的实现,结合现代C++生产力与SYCL标准,实现数据并行性与异构编程。SYCL作为单一源语言,允许主机代码与加速器内核在同一文件中混合。程序在主机计算机上运行,计算卸载到加速器上。
DPC++扩展SYCL:DPC++提高了生产力,通过简化编码、减少冗长与优化性能来提高性能。它是一个开放协作项目,将LLVM与DPC++扩展上游到核心SYCL或Khronos扩展,并提供开源实现。
使用oneAPI进行HPC加速:代码可以使用内核(SYCL)或指令风格编写。现有Fortran、C++、OpenCL应用程序可以轻松迁移到SYCL。Intel® Advisor帮助优化设计、预测性能与实现矢量化。
简单SYCL示例:将代码保存在simple.cpp文件中,允许在Jupyter Lab中运行与执行。
oneAPI编程模型:平台模型基于SYCL*,定义主机控制设备执行计算工作。主机是CPU系统,设备是加速器,包含计算资源与计算单元。执行模型则定义内核如何在设备上执行,并与主机交互。内存模型定义主机与设备之间的内存交互与管理。内核编程模型实现显式并行性,允许开发者确定代码在主机与设备上执行。
参考文档:oneAPI Intro.ipynb与Intel: What is oneAPI?