PDC 2008: Day 1, Parallel Computing

October 28th, 2008

現今的主流市場裡,CPU 單一核心的處理速度增加有限,而硬體大廠則致力於多核處理器的開發。多核處理器的強項在於平行處理,但它必須靠軟體的配合才能有效發揮效能。微軟在 Visual Studio 2010 中推出了不少東西來協助師程工們寫作多緒的程式,在 PDC 中自然要拿出來秀一下啦。

微軟建議的 best practice 非常值得借鏡。若要改進程式的執行效率,應該依循以下的步驟:

  1. 建立效能調校的目標,找出量測的方法。儘量使用真實的資料和直實的環境,平行處理並不是萬靈丹,真實世界中許多其他的因素才是效能的殺手 (如 I/O、memory latency)
  2. 量測現有的效能,找出執行熱點
  3. 想辦法調校現有的程式
  4. 若調校無效,找看看是否有平行處理的機會: CPU intensive,或是可以讓 UI 反應變快增加 perceptual performance
  5. 若可平行處理,則利用程式技巧去最佳化熱點

Visual Studio 的目標是想辦法讓寫作平行處理的程式變得容易一些,它提供許多基礎設施和函式庫 (如 Concurrent runtime, Parallel Pattern Library, PLINQ 等等),也提供許多 profiling 和 debugging 的工具 (我個人的偏見是這些工具和 VTune 好像!)。因此,師程工就可以集中精力在設計 synchronization 上,而不必到處尋尋覓覓好用的程式庫,或是花許多資源開發自己的程式庫。

微軟的 concurrent runtime 和 PPL 在某種程度上和 OpenMP 有重疊性,不過微軟上從 VP 下到師程工一律口風緊閉,不願意討論和 OpenMP 的未來有關的任何問題。此外,PPL 大量利用 C++0x 的 lambda expression,並刻意地將所有的東西做成 STL-like。不過呢,微軟自己也不知道這東西是否會被 C++0x committee 採納為標準,現場聽起來微軟也沒力 (或是沒動力) 去推這個東西就是了。

目前 PPL 最大的問題在於它目前是針對 stack object 來設計的,若用到 heap object,事情變得很複雜。雖然現場的 demo 中有用到 heap object,但程式庫並不能提供一般化的 heap object management,微軟也坦承他們正在研究中,但具體結果在 Visual Studio 2010 中應該是看不到了。我個人認為若用到 heap object 的話,大部份還是得靠師程工自己做 ref counting 和 object lifecycle management 比較實際,想要依賴程式庫來幫忙的話,那乾脆去寫 managed code 或 Java 算了,VM 直接幫你搞定所有 heap 的問題 :D

C++/C#, 技術文章, 會議相關 | Comments | Trackback Jump to the top of this page

Leave a Reply

  •  
  •  
  •  
  • Comments for this post will be closed on 26 January 2009.

    Powered by WP Hashcash

You can keep track of new comments to this post with the comments feed.

持續建構中的異想空間

舊文索引

站內管理