發火箭和做遊戲有什麼共通點?

“We actually hire a lot of our best software engineers out of the gaming industry.” 

                                  --Elon Musk

 

馬斯克早年搞過遊戲,現在發火箭;卡馬克一直搞遊戲,業餘發火箭。美國火箭行業有很多來自遊戲行業的工程師,火箭是高科技,遊戲是"兒戲“,何故?

 

在微軟AAAA工作室 The Initiative 一個大佬的影響下,今年年初去面試/交流了一個洛杉磯的3D打印火箭公司,和技術總監(來自NASA)、首席軟件(寫當年了Falcon 9的系統)還一些組員(做Disney過山車的,和EE寫硬件的)都聊了聊,受到了不少啓發,這幾天賦閒在家總結一下,保密協議的就不說了(也沒啥大不了的,畢竟已經產業化了)。

 

概括起來,共通點有:

  • 計算機系統構架
    • 微軟Xbox360是PowerPC架構,同樣的架構也是SpaceX Falcon 9 引擎微處理器的架構。
    • 同期索尼PS3是自己獨特的CBE架構,由索尼、東芝、IBM共同研發,有多個類型的處理器和更細分的RAM規劃。也正是因爲如此,同期的PC要想達到類似的運行效果,往往價格會高出不少。原因在於前者的極致優化,而PC的通用性和強大計算能力,使得優化的必要性降低。
    • Xbox One和PS4以後,大家都採用了類似的X86架構,這也是當代火箭計算系統的構架
    • 火箭需要更可靠,所以多重冗餘是必須,因爲宇宙運行中會遇到一個bit被宇宙射線反轉,不能影響指令。而遊戲機可以出錯,大不了像Cyberpunk 2077一樣撂挑子不支持老機型。
  • 物理模擬和實時計算
    • 大型遊戲引擎,都需要強大的物理模擬和計算能力,在專門的線程甚至在Microservice,以某種更新頻率計算。這和火箭的物理模擬計算類似。
    • 隨着細化的物理模型引入,大型遊戲引擎的計算精度已經不斷提高,但重點還是計算“量”。而火箭在於計算精度和複雜的數理模型,比如對於質量求微積分,因爲箭體的質量隨着燃料消耗在減少,同時燃料在燃料箱裏的晃動會帶來物理屬性的變化,這些在遊戲中是很少考慮的。
  • Microservice應用構架
    • 網絡通信和模塊趨向於Microservice,這個是大型遊戲應用層構架,包括Google Stadia都在發力的方向,因爲可以on demand的進行請求和計算,同時分成一個個modular模塊,方便代碼的更新管理和維護。同樣的,火箭公司也在做類似的構架。
    • 跨進程通信(Inter process communication),如此的架構,意味着不同進程間的通信是家常便飯。
  • 編譯器
    • 火箭出於對準確性的需要,可以犧牲一些效率(因爲其本身的計算強度和作業任務不算太複雜,比起一個MMO遊戲),所以往往關閉編譯器優化。
    • 遊戲會針對自己特定的部署環境,去有選擇性的利用編譯器的便利
    • 火箭系統和遊戲系統都有針對自己系統的一套語言,用來方便二次開發和Runtime改寫,這一點在研發上編譯原理是100%共通的
  • 計算效率Performance
    • 這一點是Hacker們最引以爲豪的自己怎麼優化了、或者巧妙地繞過了多少運算,人類之光的存在。
  • 其他
    • 網絡安全性,數據加密
    • 數據壓縮,面對有限的帶寬
    • 控制器和微處理器,輸入輸出:機械操作,手柄、機械臂,LED燈、haptics、動力系統開合。
    • 操作系統,發火箭改寫更安全的linux kernal(linux也有bug),偏好單線程穩定性;遊戲,處理海量數據,可以有錯,儘量利用多核多線程。
    • 寫C++

總而言之, 遊戲的底層的東西和火箭的軟件系統,都是在一個資源有限的嵌入式系統進行輸入輸出和計算模擬。能夠讓各個功能模塊協同合作、高效運行,讓產品完成預期的任務是二者的共同目標。

所以,能夠造一個高效、價格合適的專一任務的主機,並且有很多應用在跑、很多從業人員開發和優化,距離民用火箭是一個逼近,至少。從側面可以反映一個國家的產學研能力吧。畢竟很多計算機科學的進步都是爲了解決實際問題發明的。

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