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