為什么GPU算力比CPU高?


作者:「已注銷」
鏈接:https://www.zhihu.com/question/20978963/answer/86818933
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

誰告訴你 CPU的浮點運算能力比GPU差了
CPU單個核心浮點運算能力比GPU強多了
在不考慮 指令集 緩存 優化的情況下 你光看主頻就知道了
GPU核心最高也就1Ghz左右
CPU核心卻要3-4Ghz
區別是CPU最多也就十幾個核心
GPU動輒幾百上千個核心

更別說CPU核心指令集更全面 GPU核心基本只有SIMD指令(因為GPU主要是用於圖形處理 向量運算遠比標量運算多 並且對CPU來說多一套指令運算單元 就是幾個核心的成本 對GPU來說就是多幾百上千個核心的成本)
CPU處理一次標量乘法只要一次標量乘法指令
GPU卻把標量先轉換成向量 然后用一條SIMD指令

CPU每個核心有獨立的緩存 GPU基本是所有核心共享一個緩存(GPU主要做圖形渲染 所有核心都執行同一份指令 獲取同樣的數據 CPU主要是執行多個串行任務 每個核心可以處理不同的任務 從不同地方獲取不同的數據)
所以CPU單核性能秒GPU單核十條街

CPU每個核心都有獨立的優化 分支預測 亂序執行之類的
GPU亂序執行可以有 因為所有核心都干一樣的事情 可以共享一份指令 不需要獨立的亂序執行 (不過一般不會有 因為這個功能可以直接放到編譯器中實現 因為GPU的開發語言少 基本只有GLSL和HLSL 編譯器是廠商自己開發的 不像CPU那樣 開發語言多如牛毛 各種編譯器五花八門 指令集大相徑庭 所以才迫切需求這種動態的亂序執行優化)
分支預測肯定不會有 成本上來說分支預測不能共享 每個核心都多一個分支預測的邏輯單元成本太大
關鍵是根本就不需要 GPU程序一般都很短 本來就可以全部裝載到高速緩存中 其次是對於GPU處理的任務而言 分支預測也無意義

GPU的強項是並行運算能力比CPU強(多個不同任務的並行運算GPU也無法勝任 GPU只適合處理單個可並行任務的並行運算) 而不是浮點運算能力強(這個謠言也不知道誰傳出來的 非要強調浮點運算 非要說浮點運算的話 不如說大多數老式GPU甚至沒有整數運算能力 因為根本沒有整數指令 最早設計目的是加速圖形渲染 基本都是浮點運算 所以GPU核心的SIMD指令 只有浮點指令 沒有整數指令 新型GPU因為不光光用於圖形渲染 還想推廣到通用計算 就是所謂的GPGPU 所以開始加入整數運算的支持)

GPU完全是為了並行運算設計的
只有可並行 無數據依賴的運算在GPU上才會快

舉個簡單的例子
CPU的核心就像一個心算高手 並且掌握各種奇技淫巧 一分鍾能算100次四則運算
GPU的核心就是一個普通人 一分鍾能算10次四則運算
但是 你讓10個心算高手合作算10000個四則運算 和 1000個普通人合作算10000個四則運算
你說誰完成的快?
當然是1000個普通人快
(10個心算高手每人算1000個要花10秒 1000個普通人每人算10個只要1秒)

但是如果這10000個四則運算有依賴 就是下一題的條件依賴於上一題的結果
你說誰算的快?
當然是心算高手快 因為一旦有這種強依賴 就只能串行 10個人干和1000個人干並不會比1個人干來得快
(1個心算高手只要花100秒 1個普通人要花1000秒)

還要打個比方的話
一個四核CPU就像4台高級數控機床
一個GPU就像一個全自動流水線

一個全自動流水線 如果你只讓他生產一個東西 絕對不會比一台高級數控機床快
它要成批生產 才會快
全自動流水線它只能同時成批生產一種東西
高級數控機床 什么都能生產 並且4台可以同時生產不同的東西

並且流水線上能做的東西 高級數控機床肯定能做
但是反過來 流水線上就不一定能做了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM