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 的問題 😀

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

Comments are closed.

隨便寫寫大家隨便看看的不出名小格子

舊文索引

站內管理