這個問題非常好,我在高中學習物理時就想過這個問題。
因為高中物理力學有一類題目是電腦械做功效率,對於電機類裝置通常會以物體實際上升的距離乘以他的重量得到有效功,然後除以電機本身消耗的功率,就可以計算出一台電機的實際工作效率。
再來看看題主的題目
其實要回答題主這個問題,我們可以先探討另外一個問題: CPU 的做功效率究竟是多少?
換句話說, CPU 究竟做了哪些功,我們又實際需要 CPU 做的「總功」中的哪些「有效功」?
先來看一本非常著名的數位電路與電腦組成原理領域的科普書籍【 編碼:隱匿在電腦軟硬體背後的語言 】
我非常推薦所有對 CPU 或者數位電路感興趣的同學都應該去拜讀一下這本經典科普讀物, 在這本書中,作者用非常通俗易懂的方式告訴讀者——小算盤或者電腦究竟是如何在一瞬間得出計算結果 。
其實就是將我們通常用的十進制加法先使用「編碼」方式轉換到二進制,這樣方便使用電路的「接通」和「斷開」狀態來表示數位,然後接著只需要用畫真值表的方式找規律(就像小學數學找規律一樣)找出加法實際上是 「在二進制下做 XOR 異或運算和 AND 與運算」 這個規律,接著我們再同樣用「編碼」的逆運算,即「解碼」的方式把二進制轉換回到我們人類易懂的十進制表示法。這就是為何電子電腦可以極快地運算的原因。
好了,我們來整理一下思路,電腦做運算實際上有三個步驟——十進制編碼到二進制、XOR 異或和 AND 與運算,二進制解碼回十進制
這時候可能有人會說:電腦做運算好麻煩啊,居然要三個步驟,我小學背過 99 加法表,我只要一步就能得到結果。但是你別忘了,電訊號傳播是非常快的,電訊號在編碼解碼電路以及 XOR、AND 等門電路中是 以接近於光速的速度傳播 (實際速度受到電路中介質的影響,在電磁學中通常是透過關註介電常數以及導電面積和體積等方式來研究討論電子器件狀態的轉換速度),所以雖然電腦步驟多,但是它每一個步驟都可以做得比我們人類快。
好了,講完了加法器,在書中作者又描述了如何使用電磁繼電器和單刀單擲開關這種我們在初中就見過的實物來搭建一個簡易小算盤。因為這些物品相對於晶體管,積體電路芯片來說更加廉價易於獲得,更讓我們普通人感到親切。
好了,關於【編碼】這本書的內容就說道這裏。下面來討論題主的正題,CPU 在計算的過程中究竟將電能轉化成了什麽能,CPU 工作效率究竟應該如何計算呢?
我們先來看一個使用電磁繼電器組成的電腦,它的工作效率是什麽,它在計算又將電能轉換成了什麽能。
由於加法器中的 XOR 異或門用電磁繼電器搭建還是有點復雜,所以我打算用 AND 與門來分析
AND gate 又叫 與門,簡單來說就是當兩個輸入都同時為 1 時,輸出才為 1,否則就輸出 0。
在初中我們學過串聯電路,所以很容易想到只要將兩個電磁繼電器串聯,就能實作我們的目的。
電磁繼電器這個器件,實際上是透過給繞在圓柱筒上的線圈通電(也叫通電螺線管),然後會產生一個軸向的安培力(大學物理電磁學中的 Biot-Savart Law 必歐-薩伐爾定律會更進一步探討安培力的細節),這個力量其實是通電螺線管產生的磁場中的磁力,會吸引電磁繼電器上端的小鐵片往下運動,因此接通電路。
從以上的工作原理可以看出,電磁繼電器組成的電腦中,計算的本質就是電能轉換為磁場,磁場和鐵片互相吸引產生了機械能的傳遞,最終接通了電路,也就完成了一個 AND 邏輯的運算(這種運算叫做布爾邏輯運算,我們小學學過的四則運算在數位電路領域通常稱作算術運算)。
但是請註意這裏還有一些細節沒有討論到。
首先就是通電螺線管本身就是一些導線(嚴格來說是漆包線),漆包線的電阻其實並不小,根據初中學過的焦耳定律,電流流過電阻會發熱,因此這裏我們為了完成一個邏輯運算,還額外做了其他功,將一部份電能轉化成了內能(熱能)。
另外一個細節是: 這個電磁繼電器組成的小算盤的計算速度究竟是多少呢?換句話說,這個電磁繼電器的小鐵片每秒鐘可以上下擺動多少次? 因為我們討論計算速度時,本質上就是在討論 每秒鐘可以給這個電磁繼電器提供多少次不同的輸入,然後又得到多少次不同的輸出 。首先,作為一個中學生,我們可以想到的是鐵片本身是固定在某個轉軸上,這個轉軸並不是絕對光滑,而是會有一定的摩擦阻力,它限制了我們的電磁繼電器的狀態切換速度,並且摩擦本身還會發熱,這裏又無形中將一部份電能轉換出來的機械能又間接轉換成了內能。
但是當我們再長大一點,在大學學習了電磁學這門課,我們可能會學到一個知識叫做 RL 電路,R 是 Resistance 電阻,L 是 Lenz(為了紀念發現冷次定律的 Lenz 先生),因此我們通常稱電感為 L。RL 電路在電流方向發生改變的時候,根據冷次定律,會對電流產生阻礙,這裏不探討冷次定律的具體細節,我們只要知道有這麽一個定律的存在,導致通電螺線管裏面的電流無法快速變化就對了。
關於電磁繼電器的部份我們就講完了。但是電磁繼電器只是三大計算步驟的第二步
即「運算」步驟,一個小算盤只運算還沒用,它還得以某種方式將運算結果輸出給我們人類,讓我們人類可以理解或者容易讀取,這種方式有很多,例如我們可能會點量幾個白熾燈,但是白熾燈一是費電,二是白熾燈只能輸出發光和熄滅兩種狀態,也就是我們只能以二進制的方式去讀取計算結果。如果我們想直接讀取十進制的計算結果,可能有人會想到用數位管,它長下圖這個樣子,相信大部份人應該都見過吧
這些數位管本質上就是一系列的 LED 發光二極體組成,只不過他們按照一個阿拉伯數位 8 的方式排列,這是因為 8 這個方式排列,可以點亮其中任何或者全部的 LED 來顯示阿拉伯數位的 0 到 9。
所以電磁繼電器的小鐵片最終應該是要連線到這些數位管上,根據不同的數位點亮其中不同的 LED 發光二極體,這樣我們就能很容易地看出計算結果是多少了。 而我們最終希望看到的這個 LED 燈的顯示狀態,才是我們想要的算術結果,也就是說這個數位管中的 LED 燈消耗的電能以及轉換出來的光能才是我們真正需要的東西,它就是整個小算盤中的「有效功」,而那些線圈發出來的熱,鐵片擺動的機械能都並不是我們需要的效果,反而它們發出來的熱量會影響我們使用計算裝置的使用者體驗,例如手機發熱讓我們握持手機時感到難受,因此那些做功可以歸結為「無效功」。
總結一下,所有從電磁繼電器的線圈流過的電流和加在電磁繼電器線圈兩端的電壓做工其實都是「無效功」,而小鐵片兩端連線的那個燈泡,或者上述例子中的 8 位數位管做的功是「有效功」。
對應 BJT 三極管中,控制端也就是 Gate 柵極和 Source 源極之間做功也是「無效功」,受控端也就是 Drain 漏極和 Source 源極連到外面的輸出電路做功都是有效功。
對應 MOSFET 金氧半導體場效應晶體管中,控制端也就是 Base 基極和 Emit 發射極之間做功也是「無效功」,受控端也就是 Collect 集電極和 Emit 發射極連到外面的輸出電路做功都是有效功。
之所以說受控端上的裝置做功為有效功,是因為 我們目的就是讓 CPU 這個控制器控制輸出電路通電工作。例如我們需要用 CPU 接通一個電風扇工作,那麽我們希望的是 CPU 本身不消耗太多功率(甚至是完全不要消耗任何功率),但是風扇本身吹出來的風是我們需要的東西 。
但是這個世界不是完美的,無論是電磁繼電器,BJT 三極管,還是 MOSFET 金氧半導體場效應晶體管,它們的控制端不是理想的絕緣體,受控端也不是理想的超導體,Gate 和 Source 之間一定會有漏電流,Drain 和 Source 之間也一定會有電阻,這些稱作寄生參數,它們產生的能量損耗還遠大於高贊答案中提到的「蘭道爾原理」中修改一個 bit 需要的最低能量,這也是為什麽現在的 CPU 用起來那麽燙還那麽費電的原因。
好了,關於電磁繼電器與電磁繼電器式小算盤的故事講完了。我們已經徹底弄清楚了由電磁繼電器組成的小算盤在運算過程中究竟都做了哪些功,因此題主的問題
也就有了答案,在這裏,這個由電磁繼電器組成的「青春版 CPU」是 將電能轉換成了機械能進行運算,又轉換成了熱能釋放到了空氣中,最後解碼電路又將運算結果轉換成了光能顯示給了我們看 。這些光能以電磁放射線的方式發射到空氣中,也會以光子的形式打在我們的眼球上,最後由我們的大腦接受並且理解這個計算結果。並且我們還額外學習到了如何計算「電磁繼電器組成的小算盤」的工作效率。
但是故事還沒有講完,從電磁繼電器到電子管、BJT 三極管、MOSFET 互補金氧半導體場效應晶體管,再到我們現在的 ASIC 超大規模積體電路,這僅僅不超過半個世紀的時間,運算電路是如何快速演進,它們又是如何改變了我們的生活。我也許會在不久的將來繼續完成這方面內容的科普寫作,敬請期待。
最後再拋給各位一個小問題:電磁繼電器的工作效率還能繼續最佳化嗎?我們可以嘗試著挑戰一下電磁繼電器工作效率的極限!!
提示:
運算電路部份,我們只是需要電磁繼電器產生一個接通和斷開的操作,這個操作其實並不需要那麽長那麽大的通電螺線管和小鐵片,也許一個指甲蓋那麽大的小鐵片也能接通和斷開電路, 但是指甲蓋那麽大的小鐵片還是太大了,我們可不可以用一公釐,一微米,甚至一奈米的鐵片呢?我們知道世界上最小的物質是電子,更進一步,我們可以直接用世界上最小的物質來控制電流通斷,這樣就能極大降低需要驅動電路通斷而產生的電磁場強度,也就可以降低功耗。 後來的科學家按照這個思路發明了 BJT 晶體管和 MOSFET 場效應管,它們這些電子器件可以在微觀世界中透過電子這種極小的物質產生非常微弱的電場,來控制電路的通斷,達到用最少的功耗來控制電路的目的。
解碼電路部份,我們眼睛看數位管真的需要那麽大一只數位管嗎?也許一個指甲蓋那麽大的數位管我們也能看清嘛,畢竟我們還是初中生,並沒有老花眼,即使是很小的物體我們也能看清楚。即使我們想給家裏有老花眼的爺爺奶奶外公外婆炫耀一下自己做的「青春版 CPU」,我們也可以給他們配一副老花鏡或者放大鏡嘛。再更進一步,我們的數位管亮度其實也並不用非常亮,我們只需要讓它發出一丁點微弱的光芒,我們拉上窗簾蓋起被子也能看清的那種亮度就夠了。這可以為我們節約不少電能呢!可是發光二極體可以無限變暗嗎?好像並不可以,因為二極體內部的 PN 結必須要大於 0.7 V 才能夠導通,而要讓這個 PN 結發光,也必須要達到一定導通電流,如果用數位管或者 LED 並不能讓我們繼續挑戰低功耗小算盤的極限,我們可能需要更換其他能夠讀取計算結果的方式,例如我們可以使用超低功耗的液晶屏,E-lnk墨水屏等。 但是觀測運算結果的裝置消耗的功耗並不能無限降低,因為當輸出裝置的功耗降低了,意味著我們需要用更昂貴更先進的觀測手段來觀察這一非常微弱的狀態變化,這樣做得不償失,所以工程師需要在觀測裝置和輸出裝置之間尋找一個平衡。 目前看來像液晶屏這類輸出裝置就是比較平衡的做法,肉眼就能看清,因此對於觀測裝置的成本要去為 0,液晶屏要產生人眼能夠看清的亮度也不會消耗太多功耗,所以總得來說運算電路驅動液晶屏輸出運算結果是目前價效比最高的解決方案。
好了,提示已經給了這麽多,剩下的就靠各位發揮想象吧。
希望你們看完這些內容之後能對電子工程這個領域產生更多興趣,將來能利用這些科學技術為我們全人類帶來更加美好的生活!