TopCoder開發大賽優勝者:僅爲興趣或展示自我參加競賽

原文地址:http://www.intel.com/cd/ids/developer/apac/zho/307726.htm

作者:Geoff Koch

我們必須承認,某些人具有與生俱來的編程天分。

Fred Batty 就是其中之一。

現供職於 Sun Java System Messaging Server 團隊的 Fred Batty 曾在 Sun Microsystems 公司工作達九年之久,他的大部分職業生涯一直用於編程方面。然而,僅在工作時間調試和維護消息存儲代碼遠遠不夠,因此,Batty 喜歡在下班時間通過參加競賽(如 TopCoder 網站上的競賽)來展示其編程天賦。

第一場競賽,要求採用線程技術來繪製虛擬無線網絡周圍數據包的最佳訪問路徑。Batty 對爲期兩週的主要賽況進行了跟蹤,並在 2 月 15 日截止日期前提交了他的算法。最終,Batty 的算法從 TopCoder 衆多方案中拔得頭籌。

通過代碼編寫和修改,Batty 得以對線程和並行有所瞭解,並形成了他自已的一套想法。Batty 在介紹他的獲獎算法時表示:"在使用線程時,重要一點是把不同線程間的同步和閉鎖限制在較小的時間幀內,使線程完全獨立地工作,並在餘下時間裏充分利用內存高速緩存的優勢。此外,儘可能改變每個線程處理的數據或算法以減少線程間冗餘操作也非常關鍵。"

Batty 對這次競賽產生了濃厚的興趣,他決定參加隨後一輪的 TopCoder 競賽。到 6 月 1 日分區競賽結束時,Batty 再次獲勝。在 TopCoder 網站上一篇關於 Batty 獲獎作品的文章中,Batty 表示:"通過在初始配置中添加一些隨機性的內容,使其能夠運行在全部八個內核之上,從而每個線程都有一個不同的解決方案,這使得我提交的解決方案得以實現線程操作。"

對於開始接觸線程的開發人員,Batty 有幾條建議。他建議那些希望實現 C++ 編程線程操作的人員,應首先充分理解互斥(mutex)和條件變量背後的邏輯概念,這要比單從硬件方面考慮重要的多。

Batty 認爲,在進行深入研究並開始設計多線程軟件時,第一步是從邏輯上以並行任務的形式分配工作,使其關聯性儘可能降低。這些任務應有足夠大的能力,從而並行性能帶來的性能優勢要大於同步所帶來的開銷(如刷新內存高速緩存,等等)。但是,這些任務並不一定必須是 CPU 密集型任務。在一次電子郵件採訪中,Batty 表示:"舉例來說,一個簡單的服務器設計有多個線程,每個線程都等待用戶的輸入。在這種情況下,一次僅有幾個線程處於活狀狀態,服務器在幾個甚至是一個 CPU 上,都能進行很好的工作。"

Batty 繼續說道,第二步需要考慮這些邏輯線程間的共享數據,以及在數據改變時需要發生哪些事件。然後,相應地創建互斥和條件變量。其它注意事項還包括:學會編寫線程安全庫代碼以及處理內存帶寬限制。

在兩度折桂之後,Batty 會去尋求其它方式來消磨業餘時間嗎?這種可能性可謂微乎其微。作爲 Sun 高級開發人員,Batty 極力避開管理事務而熱衷於技術工作。事實上,至少 5,000 美元的獎金僅是其吸引他投身此項事務的其中一個原因。另一項原因在於:Batty 認爲,和網絡中其它頂級編程人員一比高低,是一件更爲有趣的事情。

Batty 表示,"隨着個人電腦邁向多核世紀,線程很可能成爲程序員的一項基本技能。 參加競賽則是練習和學習這類技術問題的一種很好的方法。"

如欲瞭解更多信息,請參閱多線程競賽系列* 

位於密歇根州蘭辛市、從事有關科學和軟件寫作的前英特爾公司編輯 Geoff Koch,最近在另一項英特爾® 軟件網絡競賽——DARPA Grand Challenge 比賽中,描繪了英特爾所扮演的角色。如果希望與他取得聯繫,請發送電子郵件至 [email protected]

TopCoder 競賽有一定難度,擁有高超技藝者方能表現上乘。尤爲令人印象深刻的是,來到硅谷前曾在法國學習計算機科學的 Batty, 贏得了最近兩項賽事的桂冠。這兩項賽事由英特爾® 軟件網絡提供贊助,是在多核微處理器上進行 12 個月全球多線程競賽系列的一部分。
 

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