專訪:英特爾 oneAPI 和 Direct Parallel C++ 的承諾
已發表: 2022-03-11當您想到軟件開發時,英特爾並不是您想到的第一個名字,儘管它是地球上最具影響力和創新性的技術公司之一。 四十年前,英特爾的 8088 處理器幫助啟動了 PC 革命,如果您在台式機或筆記本電腦上閱讀本文,您很可能擁有 Intel Inside。 服務器和我們每天依賴的一系列其他硬件也是如此。 這並不是說 AMD 和其他供應商沒有競爭產品,因為它們有,但英特爾仍然主導著 x86 CPU 市場。
軟件工程師幾十年來一直在使用英特爾硬件平台,通常甚至沒有考慮其背後的軟件和固件。 如果他們需要更高的虛擬化性能,他們會選擇多核、超線程 Core i7 或 Xeon 產品。 對於本地數據庫修補,他們可以獲得英特爾 SSD。 但現在,英特爾也希望開發人員開始使用更多的軟件。
什麼是英特爾 oneAPI?
進入 oneAPI,它被英特爾吹捧為單一、統一的編程模型,旨在簡化跨不同硬件架構的開發:CPU、GPU、FPGA、AI 加速器等。 它們都具有非常不同的特性,並且擅長不同類型的操作。
英特爾現在致力於“軟件優先”戰略,並希望開發人員能夠注意到這一點。 oneAPI 背後的宏偉理念是讓一個平台能夠用於一系列不同的硬件,因此開發人員在為 CPU 和 GPU 編寫代碼時不必使用不同的語言、工具和庫。 使用 oneAPI,兩者的工具箱和代碼庫將是相同的。
為實現這一點,英特爾開發了 Data Parallel C++ (DPC++),作為通常用於為特定硬件(例如 GPU 或 FFPGA)編程的專有語言的開源替代方案。 這種新的編程語言應該提供 C++ 的生產力和熟悉度,同時包括一個用於跨不同硬件目標部署的編譯器。
數據並行 C++ 還結合了 Khronos Group 的 SYCL 以支持數據並行和異構編程。 英特爾目前提供對其 DevCloud 的免費訪問,允許軟件工程師在雲中試用他們的工具並修改 oneAPI 和 DPC++,而不會有太多麻煩。
但是等等,它會在其他供應商製造的硬件上工作嗎? 許可呢,它是免費的嗎? 是的,是的:oneAPI 設計為與硬件無關且開源,這不會改變。
要了解有關 oneAPI 的更多信息,我們與英特爾架構、圖形和軟件事業部副總裁兼英特爾技術、企業和雲計算總經理 Sanjiv M. Shah 討論了它的起源和未來。
Sanjiv:就 oneAPI 中的內容而言,我認為它分為四個部分。 一個是語言和標準庫,第二個是一套深度學習工具,第三個是真正的硬件抽象層和軟件驅動層,可以抽像出不同的加速器,第四個是一套專注於領域的庫,如Matlab等。 以上是 oneAPI 中的四類東西,但我們可以更深入地談談 oneAPI 的九個元素。 這九個元素基本上就是我們要介紹的稱為 Data Parallel C++ 的新語言及其標準庫。
有兩個學習庫,一個用於神經網絡,一個用於通信。 有我們稱之為零級的用於硬件抽象的庫,並且有四個以領域為中心的庫。 我們正在以一種非常、非常開放的方式來做這件事。 所有這些的規格都已經開放並可用。 我們稱它們為 0.5 版。 我們打算在 2020 年底之前推出 1.0,並且我們也有所有這些的開源實現。 同樣,我們的目標是讓人們能夠利用已有的東西。 如果硬件供應商想要實現這種語言,他們可以採用開源的並使用它運行。
問:關於算法和實現,它是如何工作的?
我們提供的是算法將使用的原語:底層數學原語和通信原語。 通常,算法創新發生在比這更高的水平上,他們並沒有真正重做基礎數學、矩陣數學、卷積數學等。 它是關於找出使用數學的新方法和使用通信模式的新方法。 我們的目標確實是讓我們提供原始的零級,以便其他人可以在它之上進行創新。
問:它在硬件層面是如何工作的?
如果您是硬件供應商,讓我們以 AI 矩陣為例,例如構建 AI ASIC 的人——該硬件供應商有兩種方法可以“插入”並利用 AI 生態系統。 一種是提供我們稱之為零級的低級硬件接口,如果他們使用標準 API 提供他們的零級版本,他們可以根據需要利用開源,然後是上面的所有軟件層可以自動利用它。
對於專注於細分市場的 ASIC 而言,這可能很難提供零級的全部通用性。 因此,作為替代方案,他們也可以只提供我們領域和深度學習庫中的數學內核和通信內核,然後我們將把這些庫“連接”到更高級別的框架中,所以他們會自動得到。
問:你提到你現在的版本是 0.5,完整的規範應該在 2020 年底之前準備好。
因此,我們的 oneAPI 計劃分為兩個部分。 一個是行業部分,一個是英特爾產品。 行業規格為 0.5,而在年中左右,我們希望達到 1.0。 與此同時,英特爾正在構建一系列產品,而英特爾正在構建的產品目前處於測試階段,它們實現了 0.5 規範。 到今年年底,我們希望推出 1.0 產品。
英特爾的產品超越了 oneAPI 的九個元素,因為除了我們提供的基本編程元素之外,我們還希望提供程序員真正需要的東西,例如調試器、分析器和兼容性工具,以便他們從現有語言遷移到數據並行 C++ 語言。
Q:開發商轉型有多難? 更廣泛的環境是否與他們多年來一直使用的環境相似?
是的,它非常相似。 讓我稍微描述一下 Data Parallel C++,因為這是我們所做工作的重要組成部分。 DPC++ 是三件事。 它建立在 ISO 國際標準 C++ 語言之上。 有一個名為 Khronos 的組織定義了名為 SYCL 的標準,SYCL 位於 C++ 之上。 我們採用 SYCL,然後在 SYCL 之上添加擴展。 我們構建數據並行 C++ 的方式,它實際上只是帶有擴展的 C++,這就是 SYCL。
任何 C++ 編譯器都可以編譯它。 DPC++ 的美妙之處在於任何編譯器都可以編譯它,只有知識淵博的編譯器可以利用該語言中的內容並生成加速器代碼。 我們使用這種語言的方式是非常非常公開的,所以我們所有關於 Data Parallel C++ 的討論都在 SYCL 委員會進行。 這些實現是開源的,所有的擴展都已經發布了,我們正在非常非常仔細地工作,以確保我們能夠順利進入未來的 SYCL 標準。 展望未來 5 到 10 年,ISO C++ 也是一條捷徑。
問:關於編譯器和遷移到 DPC++,學習曲線應該不是什麼大問題?
是的,當然,這取決於您從哪裡開始。 對於 C++ 程序員來說,學習曲線會非常小。 對於 C 程序員,您必須克服學習 C++ 的障礙,但僅此而已。 這是非常熟悉的 C++。 對於習慣使用 OpenCL 等語言的程序員來說,應該非常相似。

我必須強調的另一部分是我們正在使用 LLVM 基礎設施在開源中開展工作。 我們所有的源代碼都已經開放,有一個英特爾 GitHub 存儲庫,您可以在其中查看語言實現,甚至下載開源編譯器。 所有英特爾工具、我們的測試版產品也可供任何人免費使用和下載。 我們還有一個可用的開發者云,人們不需要下載或安裝任何東西,他們只需編寫代碼並開始使用我們討論過的所有工具。
問:C++ 是高性能且相對簡單的,但我們都知道它已經過時,開發緩慢,利益相關者太多,所以他們拖慢了一切。 這顯然不是 DPC++ 的情況。 你會有更快的迭代和更新嗎?
我認為你已經達到了對我們來說非常非常重要的一點,那就是快速發展,不會因標準而減慢。 因此,我們希望公開討論標準,因此有一種進入標準的方法,但我們也希望快速進行。
隨著架構的發展,語言在由用戶和實現者共同設計時效果最佳。 我們的目標是真正快速的迭代代碼設計,我們正在實踐事物,找到做事的最佳方法,並使它們成為標準。 所以,絕對地,快速迭代是一個大目標。
問:我的一些同事提出的一個問題(你可能理解他們對來自大公司的任何東西的開放性有些擔心):DPC++ 是否會一直對所有用戶和供應商開放?
絕對地! 該規範是通過知識共享許可完成的。 任何人都可以使用規範,如果他們願意,可以使用它並分叉它,然後發展它。 我想強調的是,並非 oneAPI 的所有元素都是開源的,但我們正在努力使幾乎所有元素都開源。 所有這一切,任何人都可以抓住和利用——它可用於實施。
英國以外的公司 Codeplay 宣布了 DPC++ 的 Nvidia 實施,我們真的鼓勵所有硬件供應商和軟件供應商進行他們的移植。 我們處於行業中的一個獨特點,加速器在多個供應商中變得普遍。 當歷史上發生這種情況時,當只有一個提供者時,他們的語言占主導地位。 軟件行業需要一個標準的解決方案和多個供應商。
我們在這裡嘗試做的是我們在大約兩年半前使用 OpenMP 所做的事情,其中有多種並行語言,但沒有一種真正占主導地位的語言。 我們採用了所有這些並將其統一為一個標準,25 年後的今天,它已成為 HPC 編程的方式。
問:說 DPC++ 將在未來幾年內發生大量演變是否正確? 那麼張量呢,新硬件的出現呢?
是的,絕對的,你是對的。 我們必須改進語言以支持即將推出的新硬件。 這就是更快迭代的目標。 我要強調的另一點是,我們正在設計 Data Parallel C++,以便您還可以根據需要插入特定於體系結構的擴展。
因此,雖然它是一種我們希望跨多種架構運行的標準語言,但我們也意識到有時,一個非常重要的受眾需要盡可能高的性能。 他們可能想深入到不一定是架構可移植的非常低級的編程。 我們正在構建擴展和機制,以便您可以擴展張量等,這將是特定於架構的。
問:開發人員可以對為硬件生成的代碼進行多少控制? 他們可以對系統和各種加速器之間的內存管理進行多少控制?
我們從 SYCL 中藉用了緩衝區的概念,它為用戶提供了非常明確的內存控制,但除此之外,我們還添加了統一內存的概念。 我們的目標是為程序員提供他們需要的控制級別,不僅僅是管理內存,還可以生成快速代碼。 我們在 SYCL 上添加的一些擴展是子組、縮減、管道等。 這將讓您為不同的架構生成更好的代碼。
問:一個有趣的點是用於 Python 的 oneAPI 發行版——英特爾特別列出了 NumPy、SciPy、SciKit Learn。 我對可以通過 oneAPI 解鎖的性能提升和生產力優勢感到好奇。 您對此有任何衡量標準嗎?
這是一個很好的問題。 我們正在支持該生態系統。 為什麼 Python 要使用加速器? 這是為了從其數學庫、分析庫中獲得性能。 我們正在做的是“管道”NumPy、SciPy、SciKit Learn 等,以便我們可以利用我們在其之上的庫獲得良好的性能。 NumPy、SciPy、SciKit Learn 等的默認實現,與使用優化的原生包正確探測的實現相比,可以看到非常非常大的收益。 我們已經看到了大約 200 倍、300 倍等的收益。
我們對 Python 的目標是,我們希望在一個合理的分數範圍內,在 2 倍之內,也許在 80% 的本機代碼性能範圍內。 當今最先進的技術是您經常達到 10 倍或更多。 我們希望通過管道所有高性能任務來真正彌合這一差距,這樣您就可以在 2 倍以內,而且實際上要高得多。
問:我們在談論什麼類型的硬件? 開發人員能否在普通工作站上釋放這種潛力,還是需要更強大的東西?
不,它會無處不在。 如果您考慮收益來自哪裡,那麼您就會明白。 普通的 Python 庫不使用 CPU 上的任何虛擬化功能。 他們沒有使用 CPU 上的任何多核功能。 它們沒有優化,內存系統和所有沒有優化的東西。 因此,它歸結為由天真的程序員編寫並由編譯器編譯而沒有任何優化的矩陣乘法,然後將其與專家用彙編代碼編寫的進行比較。 當您比較這兩者時,您可以看到多 100 倍的收益,而在 Python 世界中,本質上就是這樣。
Python 解釋器和標準庫是如此高級,以至於你最終得到的代碼變成了非常非常幼稚的代碼。 當您使用優化的庫正確地探索它時,您將獲得巨大的收益。 筆記本電腦已經有兩到六個或八個 CPU 內核,它們是多線程的,並且具有相當不錯的矢量化功能,也許是 256,也許是 512。因此,筆記本電腦和工作站中有很多性能。 當您將其擴展到 GPU 時,一旦您有可用的圖形,您就可以想像收益來自哪裡。
如果您查看我們的集成顯卡,它們也變得非常強大。 我相信你已經看過 Ice Lake Gen 11,它的集成顯卡明顯優於上一代。 即使在筆記本電腦上,您也可以看到好處來自哪裡。
問:DevCloud 可用性如何? 如果我沒記錯的話,它現在對所有人都是免費的,但是在你明年獲得金牌之後它會保持這種狀態嗎?
這是個好問題。 在這一點上,老實說,我不知道答案。 在這一點上,我們的意圖是讓它永遠免費。 這是為了開發,為了玩耍,那裡有很多馬力,所以人們實際上可以跑步。
問:那麼,如果我們請幾千名開發人員試一試,您不介意嗎?
哦,絕對不是。 我們希望這種情況發生!
我可以總結一下我們正在嘗試做的事情。 首先,我們對 oneAPI 感到非常非常興奮。 是時候推出多供應商解決方案了,因為現在市場上有多家供應商。 如果您查看我們的處理器產品線,而不僅僅是即將推出的 GPU、越來越強大的集成 GPU 以及我們的 FPGA 路線圖,現在是為所有這些建立標準的激動人心的時刻。 我們的目標是生產力、性能和行業基礎架構,以便您可以在此基礎上進行構建。
至於我談到的三個受眾,應用程序開發人員可以輕鬆地利用這些東西,因為它們已經可用。 硬件供應商可以利用軟件堆棧並插入新硬件,而工具和語言供應商可以輕鬆使用它。 英特爾無法構建世界上所有的語言和所有工具,因此它是一個開源基礎架構,其他人可以非常輕鬆地利用和構建它。