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?