產品經理軟體轉硬體的痛|在硬體產業是怎麼補齊相關知識的?

某一年我轉職去做SSD的PM,但在「投遞履歷」之前,我已經先研究SSD上面的所有元件的用途,以及這當中最重要的控制晶片分別是哪幾家在做,差別是什麼。

產品經理不止限於軟體領域,硬體領域也有這樣的職位,尤其在台灣這種硬體製造出名的環境下,我們有著許多知名的硬體產品,像是主機板、顯示卡、電源供應器等等。

而我當初是怎麼轉職為SSD產品經理的呢?

how i became a hardware product manager

簡單講就是熱愛你的產品

什麼叫熱愛?真的花錢下去研究吧!不會裝電腦嗎?那就自己試著去組裝一台電腦,瞭解整台電腦是怎麼運作的,把這些零組件的用途一一搞清楚之後,再找出你覺得最有興趣的零組件。

當初,我最有興趣的是GPU,所以一直在鑽研GPU的每一個區塊的功能在做什麼、為什麼3D圖片需要這樣的區塊功能等等….,總言之,我對於速度很快的零組件,非常有興趣,有興趣到被找去NV總部聽黃爸爸介紹最新一代的GPU,信手捻來就可以寫出一篇Radeon HD 5870這樣的文章,直接和ATI的副總裁 David Wang 直接對談新世代的GPU對於DirectX 的支援度等等……。

科普一下:當初AMD買了ATI,所以,現在AMD公司才會有賣處理器,也有賣顯示卡。

NVIDIA Headquarters
黃爸爸和現在差不多年輕呢。
NVIDIA GPU G71
當時是發表G71核心,現在當了爸爸之後就沒機會玩電腦了,什麼核心都不如小孩的開心。

而後來我對於速度也很快的零組件「SSD」也開始有了興趣,就會想要瞭解,為什麼SSD可以比傳統的HDD還要快上那麼多。

這一段的重點,不是要你買電腦裝起來而已,而是在使用電腦的過程中,可以找到自己喜歡什麼,以及不喜歡什麼,例如,我就很不喜歡水冷散熱器,因為我真的很怕這個東西就在我的電腦主機裡漏水了。

收集情報,上論壇看

在哪裏收到硬體的相關資訊?其實就是在各大論壇當中。你需要用心且花上大量的時間去看每一則討論,看看這些玩家們對於硬體零組件有什麼想法、遇到什麼問題,他們最期待什麼。

尤其是把一些硬體規格搞清楚之後,自己可以試著發文幫助這些網友們,例如,當初我就經常去解說SSD以下的問題:

  • SATA、M.2 SATA、M.2 PCIe、NVMe的差異
  • SLC、MLC、TLC、QLC的差異
  • Trim原理、Controller各家差異在哪裡

然後解釋久了,很多答案你就會瞭然於胸,久了就變成肌肉記憶般的反應,而且只要有新的硬體規格推出,你還可以馬上就知道與現有的硬體規格差別在哪裡。

要怎麼變的更強呢?讀書看論文

從一開始在預算可接受的情況下,買回來自己測試這些硬體,讓自己切身感受這幾款SSD的差別,接著每天在網路爬文,但此時你的程度,大概就和「一般」玩家差不多。

那麼,你要怎麼更深入去瞭解這些硬體呢?我的方式是到碩博士論文網找出你能看懂的論文,因為論文才能有效提升你的知識深度和實力,我甚至於當時可以憑空畫出SSD上所有零組件的流程圖,從頭到尾,一筆資料怎麼寫入、怎麼被讀取出來。

在當時,我就是用這種方式成功轉職為一位SSD產品經理。不過,那時候也沒有考慮到「萬一沒有面試機會怎麼辦」,我滿腦子只有「要把這個東西讀到懂、徹底理解它」的念頭而已。

然後直到轉職為SSD PM之後,這些知識,會幫助你瞭解這些元件的成本、規格適合什麼市場、什麼人群、以及對手的產品狀況。

以上一點小經驗,分享給各位。

對了,你也想找我履歷健檢嗎?歡迎先參考這篇「履歷健檢|履歷到底該怎麼寫?」文章,或是加LINE OA與我討論哦!請掃下方QR Code或在LINE搜尋「 @pagerank 」。

產品先生的LINE。

補充資訊:Radeon HD 5870的文章片段

Tessellation的崛起
打從ATI 協助 Microsoft進行Xbox 360的開發之後,往後的ATI繪圖核心對於Tessellation這個功能就有極大的專注力,一般人所瞭解的,不外乎就是Tessellation是 ATI從2002年開始發展的一項3D繪圖技術,它可將一般的物體「自動」細分出更多的多邊形,一旦3D物體擁有高度複雜的多邊形,就可以有著更加精細的外表,因此,Tessellation在「自動」產生這些多邊形之後,設計師就再也不必事前畫出那麼精細的外觀,還大大減少等待計算時間、以及電腦運行3D物體的延遲。

但是,Tessellation 就是這般簡單而已嗎?讓我們從DirectX 11的流程說起。當Vertex Shader執行完畢,隨後進入Tessellation流程,在這流程當中分別有著:Hull Shader、Tessellation、Domain Shader。

從Vertex Shader所計算完畢的頂點資料,進入了Hull Shader,此時它將會分成兩部分一同運作,分別是Control Point Phase與Patch Constant Phase。在Control Point Phase功能的部分,它可以以相當隱匿的方式來改變物體表面,例如原本四四方方的正方體,將其中的一點往外拉出,那麼,原本直線的角度就會被「連動」影響產生了「曲線」,就像是繪圖軟體中的bezier patch一樣,所以Control Point Phase就是用來控制「點」的,就好像Control Point Phase可以改變一顆圓球的控制點,讓它變成了刺蝟一樣,而最尖端的部分就是被控制的「點」。

另一個Patch Constant Phase,則是負責設定Tessellation所需要的「鑲嵌級數」,而且在每一次的輸入原始資料時,Patch Constant Phase就會進行一次運作。也就是說,有點類似一個三角形裡,再畫出數個三角形,然後依照「鑲嵌級數」來決定要畫出多少個三角形。

在Hull Shader已經調整完畢「控制點」與「鑲嵌級數」之後,Tessellation就會接手開始在原始輸入資料上「自動」新增頂點,那麼要新增多少呢?就如同上段所說,在設定完畢鑲嵌級數之後,控制點就會開始產生頂點出來,就好像「Domain Parametrization」圖片一樣,當你想要繪畫出一顆圓形球體時,可以只要先繪製出「圖片最下方」的多邊形,經由Hull Shader與Tessellation的生成之後,就可以變為「圖片左上角」的大量多邊形,但是,別弄錯囉!到目前為止還不算完成整個Tessellation 的流程,最終要形成一球體還需要經過Domain Shader的資料轉換(圖片中的圓球體)。

來到Domain Shader之後,它會評估每一個頂點的表面,然後再利用Hull Shader裡的Control Point來轉換資料產生新的頂點(在這裡之前都是平面資料,所謂的轉換,則是平面資料轉為「空間」裡的頂點)。在這裡除了可以使用先前提的 bezier patch之外,還可以在Domain Shader裡進行Displacement Mapping(位移貼圖),讓「頂點」可以以法向量的方法進行位移,使得在遊戲當中觀看地形或物體表面更為真實。

而以上,就是依靠兩個可程式化的Shader(Hull Shader、Domain shader)與一個固定管線(Tessellation)的簡單介紹。而且,就筆者個人的看法,此功能表現最佳的應該會是ATI,因為ATI做的早,而且已經相當清楚整個的Tessellation流程,再加上旗下所有的產品早有大規模的支援DirectX 10,所以ATI應該會是表現較佳的一方(除非它的Triangle生成速度太慢)。


LOD將會十分需要這功能
Tessellation有哪些特點?

1.這是一種極為簡單的3D呈現方式。
2.在原始的資料上,最多可以鑲嵌到64級。
3.極具效率的生成高細緻度模型的方式。
4.這是由「硬體」所計算的。

那麼,有了這些特點,我們要在那裡可以運用的到Tessellation?難道只有山啊~怪物啊~其實啊,這個功能最大的受益者,就是大量採用LOD特效的遊戲。LOD是指Level of Detail,也就是說當一個物體在很遠的時候,就可以使用較少的多邊形來簡化該物體外觀,因此,在遊戲當中你所看到的遠方高山,只不過是利用很少量的多邊形來表現,但是,如果今天這座高山往你眼前飛來,那麼它的多邊形就會開始增加,這種以物體遠近來判斷需要的多邊數量是一種有效平衡性能的方式。

但是使用LOD 時,顯示卡得要隨時更改3D場景中的物體多邊形,一旦核心與記憶體稍有延遲,那麼大概就可以看到物體的表面會「怪怪的」了,但是若有了 Tessellation 之後,LOD的多邊形可以「自動」生成,而不必重新載入資料到核心與記憶體當中,這樣不需要資料不斷的搬移將會減少掉大量的時間。


Multi Threading功能初現
這個功能是指支援多核心處理器,不是顯示卡的繪圖核心。直到目前為止的DirectX 10.1都還是屬於「Single Thread」的產物,而現在看到支援多核心的遊戲,都是遊戲廠商想辦法給做出來的,例如,物理計算、AI等功能都是從遊戲中「抽出來」給處理器執行。

我們打個比方,在一片森林當中有塊大石頭在地上,那麼,這時候可能就需要有幾個指令,A是要求畫出這個畫面上所有的頂點,B則是要貼上這些頂點需要的貼圖材質,由於載入頂點速度較快、但是貼圖需要一點時間,所以可能會看到3D場景的貼圖會怪怪的,那就是因為A、B兩個指令的Thread在「同一顆處理器核心裡排隊」。

這是因為當一個場景需要畫出很多三角形時,就要下指令給繪圖核心去做,但是,這些下指令的動作都是需要花費處理器的執行時間,像是森林裡的石頭與樹木,你很難用同一個指令去執行,因為這兩物體的貼圖都不一樣,但是來到DirectX 11之後,就可以看到貨真價實的Multi Threading功能了。若以最簡單的方式來說,就是把不同的指令分派到不同的核心上,讓這些指令「幾乎」有同時計算的效果。也就是說,A、B兩個指可以放在不同的核心上,等A這個Thread執行完成後,B這個Thread早已準備下指給繪圖核心去做B指令裡頭的事情了。

因此,DirectX 11指的Multi Threading功能並不是講繪圖核心可以多工,而是說在「指令」方面可以變的更有執行效率。

在這裡我們可以再多談一些,在DirectX 10或是更早之前,它們的Command Queue就是以照順序來執行的,例如下指令a、b、c時,一定是先把a執行「完畢」,才會開始進行b、c。這是因為在執行之前,得要先建立 Immediate Context,而且這個時候要先指定它是Single thread 或是Multi thread,如果是Single thread,那麼同時只夠有一個Thread去使用這個Immediate Context,所以Single thread情況來說,a、b、c指令一塊下,所以是不能同時執行的,但是,就算你在建立Immediate Context的時候是採用Multi thread的格式,但a、b、c指令的三個Thread還是對到同一個Immediate Context去,所以會變成無效,因為這個Immediate Context會被Lock住,等到前一個Thread用完,下一個Thread才能使用。

但是來到DirectX 11時,可以採用Deferred Queue的方式,讓指令們可以變成「無關聯」,像是讓a、b、c指令裡的a與b沒有關聯,那麼就可以同時執行。因為DirectX 11可以建立Deferred Context,讓Thread (a)存取Immediate Context,而Thread(b)可以存取Deferred Context,那麼Thread(b)就可以下指令,等下完畢之後,才進入Immediate Context,所以這一些下指令所產生的Overhead就可以被不同的處理器核心去分擔。所以,你如果有八核心處理器,那麼就可以執行八個 Thread(a、b、c、d、e、f、g、h),而這八個Thread都會有自己的Deferred Context,而它最後都會連結到Immediate Context去。因此,再重申一次Multi Threading功能指的是在處理器上頭進行,與繪圖核心是沒有關聯的。
返回頂端