深入瞭解浮點運算——CPU 和 GPU 算力是如何計算的

隨着國家大力發展數字經濟,算力的提升和普惠變得越來越重要。在數字化時代,算力已成爲推動科技發展和創新的關鍵要素。它不僅僅是衡量計算機處理速度的標準,還涉及計算機系統或設備執行計算任務的能力、數據處理能力以及解決複雜計算問題的能力。那麼算力到底是什麼呢?

簡單瞭解算力

算力(Computational Power)在計算機科學和計算領域中是一個重要概念,它指的是計算機系統或設備執行數值計算和處理任務的能力。提升算力意味着可以更快地執行復雜的計算任務,從而提高計算的效率和性能。簡單來說,算力決定了計算機處理信息的速度和效率,直接影響我們使用電子設備的體驗,例如網頁加載速度和遊戲流暢度等。

在數字經濟時代,算力是新的生產力,爲加強數字政府建設、激活數據要素潛能以及實現各行各業的數字化轉型提供了動力。據中國信息通信研究所的測算,每投入1元的算力,可以帶動3至4元的經濟產出。算力的提升對經濟具有巨大的影響力。根據統計數據顯示,每提高一個算力指數點,可以帶動數字經濟增長 0.36% 和 GDP 增長 0.17%。

那算力大小具體是如何衡量的呢?這裏就必須提及浮點運算,接下來我們來了解下浮點運算這個概念。

什麼是浮點運算

算力最基本的計量單位是 FLOPS,英文 Floating-point Operations Per Second,即每秒執行的浮點運算次數。浮點運算其實就是帶小數的加減乘除運算。

舉個例子:1.1+2.2 就是典型的浮點運算,估計你已經心算出結果是 3.3 了。不過對計算機來說,這個問題並不簡單。我們知道,計算機是以 0 和 1 構成的二進制數字進行運算的,比如在基礎的二進制裏,1 就是 1,2 就變成了 “10”,3 是 “11”,這也帶來一個問題:計算機能夠處理的數字只有整數。其實,0.1 可以看成是1除以10的結果,我們想讓計算機計算一個帶小數點的數字,只要告訴 CPU 這是一個被 1 後面加了多少個 0 整除的整數就行了。這樣一來,計算機在處理小數點的時候,就多了好幾個運算步驟。浮點運算的速度也就成了衡量計算機性能的標準。

算力的計量單位,除了 FLOPS,從小到大還有:

  • KFLOPS(每秒1000次浮點運算,10^3)
  • MFLOPS(每秒1百萬次,10^6)
  • GFLOPS(每秒10億次,10^9)
  • TFLOPS(每秒1萬億次,10^12)
  • PFLOPS(每秒1000萬億次,10^15)
  • EFLOPS(每秒100億億次,10^18)

浮點數

浮點數的浮點就是指它的小數點的位置是可以是漂浮不定的。這怎麼理解呢?其實,浮點數是採用科學計數法的方式來表示的,例如十進制小數 1.234,用科學計數法表示,可以有多種方式:

1.234 = 1.234 * 10^0
1.234 = 12.34 * 10^-1
1.234 = 123.4 * 10^-2
...

用這種科學計數法的方式表示小數時,小數點的位置就變得漂浮不定了。使用同樣的規則,對於二進制數,我們也可以用科學計數法表示,也就是說把基數 10 換成 2 即可。那浮點數如何表示數字?其實浮點數是採用科學計數法來表示一個數字的,它的格式可以寫成這樣:

V = (-1)^S * M * R^E

其中各個變量的含義如下:

  • S:符號位,取值 0 或 1,決定一個數字的符號,0 表示正,1 表示負
  • M:尾數,用小數表示,例如前面所看到的 1.234 * 10^0,1.234 就是尾數
  • R:基數,表示十進制數 R 就是 10,表示二進制數 R 就是 2
  • E:指數,用整數表示,例如前面看到的 10^-1,-1 即是指數

如果我們要在計算機中,用浮點數表示一個數字,只需要確認這幾個變量即可。

舉個例子:將十進制數 0.125 轉換爲浮點數,我們可以使用二進制浮點數表示。

  1. 符號位(S):由於數字爲正數,所以 S = 0。
  2. 尾數(M):將小數部分轉換爲二進制。0.125 的二進制表示爲 0.001。
  3. 基數(R):對於二進制數,R = 2。
  4. 指數(E):確定指數的值。將 0.125 轉換爲科學計數法形式可得 0.125 = 1.0 * 2^-3。因此,指數 E = -3。
  5. 代入公式:V = (-1)^S * M * R^E

將以上值代入公式可得:

V = (-1)^0 * 0.001 * 2^-3 = 0.001 * 0.125

運算結果爲 0.000001。因此十進制數 0.125 在二進制浮點數表示下爲 0.000001。

計算機中使用有限的連續字節來保存浮點數,而 IEEE 754標準定義了三種常見的浮點數格式:單精度、雙精度和擴展雙精度,它們適用於不同的計算需求。一般來說,單精度適合一般計算,雙精度適合科學計算,擴展雙精度適合高精度計算。一個遵循 IEEE 754標準的系統必須支持單精度類型(強制類型),最好也支持雙精度類型(推薦類型),而擴展雙精度類型則是可選的。

單精度浮點數(FP32)

單精度浮點數格式(英語:single-precision floating-point format)是一種數據類型,在計算機存儲器中佔用 4 個字節(32 bits),利用 “浮點”(浮動小數點)的方法,可以表示一個範圍很大的數值。在 IEEE 754-2008 的定義中,32-bit base 2 格式被正式稱爲 binary32 格式。這種格式在 IEEE 754-1985 被定義爲 single,即單精度。需要注意的是,在更早的一些計算機系統中,也存在着其他 4 字節的浮點數格式。

第 1 位表示正負,中間 8 位表示指數,後 23 位儲存有效數位(有效數位是 24 位)。第一位的正負號 0 代表正,1 代表負。中間八位共可表示 2^8 = 256 個數,指數可以是二補碼;或 0 到 255,0 到 126 代表 -127 到 -1,127 代表零,128-255 代表 1-128。有效數位最左手邊的 1 並不會儲存,因爲它一定存在(二進制的第一個有效數字必定是1)。換言之,有效數位是 24 位,實際儲存 23 位。

舉個例子:要將十進制數 0.125 轉換爲單精度浮點數(32 位)。

遵循 IEEE 754 標準的表示方法,可以按照以下步驟進行轉換:

  1. 符號位(Sign):由於數字爲正數,所以符號位爲 0。
  2. 尾數(Fraction):將小數部分轉換爲二進制。0.125 的二進制表示爲 0.001。
  3. 指數(Exponent):指數的偏移量爲 127。由於 0.125 可以表示爲 1.0 × 2^(-3),指數爲 -3。加上偏移量後,實際指數爲 -3 + 127 = 124。將 124 轉換爲二進制得到 01111100。
  4. 組合位:將符號位、指數位和尾數位組合在一起,得到單精度浮點數的二進制表示。

最終的二進制表示爲:0 01111100 00100000000000000000000

雙精度浮點數(FP64)

雙精度浮點數(Double Precision Floating Point),也稱爲 FP64,是一種浮點數數據類型,用於在計算機中表示和進行高精度的浮點數運算。FP64 使用 64 個比特位(8 個字節)來表示一個浮點數,其中 1 位用於表示符號位(正負號),11 位用於表示指數,52 位用於表示尾數。

雙精度浮點數的表示形式同樣採用科學計數法,即 ±M × 2^E,其中 M 爲尾數,E 爲指數。通過使用更多的指數位和尾數位,FP64 相對於單精度浮點數能夠表示更廣範圍和更高精度的數值。

舉個例子:將十進制數 0.125 轉換爲雙精度浮點數(64位)。

遵循 IEEE 754 標準的表示方法,可以按照以下步驟進行轉換:

  1. 符號位(Sign):由於數字爲正數,所以符號位爲 0。
  2. 尾數(Fraction):將小數部分轉換爲二進制。0.125 的二進制表示爲 0.001。
  3. 指數(Exponent):指數的偏移量爲 1023。由於 0.125 可以表示爲 1.0 × 2^(-3),指數爲 -3。加上偏移量後,實際指數爲 -3 + 1023 = 1020。將 1020 轉換爲二進制得到 01111111100。
  4. 組合位:將符號位、指數位和尾數位組合在一起,得到雙精度浮點數的二進制表示。

最終的二進制表示爲:0 01111111100 0010000000000000000000000000000000000000000000000000

雙精度浮點數的取值範圍約爲 ±4.9 × 10^-324 到 ±1.8 × 10^308,並提供大約 15 到 16 位有效數字的精度。相比於單精度浮點數,雙精度浮點數能夠處理更大範圍的數值和提供更高的精度,適用於對精確性要求較高的計算任務。

雙精度浮點數常用於科學計算、工程應用、金融分析和高性能計算等領域。它在這些領域中被廣泛用於處理實數數據,如數值模擬、大規模計算、天文學、物理學和工程計算等。

然而,需要注意的是,雙精度浮點數的存儲空間和計算開銷相對於單精度浮點數更高。在某些情況下,如果對精度要求不高或者計算資源有限,可以考慮使用單精度浮點數進行計算,以提高計算效率和節省內存消耗。

浮點數的舍入

由於浮點數計算過程中丟失了精度,浮點運算的性質與數學運算有所不同。任何有效數上的運算結果,通常都存放在較長的寄存器中,當結果被放回浮點格式時,必須將多出來的比特丟棄。IEEE 標準列出 4 種不同的方法:

  • 舍入到最接近:舍入到最接近,在一樣接近的情況下偶數優先(Ties To Even,這是默認的舍入方式):會將結果舍入爲最接近且可以表示的值,但是當存在兩個數一樣接近的時候,則取其中的偶數(在二進制中是以0結尾的)。
  • 朝 +∞ 方向舍入:會將結果朝正無限大的方向舍入。
  • 朝 -∞ 方向舍入:會將結果朝負無限大的方向舍入。
  • 朝 0 方向舍入:會將結果朝 0 的方向舍入。

單、雙精度的應用場景

單精度浮點數通常應用在需要較高計算速度的場景,例如嵌入式系統和移動設備。在這些應用中,對於一些實時性要求較高的任務,如圖形渲染、音視頻處理等,單精度浮點數能夠提供足夠的精度,並且在存儲和計算上更加高效,能夠滿足實時性和資源限制的需求。此外,單精度浮點數也廣泛應用於科學研究和工程領域中的數值計算,包括求解方程、模擬物理過程等。在這些領域中,單精度浮點數的精度已經足夠滿足大部分的計算需求,同時可以提高計算速度和節省存儲空間。

雙精度浮點數主要應用於需要更高精度的場景,如科學計算、工程計算、金融分析等。在這些領域中,對計算結果的精確性要求較高,需要更多的有效數字來表示和處理實數。雙精度浮點數能夠提供更高的精度和更大的表示範圍,能夠處理更復雜和精細的計算任務。在科學計算中,如天文學、數值模擬等領域,雙精度浮點數常常用於求解複雜的數學模型和算法,以獲得更準確的結果。在金融分析中,雙精度浮點數可以處理更大的數值範圍和更高的精度,確保計算結果的準確性和可靠性。

總之,選擇單精度還是雙精度浮點數應根據具體應用的需求來決定,需要權衡計算速度、精度要求和資源限制等因素。單精度浮點數適用於對計算速度要求較高且精度要求不是特別嚴格的場景,而雙精度浮點數適用於對精度要求更高的科學計算和工程領域。

CPU 和 GPU 的算力計算

目前服務器的算力主要包括 CPU 和 GPU 等不同芯片產生的算力。那具體到每臺服務器的算力,究竟如何計算呢?

CPU 的算力計算

我們以 CPU 的雙精度浮點運算能力(FP64)爲例,單個 CPU 的算力,與 CPU 核心的個數、頻率、單時鐘週期浮點計算能力 3 個因素有關。

單 CPU 算力 = CPU 核數 * 單核主頻 * 單週期浮點計算能力

以 Intel Cascade Lake 架構的 Xeon Platinum 8280 爲例,該 CPU 具有 28 個核心,主頻爲 2.7GHz,並支持 AVX512 指令集。根據提供的信息,我們可以計算出該 CPU 的雙精度浮點運算能力(FP64)。

首先,計算單個 CPU 核心的單週期浮點計算能力:

單週期浮點計算能力 = 512bit * 2FMA * 2M/A / 64bit = 32 FLOPS/Cycle

然後,計算單個 CPU 核心的峯值浮點運算能力:

單個 CPU 核心的峯值浮點運算能力 = 單週期浮點計算能力 * 主頻 = 32 FLOPS/Cycle * 2.7 GHz

最後,計算整個 CPU 的峯值浮點運算能力:

單 CPU 算力 = CPU 核數 * 單個 CPU 核心的峯值浮點運算能力 = 28 cores * 單個CPU核心的峯值浮點運算能力

根據提供的數據,計算得到:

單個 CPU 核心的峯值浮點運算能力 = 32 FLOPS/Cycle * 2.7 GHz = 86.4 GFLOPS

單 CPU 算力 = 28 cores * 86.4 GFLOPS = 2.4192 TFLOPS

因此,以 Intel Cascade Lake 架構的 Xeon Platinum 8280 爲例,該 CPU 的理論峯值雙精度浮點性能爲 2.4192 TFLOPS。

注:該計算是理論值,實際性能可能受到多種因素(如指令級並行性、內存訪問延遲等)的影響。

GPU 的算力計算

GPU 的算力與上面的計算方法類似。單個 GPU 算力也是與核心個數、頻率、單時鐘週期能力 3 個因素有關。

以 NVIDIA Volta 架構的 V100 爲例,該 GPU 擁有 2560 個雙精度浮點核心(FP64 cores),主頻爲 1.530GHz。

根據提供的信息,我們可以計算出該 GPU 的雙精度浮點運算能力(FP64)。

首先,計算單個 GPU 核心的單週期浮點計算能力:

單週期浮點計算能力 = 64bit * 1FMA * 2M/A / 64bit = 2 FLOPS/Cycle

然後,計算單個 GPU 核心的峯值浮點運算能力:

單個 GPU 核心的峯值浮點運算能力 = 單週期浮點計算能力 * 主頻 = 2 FLOPS/Cycle * 1.530 GHz

最後,計算整個 GPU 的峯值浮點運算能力:

單 GPU 算力 = GPU 核數 * 單個 GPU 核心的峯值浮點運算能力 = 2560 cores * 單個 GPU 核心的峯值浮點運算能力

根據提供的數據,計算得到:

單個 GPU 核心的峯值浮點運算能力 = 2 FLOPS/Cycle * 1.530 GHz = 3.060 GFLOPS

單 GPU 算力 = 2560 cores * 3.060 GFLOPS = 7833 GFLOPS = 7.833 TFLOPS

因此,以 NVIDIA Volta 架構的 V100 爲例,該 GPU 的理論峯值雙精度浮點性能爲 7.833 TFLOPS。

注:該計算是理論值,實際性能可能受到多種因素(如內存帶寬、功耗限制等)的影響。

聊了這麼多,相信大家對 CPU、GPU 的算力計算和浮點運算都有了一定的瞭解,雖然看起來比較複雜,其實還是比較好理解的。大家也可以收藏下這篇內容,以備不時之需。

近期,又拍雲與厚德雲聯合推出了全新的 GPU 產品,新用戶註冊即可免費體驗 RTX4090 GPU。您可以通過一鍵搭建 CUDA、Stable Diffusio n等開發環境,輕鬆快捷地體驗強大的 GPU 算力,有興趣的同學點擊閱讀原文即可免費體驗 RTX4090 GPU

傳送門:

RTX4090 GPU免費體驗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章