當今最前衛的電腦以雙核心的處理器為主流,由於有兩個運算單元,所以能夠同時操縱兩個分開不同的工作。而且在2007年中,主要的兩家處理器製造商Intel與AMD又都會發表四核心的系統。雖然理論上多核心的處理器會比單核處理器的效率要更快,但利用多核處理器來開發軟體,也就是平行化的程式設計架構,其實是相當困難的一項工程。
《圖一 平行化的程式處理應用,是未來要面對的挑戰。(資料來源:ClipArt)》 |
|
麻省理工學院的研究
最近來自麻省理工學院(MIT)的研究顯示,有方法讓平行程式設計變得容易些,而且最後可以幫助個人電腦的處理效能,保持在一貫的基本運作上。研究人員已經提出一個新的運算架構,也就是結合專門的程式指令與修改功能來應付多核心的硬體系統,如此便能允許程式設計人員在開發軟體過程中,免除了撰寫一些冗長乏味的平行化程式處理細節。
從過去的發展歷史來看,為多核系統開發軟體是屬於超級電腦專家的工作,但時代已經走到了「個人超極電腦」的節骨眼,一般程式設計人員也必須要有在多核心電腦上開發軟體的心理準備。
MIT電子工程與電腦科學教授Krste Asanovic就說:「撰寫平行處理程式,真是一件可怕的事,不僅多數人都沒有這樣的經驗,而且做起來相當困難麻煩。」Asanovic和他的同僚正在著手對付其中的一項主要挑戰,即當程式人員試著在多核系統上開發軟體所必須面對的問題:在某種狀況上,必須協調多種任務到分開的處理核心去執行,而且不能因而造成系統當機。
當一個應用程式像是微軟Outlook或影音播放器之類要做平行化處理的時候,會有一定的工作被分攤到各處理核心之間。但是通常這些分別的任務需要再向一個可分享的cache memory中存取資料,然而當其中一個異動正在存取記憶體,另一項異動也需要去存取同一個區域的記憶體時,要有適當的防護來避免提出使用,否則就可能造成系統當機。這種狀況可以用一對夫妻但卻使用同一個支票帳戶來比擬,他們可能同時兌現一張支票,不慎兩張支票加起來又超出帳戶的餘額,結果當然會產生麻煩。
標準的平行處理程式需要程式人員預先考慮到這些同時間的運作,而且必須確保一定程度的作業能夠持續地存取記憶體來運行,所以要「鎖住」其它作業,直到這項異動完成。
如此以正確的方式來執行之後,鎖定的項目固然可以加快平行系統的處理,但要實行這些頻繁的異動還是相當複雜一件事。微軟的一位研究經理Jim Larus舉例解釋說,兩個不同的應用軟體可能同時都取得暫時「鎖住」的指令,而它們又得相互等待對方的作業;如果沒有第三者進來打破這個僵局(deadlock),Larus表示,那麼這兩個應用軟體就只有一直凍結在那裡了。
MIT研究人員為了避免這樣的狀況發生,於是使用了一種稱做「交換式記憶體(transactional memory)」的方法來解決,這項研究領域在過去五年已經有突破性的發展。透過交換式記憶體來協調軟體作業,使得程式設計人員不須要寫那些平行處理的控制碼在他們的程式中,實際上又能允許種種的異動可以同時分享相同的記憶空間。當一個異動完成時,系統會確認其它異動項目在記憶體中沒有受到改變,否則會妨礙到第一項異動的結果,假如其它記憶體中的異動有受到改變,那這些異動會被要求重新執行進來,直到作業成功為止。
然而交換式記憶體的運作,在某些狀況下還是不夠完美。Asanovic解釋說,因為大多數時候的異動項目資料都很小,而在硬體裡固定大小的記憶體足以快速地應付它們了,但是在某些時候有些異動需要比固定可用的記憶體更多的記憶空間,當這樣的狀況發生,系統也會當機。所以Asanovic建議可在硬體系統中增加小量的備用支援記憶體,以及在軟體中增加當異動資料溢量的辨識機制,交換式記憶體容量可以再擴增,以緩和之前的系統故障狀況。
軟硬體的矛盾
微軟研究經理Larus說,MIT研究人員使用的方法是依賴一種結合軟體與硬體來製作較佳的交換式記憶體,但也有很多種設計是只依靠軟體或硬體的架構來解決不同程度的問題。Larus表示,在使用硬體或軟體來解決之間,目前還不清楚那一種才是正確的方向,但MIT研究人員已著手處理在多核心系統的程式設計中,許多重要且未解決的議題。
事實上,包括Microsoft、AMD、Intel與一些大學像是MIT或史丹福,都有投入使多核心系統更容易撰寫程式的方法研究。除此之外,也著手改善交換式記憶體的效能,研究人員正在尋求針對平行處理程式更好的除錯方法,同時也會建立架構好的平行作業函式庫,讓程式設計人員可以直接外掛在他們的軟體中,而不須每次都要重新設置開發一遍。
依照目前狀況而言,因為少有真正的平行處理程式,所以雙核心的系統並不會受到太大的影響,不過四核心的系統就會受到很大的影響。因為主要的作業系統像是Windows與Mac OS X就能有效地分割應用軟體到雙核系統中運作,例如,掃毒軟體以隱藏的方式在背後利用一個核心處理,而像是MS Word或Photoshop也在另一個核心中執行,所以並不會妨礙它們各自的處理速度。
結論
不過當來到四核心、八核心,甚至是十六核心的狀況,應用軟體本身就需要做一些修改以獲取更高的效能。Asanovic說,交換式記憶體當然也不是一個又快又容易的完美方式,它只是讓程式在這些系統上的處理更簡單些,但是Asanovic期望此一方法能成為未來平行化運算模式的一種要件,因為它已呈現出一種相當有用的處理機制。