計算機體系結構是一種低級的複雜工作嗎 ?
體系結構設計是一項工程性很強,需要大量經驗的工作,需要廣泛掌握編譯器,微體系機構和電路設計的知識。當然,硬體設計的最終目的是更有效地運行軟體,所以應用程序和演算法的了解也是體系結構設計的前提。
如果只是設計一個可以工作的晶元,不考慮性能,並不難,連本人也曾經花兩個月就寫了一個多線程5級流水線CPU的RTL模型。但如果追求性能,就不那麼容易了。這裡面涉及到很多複雜的模型,幾乎處理器中每個模塊在不同的權衡下都有不同的模型。另外,設計參數非常多,很難找到最優解,往往是選定了一組參數,對一些應用程序性能有提升,對另外一些有下降,到處存在權衡。我不以為這樣的工作算作低級。
說起來數學模型,我覺得統一的模型到目前是沒有的,但是其實際上在設計中不自覺地會用到數學理論。一個小例子就是,演算法中的哈希表的思想被應用到cache設計中。還有一個親身經驗就是,我在讀碩士的時候選過中科院軟體所范植華教授的一門並行處理的課,理論性非常強,有一部分重點研究數據依賴性問題。我認為這裡面的思想大部分都可以在流水線設計中看到。那本書的鏈接:http://product.dangdang.com/23545122.html。可能這裡面沒有使用大量像數值分析或者泛函分許那麼高深的數學,但至少像多目標優化還是常用的。我想,能解決問題是目標,理論越簡單才是越好的吧。
計算機體系結構是一件低級的複雜工作嗎?
我所說的體系結構方面的工作,主要指指令集設計,cache設計,匯流排等方面的工作。毫無疑問它們是非常複雜、困難的,而且從事此類工作的人通常都非常聰明。可我感覺這些工作缺少理論背景。象信號處理,涉及到微積分、泛函、線性代數等基礎理論,做起來比較有味道。那些計算機的事情好像只是許多腦筋急轉彎的集合,雖然複雜困難,但是層次不高。做演算法的時候可以經常回到數學上找找依靠,感覺背靠大樹,而且解決完問題後經常有對某概念的認識得到提升的感覺。現在做架構,問題十分繁難,但沒啥理論依靠,解決完問題後腦子裡沒留下什麼東西。
請大家幫助我提高認識,謝謝。
推薦閱讀:
※6/7 演算法題詳解:Evaluate RPN Expressions 如何求逆波蘭表達式(RPN)的值
※100 個數,如何遍歷得到所有全排列?
※『一道很難的智力題』解法
※我有一個1*n的格子帶,上面有n個單位格子,需要把其中m個格子染上色。我現在有三種演算法,哪種符合要求?
※這套神奇的演算法,比網易雲音樂更懂你