世平集團代理產品線 Intel oneAPI:異構計算新時代介紹

世平集團代理產品線

Intel oneAPI:異構計算新時代介紹



oneAPI 是一個開放、免費且基於標準的編程系統,可提供跨加速器和各代硬件的可移植性和性能。

oneAPI 由用於創建並行應用程序的語言和庫組成:



  • SYCL:oneAPI 用於編程加速器和多處理器的核心語言。SYCL 允許開發人員跨硬件目標(CPU 和 GPU 和 FPGA 等加速器)重用代碼,並針對特定架構進行調整
  • oneDPL:DPC++ 編譯器的配套產品,用於使用 C++ 標準庫、並行 STL 和擴展中的 API 對 oneAPI 設備進行編程。
  • oneDNN:深度學習框架原語的高性能實現
  • oneCCL:用於跨多個設備擴展深度學習框架的通信原語
  • 零級:oneAPI 語言和庫的系統接口
  • oneDAL:加速數據科學的算法
  • oneTBB:用於向多處理器上的複雜應用程序添加基於線程的並行性的庫
  • oneVPL:加速視頻處理的算法
  • oneMKL:用於科學、工程和金融應用的高性能數學例程
  • 光線追踪:一組先進的光線追踪和高保真渲染和計算例程,用於各種 3D 圖形用途,包括電影和電視逼真的視覺效果和動畫渲染、科學可視化、高性能計算、遊戲、和更多。

 

英特爾® oneAPI 工具 2023.2 發布

2023.2 英特爾® oneAPI 工具為 Python 帶來了多架構軟件開發的自由,簡化了從 CUDA 到開放 SYCL 的遷移,並提升了最新 GPU 和 CPU 硬件的性能。



  • 2023.2 版本的優點

如果您尚未將工具更新到 oneAPI 多架構版本,或者根本沒有嘗試過,那麼在此版本中這樣做有 5 個好處:

  1. 簡化從 CUDA 到高性能 SYCL 的遷移——開發人員現在可以體驗針對人工智能、深度學習、密碼學、科學模擬和成像等流行應用程序的簡化的 CUDA 到 SYCL 遷移;此外,新版本還支持額外的 CUDA API、最新版本的 CUDA 和 FP64,以實現更廣泛的遷移覆蓋範圍。
  2. 更快、更準確的 AI 推理– 在推理過程中添加 NaN(非數字)值支持簡化了預處理,並提高了在不完整數據上訓練的模型的預測準確性。
  3. GPU 上基於 AI 的加速圖像增強– 英特爾® Open Image Denoise 光線追踪庫現在支持英特爾和其他供應商的 GPU,為快速、高保真、基於 AI 的圖像增強提供硬件選擇。
  4. 用於 AI 和 HPC 的更快的 Python – 此版本引入了 Python 的測試版數據並行擴展,將數值 Python 功能擴展到 GPU 上的 NumPy 和 cuPy 函數,包括 Numba 編譯器支持。
  5. 編寫高效並行代碼的簡化方法——英特爾® Fortran 編譯器擴展了對DO CONCURRENT Reductions 的支持,這是一項強大的功能,允許編譯器並行執行循環並顯著提高代碼性能,同時使編寫高效且正確的並行代碼變得更加容易。

 

  • 2023.2 工具層面的亮點

編譯器和 SYCL 支持

  • 英特爾® oneAPI DPC++/C++ 編譯器將立即命令列表功能設置為默認功能,使希望將計算卸載到英特爾® 數據中心 GPU Max 系列的開發人員受益。
  • 英特爾® oneAPI DPC++ 庫(oneDPL) 提高了 C++ STD 庫排序和掃描算法在英特爾® GPU 上運行時的性能;這可以加快 C++ 應用程序中這些常用算法的速度。
  • 英特爾® DPC++ 兼容性工具(基於開源SYCLomatic 項目)增加了對CUDA 12.1 和更多函數調用的支持,簡化了跨多個領域(人工智能、密碼學、科學模擬、成像等)從CUDA 到SYCL 的遷移,並添加了FP64了解遷移的代碼,以確保在有或沒有 FP64 硬件支持的情況下跨 Intel GPU 的可移植性。
  • 英特爾® Fortran 編譯器增加了對 DO CONCURRENT Reduction 的支持,這是一項強大的功能,可以顯著提高執行歸約的代碼的性能,同時使編寫高效並行代碼變得更加容易。

人工智能框架和庫

  • 英特爾® Python 分發版引入了 Python 並行擴展(測試版),它將 CPU 編程模型擴展到 GPU,並通過為 NumPy 和 CuPy 啟用 CPU 和 GPU 來提高性能。
  • 英特爾® oneAPI 深度神經網絡庫 (oneDNN)可加快 AI 工作負載的訓練和推理速度;更簡單的調試和診斷;支持圖神經網絡(GNN)處理;並提高了多種處理器的性能,例如來自英特爾和其他供應商的第四代英特爾®至強®可擴展處理器和 GPU。
  • 英特爾® oneAPI 數據分析庫(oneDAL) 模型構建器功能在推理過程中添加了對 NaN 支持的缺失值,從而簡化了預處理並提高了在不完整數據上訓練的模型的預測準確性。

性能庫

  • 英特爾® oneAPI 數學內核庫(oneMKL) 大大縮短了英特爾數據中心 GPU Max 和 Flex 系列處理器上的內核啟動時間;引入了 GPU 的 LINPACK 基準測試。
  • 英特爾® MPI 庫提高了第四代英特爾至強可擴展和 Max CPU 的消息傳遞性能,並為英特爾 GPU 添加了重要的優化。
  • 英特爾® oneAPI 線程構建模塊(oneTBB) 算法和 Flow Graph 節點現在可以接受用戶提供的新型可調用項,從而形成更強大、更靈活的編程環境。
  • 英特爾® 加密基元庫多緩衝區庫現在支持 SM4 算法的 XTS 模式,通過提供高效、安全的方式對存儲在存儲設備等扇區中的數據進行加密,使開發人員受益。

分析與調試

  • 英特爾® VTune™ Profiler可深入了解 GPU 卸載任務和執行情況,改進對英特爾 GPU 上的 BLAS 3 級例程的應用程序分析支持,並在平台圖中識別英特爾數據中心 GPU Max 系列設備。
  • 英特爾® GDB 發行版重新調整為 GDB 13,保持最新狀態並與支持有效應用程序調試和共享本地內存 (SLM) 調試的最新增強功能保持一致。

比較 CPU、GPU 和 FPGA 對於不同 oneAPI 計算工作負載的優勢

  • CPU執行

CPU 依靠多種類型的並行性來實現性能。SIMD 數據並行性、指令級並行性以及在不同邏輯核心上執行多個線程的線程級並行性都可以得到利用。這些類型的並行性可以通過 SYCL 通過以下方式實現:

  1. SIMD數據並行性:
    • 每個工作項(同一工作組的)都可以映射到 CPU SIMD 通道。工作項(子組)以 SIMD 方式一起執行。
    • 矢量數據類型可用於顯式指定 SIMD 操作。
    • 編譯器可以執行循環向量化來生成 SIMD 代碼。一次循環迭代映射到 CPU SIMD 通道。多個循環迭代以 SIMD 方式一起執行。
  2. CPU核心和超線程並行度:
    • 不同的工作組可以在不同的邏輯核心上並行執行。
      • 一台擁有 16 個核心和 32 個超線程的機器可以並行執行 32 個工作組。
  3. 傳統指令級並行:
    • 通過複雜的 CPU 控制實現,就像傳統的順序軟件執行一樣。



  • GPU執行

GPU 依靠大型數據並行工作負載來實現性能。因此,單任務內核很少被使用,並且需要 NDRange 內核來完全填充 GPU 的深度執行管道。

在 GPU 上執行內核時,每個工作項都映射到 SIMD 通道。子組由以 SIMD 方式執行的工作項形成,並且子組映射到 GPU EU 或矢量引擎。工作組(包括可以同步和共享本地數據的工作項)被分配在計算單元(又名流式多處理器、子片或 X e 核)上執行。最後,工作項的整個全局 NDRange 映射到整個 GPU。




  • FPGA執行

當為 FPGA 編譯內核時,內核中的操作是在空間上佈局的。相關內核操作是深度流水線化的,而獨立操作是並行執行的。流水線實現的一個重要好處是,只需將數據從一個流水線階段路由回較早的階段即可解決相鄰工作項之間的依賴關係,而無需停止流水線。性能的關鍵是保持深層管道被充分佔用。儘管可以使用 NDRange 內核或單任務內核在 FPGA 上提取性能,但在 FPGA 上性能良好的內核通常表示為單任務內核。

對於單任務內核,FPGA 嘗試流水線循環執行。每個時鐘週期,循環的連續迭代進入管道的第一階段。通過將一個階段的輸出路由到較早依賴階段的輸入,可以在硬件中解決軟件中表達的跨循環迭代的依賴性。



通過 NDRange 內核執行,在每個時鐘週期,不同的工作項進入自定義計算管道的第一階段。



與其他架構不同,借助定制 FPGA 管道計算單元,開發人員可以通過增加管道的 SIMD 寬度來並行處理更多工作項,從而在 FPGA 資源與吞吐量之間進行權衡。例如,可以展開循環迭代以實現數據並行性。

Library Support

在 CPU、GPU 和 FPGA 上編寫高性能軟件的最快方法之一是利用 oneAPI 庫提供的功能。oneAPI 為不同的計算和數據密集型領域提供庫,包括深度學習、科學計算、視頻分析和媒體處理。庫支持可以幫助確定哪種設備最適合算法。一般來說,CPU 擁有最廣泛的庫支持,緊隨其後的是 GPU,而 FPGA 需要最多的手動實現。如果庫函數受多種體系結構支持,則執行屬性(例如要處理的數據量或數據局部性(要處理的數據所在的設備))決定要使用的最佳設備。

  • oneAPI DPC++ 庫 (oneDPL)(CPU、GPU 和 FPGA)

oneDPL 可以提高針對多個設備的並行應用程序的 SYCL 和 DPC++ 開發人員的工作效率。它提供並行 C++ 標準模板庫 (STL) 功能以及對其他並行算法、迭代器、基於範圍的 API、隨機數生成器、經過測試的標準 C++ API 等的訪問。oneDPL 支持 CPU、GPU 和 FPGA。

  • oneAPI 數學內核庫 (oneMKL)(CPU 和 GPU)

oneMKL 通過解決大型計算問題的數學例程提高性能。它提供 BLAS 和 LAPACK 線性代數例程、快速傅立葉變換、矢量化數學函數、隨機數生成函數和其他功能。目前,oneMKL 支持 CPU 和 GPU,但將來可能會添加額外的加速器支持。

  • oneAPI 線程構建塊 (oneTBB) (CPU)

oneTBB 是一個 C++ 模板庫,提供了指定 CPU 算法中邏輯並行性的功能,超出了 SYCL 中提供的功能。該庫可以與 SYCL 結合使用,在 CPU 和 GPU 之間分割代碼執行。

  • oneAPI 數據分析庫 (oneDAL)(CPU 和部分 GPU 支持)

oneDAL 通過為數據分析的所有階段(預處理、轉換、分析、建模、驗證和決策)以批處理、在線和分佈式計算處理模式提供高度優化的算法構建塊來幫助加速大數據分析。雖然 oneDAL 通常用於 CPU,但它提供了 SYCL API 擴展,使某些算法能夠使用 GPU。

  • oneAPI 深度神經網絡庫 (oneDNN)(CPU、GPU)

oneDNN 包括深度學習應用程序和框架的構建塊。模塊包括卷積、池化、LSTM、LRN、ReLU 等等。CPU 和 GPU 均支持該庫。

  • oneAPI 集體通信庫 (oneCCL)(CPU、GPU)

oneCCL 支持深度學習應用程序中發生的通信模式的優化原語。它使開發人員和研究人員能夠更快地訓練更新、更深的模型。

  • oneAPI 視頻處理庫 (oneVPL) (CPU)

oneVPL 是一個用於視頻解碼、編碼和處理以構建媒體管道的編程接口。目前,該庫支持在 CPU、GPU 和其他加速器上部署。

當前 oneAPI 庫支持摘要



概括

當今的計算系統是異構的,包括 CPU、GPU、FPGA 和其他加速器。不同的架構表現出不同的特徵,可以與特定的工作負載相匹配以獲得最佳性能。擁有多種類型的計算架構會導致不同的編程和優化需求。oneAPI 和 SYCL 提供了一種編程模型,無論是通過直接編程還是庫,都可以用來開發針對每種架構定制的軟件。

簡而言之:

  • GPU 架構是計算密度最高的。如果內核是數據並行的、簡單的並且需要大量計算,那麼它可能在 GPU 上運行得最好。
  • FPGA 架構的計算效率最高。雖然 FPGA 和生成的自定義計算管道可用於加速幾乎任何內核,但 FPGA 實現的空間性質意味著可用的 FPGA 資源可能受到限制。
  • CPU 架構是最靈活的,具有最廣泛的庫支持。現代 CPU 支持多種類型的並行性,並且可以有效地用來補充其他加速器。

Accelerate your Growth with Intel® Partner Alliance

★博文內容參考自 網站,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能

參考來源

Intel: https://www.intel.com/content/www/us/en/developer/tools/oneapi/overview.html#gs.4ypz89