在科學(xué)計算領(lǐng)域,關(guān)于并行編程的討論集中于如何自定義算法以有效利用硬件。以下幾個與高性能系統(tǒng)有關(guān)的因素使討論趨于白熱化:多核和超多核系統(tǒng)的引入、全局處理單元(GPU)等可編程設(shè)備的出現(xiàn)、現(xiàn)成商用(COTS)計算機集群的日益普及。
直至最近,尚無商業(yè)高級工具可以支持針對高性能系統(tǒng)的科學(xué)計算應(yīng)用程序的開發(fā)。并行編程是一門深奧的技術(shù),只有那些旨在通過利用自定義設(shè)置和低級庫以及通過為特定硬件調(diào)優(yōu)應(yīng)用程序,來實現(xiàn)最高性能的專家才會應(yīng)用。在 2007 年的一份簡報中,IDC 強調(diào)了擴展到多個節(jié)點的難度,原因在于缺乏恰當?shù)木幊汰h(huán)境。1如今,高性能系統(tǒng)日益普及,因而急需使這些系統(tǒng)在整體上更具可編程性。
為此,并行編程解決方案的關(guān)注焦點必須超越自定義算法和性能。并行編程工具的生態(tài)系統(tǒng)正在得以發(fā)展。它們協(xié)助工程師設(shè)計、開發(fā)和調(diào)試并行應(yīng)用程序,以及充分利用快速發(fā)展演變的硬件的能力。為了取得成功,這些在過去幾年中已經(jīng)成熟了很多的新生態(tài)系統(tǒng)需要:
* 擴展開發(fā)串行應(yīng)用程序時所用標準工具的功能性,以支持并行編程
* 支持應(yīng)用程序的可伸縮性,從簡單的多核桌面到復(fù)雜的集群和網(wǎng)格配置,無需修改應(yīng)用程序代碼
* 提供健壯的集成開發(fā)環(huán)境(IDE)
* 以批處理和交互式模式執(zhí)行應(yīng)用程序
語言支持
在選擇編程語言時,適當?shù)牟⑿芯幊讨С质且豁楆P(guān)鍵考慮事項。這種支持的具體范圍可能有所不同,從微妙的隱式支持到極為顯式的語言構(gòu)造。隱式方法包括由系統(tǒng)推動的自動并行化,無需修改現(xiàn)有程序。顯式方法要求用戶聲明程序,使該程序以并行方式運行。隱式并行化依然是一個活躍的研究領(lǐng)域,當前尚無全面的解決方案,因而在可以預(yù)見的未來,一定程度的語言顯性是必不可少的。2 理想情況下,語言應(yīng)直接支持高級并行語言構(gòu)造,用戶只需進行最少的編程聲明即可獲得最優(yōu)的性能。
傳統(tǒng)并行編程解決方案主要關(guān)注顯式方法,這種方法通常使用消息傳遞接口(MPI)命令。MPI 是并行程序中點對點通信的行業(yè)標準協(xié)議。使用 MPI 要求程序員處理低級語言構(gòu)造,這是一個巨大的障礙。
某些軟件企業(yè)正著手應(yīng)對并行編程支持的需求。例如,. NET Framework 的 Microsoft Parallel Extensions 為使用任何 .NET 語言編寫的應(yīng)用程序提供了并發(fā)語言構(gòu)造。這些構(gòu)造抽象了較低層面的編程細節(jié)。
MathWorks并行計算工具允許用戶跨隱式/顯式范疇編程。例如,編寫計算密集型應(yīng)用程序的 MATLAB 用戶可能將 FOR 循環(huán)聲明為 PARFOR 循環(huán)。在單處理器系統(tǒng)中執(zhí)行時,PARFOR 循環(huán)的行為與傳統(tǒng)的 FOR 循環(huán)完全相同。但在多核機器或集群上執(zhí)行時,PARFOR 將透明、有效地利用如今可用的其他計算資源。此外,編寫數(shù)據(jù)密集型應(yīng)用程序的用戶可將數(shù)組聲明為分布式數(shù)組,跨多個內(nèi)核或處理器分配。分布式數(shù)組使用戶能夠開發(fā)并行應(yīng)用程序,而無需自行關(guān)注消息傳遞的低層細節(jié)。在理想的隱式編程中,并行化的應(yīng)用程序無需修改任何代碼。MathWorks 正在為此理想而努力,逐漸在工具包中為并行計算添加直接支持,不再需要修改使用這些工具的應(yīng)用程序。
可伸縮性
配有多核處理器的桌面計算機和 以GPU為基礎(chǔ)的通用計算(即GPGPU,如 NVIDIA出品的 CUDA Toolkit)已經(jīng)問世。而為此類系統(tǒng)編程往往需要在單獨一臺機器上使用線程模型,許多用戶需要超越單獨一臺機器的能力,擴展到計算機集群。此時就需要基于進程的模型。用戶應(yīng)用程序無需關(guān)注線程或進程,而是應(yīng)該盡可能有效地運行。無論如何,可伸縮性仍然是一個有待解決的難題。3
在某些情況下,用戶需要在具有可變?nèi)萘康馁Y源上運行應(yīng)用程序。可變資源的示例之一就是 Amazon Elastic Compute Cloud (EC2),它使用戶能夠完全控制在 Amazon 的計算環(huán)境中運行的資源。這種方法的障礙包括安裝的困難性以及在外部系統(tǒng)上運行時對知識產(chǎn)權(quán)的掌控不足。
程序員需要工具來使之能夠無縫地將應(yīng)用程序從桌面擴展到集群和網(wǎng)格,同時無需修改代碼。MathWorks 并行計算工具提供的配置框架就是為并行應(yīng)用程序解決可伸縮性問題的典范之一。配置框架允許用戶維護指定的設(shè)置,例如調(diào)度程序類型和集群使用策略。因而,用戶只需輕松更改配置名即可在硬件資源間切換。
集成開發(fā)環(huán)境(IDE)
IDE 需要支持基于處理器和基于線程的解決方案,同時協(xié)助新手和經(jīng)驗豐富的程序員開發(fā)應(yīng)用程序。具體來說,IDE 使程序員能夠調(diào)試處理大型數(shù)據(jù)集并且在桌面計算機或大型集群上運行的并行應(yīng)用程序。
Microsoft 在其 Visual Studio開發(fā)系統(tǒng)中做出了很多努力以應(yīng)對此需求。Visual Studio 2005 可執(zhí)行并行應(yīng)用程序,其調(diào)試器支持進程級和線程級斷點與步進。而另外一種產(chǎn)品——由 TotalView Technologies 提供的 TotalView Debugger 支持多種平臺和編程語言,它能夠擴展到數(shù)千線程或進程,并提供了探索大型和復(fù)雜數(shù)據(jù)集的工具。
批處理和交互式執(zhí)行模式
工具應(yīng)支持批處理和交互式工作流。如果能夠以交互的方式開發(fā)并行應(yīng)用程序,程序員的工作效率將大幅度提高。然而,大多數(shù)高性能計算(HPC)中心都支持批處理工作流,用戶編寫應(yīng)用程序、將其提交到集群以便處理,并等待結(jié)果。其他一些解決方案則基于 Web,如來自 Purdue University 的 nanoHUB.org 以及 Sun Microsystems 提供的 network.com,它們關(guān)注以交互式方法隨需應(yīng)變地訪問計算資源。
MathWorks 并行計算工具同時為兩類工作流提供支持。它們擴展了 MATLAB,允許程序員使用熟悉的 MATLAB 環(huán)境,以交互的方式開發(fā)并行應(yīng)用程序。程序員還可使用批處理環(huán)境,這為他們提供了脫機執(zhí)行模式。
結(jié)束語
總而言之,并行應(yīng)用程序開發(fā)中最關(guān)鍵的需求就是語言構(gòu)造、可伸縮特性、開發(fā)環(huán)境和工作流模式。某些廠商提供的解決方案允許科學(xué)計算用戶更有效地為并行系統(tǒng)構(gòu)建應(yīng)用程序,就如同構(gòu)建傳統(tǒng)串行程序一樣。無論如何,理想工具生態(tài)系統(tǒng)中依然存在空白。諸如效用計算和網(wǎng)格可用性等正在展現(xiàn)出來的趨勢會為這一迅速變化的領(lǐng)域帶來更多更復(fù)雜的需求。
[1] Earl Joseph, Jie Wu and Steve Conway, “IDC HPC Breakfast Briefing,” International Supercomputing Conference, Germany, June 2007.
[2] Roy Lurie, “Language Design for an Uncertain Hardware Future,” HPCwire, September 2007.
[3] Cleve Moler, “Parallel MATLAB: Multiple Processors and Multiple Cores,” The MathWorks News and Notes, June 2007.
評論