欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

Mpi源代碼程序到基于mpi線程的程序的自動轉(zhuǎn)換的制作方法

文檔序號:6605563閱讀:236來源:國知局
專利名稱:Mpi源代碼程序到基于mpi線程的程序的自動轉(zhuǎn)換的制作方法
技術(shù)領(lǐng)域
本公開總體上涉及將在消息傳遞基礎(chǔ)結(jié)構(gòu)中運行的計算機程序的自動轉(zhuǎn)換。
背景技術(shù)
許多計算問題可以被細分為獨立的或松散依賴的任務(wù),這些任務(wù)可以分布在一組 處理器或系統(tǒng)中并且可以并行地執(zhí)行。該技術(shù)通常允許比在由單個處理器或系統(tǒng)執(zhí)行所有 任務(wù)時更快地解決主要問題。有時,處理時間可以與在子任務(wù)上工作的處理器或系統(tǒng)的數(shù) 量成比例地降低。除了當需要與其它任務(wù)交換數(shù)據(jù)時,每個進程可以獨立地計算??梢愿鶕?jù)需要,通過在協(xié)作的處理器和系統(tǒng)之間發(fā)送消息來協(xié)調(diào)所述處理器和系 統(tǒng)。消息還可以用于分發(fā)工作以及收集結(jié)果。對問題的一些劃分和分解會極大地需要消息 傳遞基礎(chǔ)結(jié)構(gòu),或者通過發(fā)送和接收大量的消息,或者通過在消息內(nèi)傳輸大量的數(shù)據(jù)??梢詫⑾⑼ㄟ^許多不同的通信信道或“結(jié)構(gòu)(fabric) ”從一個進程傳輸?shù)搅硪?個進程。例如,在同一物理機器上執(zhí)行的進程能夠使用多處理器機器上的共享存儲器或點 對點處理器互連有效地進行通信。在不同機器上的進程可以通過高速網(wǎng)絡(luò)進行通信,例如 InfiniBand (InfiniBand 貿(mào)易協(xié)會的注冊商標)、Myrinet (Myricom 公司(Arcadia, California)的注冊商標)、可縮放相干接口(“SCI”)、或由Quadrics有限公司(Bristol, United Kingdom)提供的QSNet。這些網(wǎng)絡(luò)可以提供自然操作模式(native operational mode)以及仿真模式(emulation mode),自然操作模式暴露可從結(jié)構(gòu)獲得的所有特征,仿真 模式允許由遺留軟件(legacy software)使用網(wǎng)絡(luò)。進程還可以經(jīng)由傳統(tǒng)網(wǎng)絡(luò)(例如以太 網(wǎng))來通信??梢远x一組標準的消息傳遞函數(shù),并且可以提供庫以在每種類型的結(jié)構(gòu)上執(zhí)行 標準函數(shù)。消息傳遞接口( “MPI”)是定義基本應(yīng)用編程接口(API)的工業(yè)標準,用于在 消息傳遞方面對分布式存儲器和共享存儲器系統(tǒng)進行編程。由MPI論壇的成員定義了 MPI 標準(參見 MPI :"A Message-Passing Interface Standard"(2. 1 版,消息傳遞接口論壇, 2008 年 6 月 23 日),其可從 xwwwx. mpi-forum, org/docs/ 獲得,其中,在 URL 中用"xwwwx" 替換了“www”以避免從該文檔內(nèi)的有效鏈接)。MPI (或類似的)庫可以提供在一個或多個 結(jié)構(gòu)上的標準函數(shù)。在進程內(nèi)的多個線程有時用于共享資源,例如存儲器,這具有以下優(yōu)點線程不需 要使用消息傳遞機制來進行通信。線程在利用多處理器系統(tǒng)中的不同處理器核心方面特別 有用。多處理器系統(tǒng)中的操作系統(tǒng)可以在運行于不同處理器核心上的線程之間分配任務(wù), 并且可以利用對于線程可行的數(shù)據(jù)共享,所述線程運行在公共地址空間內(nèi),并且在多處理器環(huán)境內(nèi)有處理器互連可用。但是,在MPI環(huán)境中,在一個進程內(nèi)的多個線程需要遵循特定的實現(xiàn)技術(shù)。在MPI 標準下,每個MPI進程通常被映射到唯一的操作系統(tǒng)進程。進程的地址空間僅可以由另一 個進程通過調(diào)用MPI庫函數(shù)來訪問。如在MPI-2規(guī)范的12. 4節(jié)“MPI和線程”中所指出的, 在進程內(nèi)的每個線程可以發(fā)出MPI調(diào)用;但是,線程不是獨立可尋址的,因為在發(fā)送或接收 調(diào)用中的參數(shù)識別進程而不是線程。發(fā)送到一進程的消息可以由該進程中的任何線程接 收。進程具有多線程的事實不影響進程的外部接口。為了遵守MPI標準,如在MPI-2規(guī)范的12. 4節(jié)“MPI和線程”中所規(guī)定的,適應(yīng)線程 的實現(xiàn)必須確保所有MPI調(diào)用是線程安全的并且阻塞MPI調(diào)用僅阻塞調(diào)用線程,允許其它 線程執(zhí)行,如果有的話。但是,為了滿足該標準,需要使用例如允許一次僅由一個線程進行 訪問的互斥原語(primitive)來保護由發(fā)出MPI調(diào)用的線程使用的靜態(tài)和全局變量。適應(yīng) 線程的實現(xiàn)通常需要由程序員使用例如Posix線程這樣的技術(shù)或根據(jù)混合的MPI/OpenMP 標準來寫源代碼程序。這些復雜的編程模式(programing paradigm)增加了程序復雜性, 并且會降低整體的程序性能。這種實現(xiàn)將抵銷使用線程的多個優(yōu)點中的一個優(yōu)點,線程可 以使用靜態(tài)和全局變量進行通信,而沒有通過共享存儲器機制發(fā)送消息的開銷。


圖1示出了在使用共享存儲器段的MPI基礎(chǔ)結(jié)構(gòu)中運行的進程之間的數(shù)據(jù)傳輸。圖2說明了根據(jù)本發(fā)明的一個實施例的、在轉(zhuǎn)換為線程的進程之間的數(shù)據(jù)傳輸。圖3是示出了根據(jù)本發(fā)明的一個實施例的、MPI源代碼程序到基于MPI線程的程 序的轉(zhuǎn)換器的操作的流程圖。圖4是根據(jù)本發(fā)明的一個實施例的、圖3的轉(zhuǎn)換器的操作的流程圖。圖5是描述了一個適當?shù)臄?shù)據(jù)處理環(huán)境的框圖,其中,可以實現(xiàn)本發(fā)明的示例性 實施例的某些方面。
具體實施例方式本發(fā)明的實施例包括用于將MPI源代碼程序自動地轉(zhuǎn)換為基于MPI線程的程序 (MPI thread-based program)的方案?;贛PI線程的程序可用在不損害利用其它MPI功 能的能力的情況下,利用線程的更快的數(shù)據(jù)傳輸能力。此外,通過將非線程化的MPI程序自 動地轉(zhuǎn)換為基于MPI線程的程序,可以在程序員不參與的情況下,自動地轉(zhuǎn)換在此之前不 能利用多處理器環(huán)境的許多遺留的MPI程序。該自動轉(zhuǎn)換可以使得公司能夠自動地并且便 宜地將它們的MPI源代碼程序庫存移植到多處理器環(huán)境。響應(yīng)于MPI源代碼程序形式的輸入和命令,轉(zhuǎn)換器將所述MPI源代碼程序的全局 變量聲明為線程私有變量,以創(chuàng)建用于第一線程的第一私有變量和用于第二線程的第二私 有變量。識別用于支持在基于MPI線程的程序的執(zhí)行期間將進程轉(zhuǎn)換為線程的庫,并且使 用所述識別的庫建立所述基于MPI線程的程序的可執(zhí)行版本。所述識別的庫可以包括用于 以下操作的代碼當基于MPI線程的程序執(zhí)行時識別新進程的實例化,并且作為響應(yīng),使得 用于基于MPI線程的程序的對應(yīng)線程被實例化??梢酝ㄟ^將與全局變量相對應(yīng)的線程的相 應(yīng)私有變量的內(nèi)容直接提供給其它線程,從而將數(shù)據(jù)從一個線程傳輸?shù)搅硪粋€線程。該數(shù)據(jù)傳輸不使用共享存儲器段在線程之間傳輸所述數(shù)據(jù)。圖1示出了在使用共享存儲器段的MPI基礎(chǔ)結(jié)構(gòu)中運行的進程之間的數(shù)據(jù)傳輸。 在通常的實現(xiàn)中,MPI程序?qū)嵗莻€進程0到n-1,在圖1中顯示為進程110、120和130。 這些進程中的每一個具有其各自的地址空間,進程110具有進程地址空間112,進程120具 有進程地址空間122,并且進程130具有進程地址空間132。為了將數(shù)據(jù)102從進程110傳 輸?shù)竭M程120,必須由進程110將數(shù)據(jù)102從進程地址空間112傳輸?shù)焦蚕泶鎯ζ鞫?40, 然后必須由進程120將數(shù)據(jù)102從共享存儲器段140復制到進程地址空間122。這種數(shù)據(jù) 傳輸操作需要兩個存儲器復制操作。共享存儲器段140在進程之間被共享,并且可以是更大的主存儲器的一部分,由 不同進程對該部分的訪問被協(xié)調(diào)??梢允褂眠M程間通信來控制對共享存儲器140的訪問, 其中,一個進程在隨機存取存儲器中創(chuàng)建其它進程可以訪問的區(qū)域;或者可以通過使用虛 擬存儲器映射,將對通常是一段數(shù)據(jù)的多個副本的訪問指引到單個實例來控制對共享存儲 器140的訪問??梢杂衫绮僮飨到y(tǒng)和/或虛擬化軟件這樣的資源來提供對共享存儲器 140的協(xié)調(diào)的訪問。圖2示出了根據(jù)本發(fā)明的一個實施例的、在轉(zhuǎn)換為線程的進程之間的數(shù)據(jù)傳輸。η 個進程0到n-1被實例化為公共進程地址空間250內(nèi)的線程0到n-1。線程210、220和230 中的每一個具有各自的一組私有變量,其中,線程210具有私有變量212,線程220具有私有 變量222,線程230具有私有變量232。為了完成將數(shù)據(jù)102從線程210傳輸?shù)骄€程220, 可以將數(shù)據(jù)102從私有變量212內(nèi)的地址直接傳輸?shù)剿接凶兞?22內(nèi)的地址??梢灾苯拥?來執(zhí)行該數(shù)據(jù)傳輸,而不是間接地通過共享存儲器段(例如圖1的共享存儲器段140)來進 行,這是因為在公共進程地址空間250內(nèi)的地址由線程210、220和230共享。執(zhí)行直接傳 輸而不是需要兩個復制操作直接增加了程序的性能。圖3是示出了根據(jù)本發(fā)明的一個實施例的、MPI源代碼程序到可執(zhí)行的基于MPI 線程的程序的轉(zhuǎn)換器的操作的流程圖。轉(zhuǎn)換器360將MPI源代碼程序362和命令364作為 輸入,并且提供可執(zhí)行的基于MPI線程的程序366作為輸出。命令364可以是例如到轉(zhuǎn)換 器360的、將基于MPI源代碼的程序編譯為基于MPI線程的程序的命令。例如,假設(shè)用如 l^miilffllSif^^lSifillft石馬禾呈:test. c $ mpicc-o test_mpi_process test, c。 在響應(yīng)于該命令編譯完test, c之后,輸出程序test_mpi_pr0cess將作為基于進程的傳統(tǒng) MPI應(yīng)用來執(zhí)行。相反,用類似于如下形式的命令調(diào)用本發(fā)明的轉(zhuǎn)換器以編譯源代碼程序 test, c$ mpicc-mpi_on_threads-o test_test—mpi thread test, c。命令中的 _mpi_on_ threads這一部分將命令提供給編譯器以產(chǎn)生輸出程序teSt_mpi_thread作為可執(zhí)行的基 于MPI線程的程序。響應(yīng)于命令364,轉(zhuǎn)換器360將MPI源代碼程序的全局變量聲明為線程私有變量, 以創(chuàng)建用于第一線程的第一私有變量和用于第二線程的第二私有變量。如本文所使用的, 術(shù)語“全局變量”用于描述在進程內(nèi)具有全局范圍的變量,例如被聲明為全局或靜態(tài)變量的 變量。當基于MPI線程的程序366被執(zhí)行時,可以通過將與全局變量相對應(yīng)的線程的相應(yīng) 私有變量的內(nèi)容直接提供給其它線程,將數(shù)據(jù)從一個線程傳輸?shù)搅硪粋€線程。這種數(shù)據(jù)傳 輸不使用共享存儲器段在線程之間傳輸數(shù)據(jù)。基于MPI線程的程序366可以在不損害利用 其它MPI功能的能力的情況下,利用線程的更快的數(shù)據(jù)傳輸能力。
圖4是根據(jù)本發(fā)明的一個實施例的、圖3的轉(zhuǎn)換器的操作的流程圖。如上所述,轉(zhuǎn) 換器360接收MPI源代碼程序362和命令364作為輸入。處理在“響應(yīng)于將MPI源代碼程 序轉(zhuǎn)換為基于MPI線程的程序的命令,檢查MPI源代碼以發(fā)現(xiàn)指示問題代碼的狀況”的步 驟410處開始。在該步驟中,轉(zhuǎn)換器360檢查MPI源代碼程序362,以發(fā)現(xiàn)當將MPI進程轉(zhuǎn) 換為線程時有問題的多個不同狀況。例如,通常用于建立MPI應(yīng)用程序的一些語言(例如, Fortran和C)提供了可能不會被在進程內(nèi)運行的線程正確處理的存儲器管理特征。例如在 Fortran中,在Fortran源代碼程序的不同組件或子例程之間,在空白公共塊中的數(shù)據(jù)在大 小和格式(layout)方面可以改變。在空白公共塊中的數(shù)據(jù)是在MPI進程內(nèi)運行的線程之 間共享的一種類型的全局變量。如果每個進程被轉(zhuǎn)換為具有其自己版本的空白公共塊的線 程,則不同的組件之間的這種不同大小和格式可能不會被貫徹到每個組件。因為Fortran 編譯器通常獨立地編譯每個組件或子例程,所以轉(zhuǎn)換器360需要檢查MPI源代碼以發(fā)現(xiàn)所 有組件或子例程,以識別這種問題代碼。為了識別這種特征,轉(zhuǎn)換器360檢查MPI源代碼程序以發(fā)現(xiàn)以下狀況其中,當由 MPI源代碼程序的第一組件訪問時,在空白公共塊中的數(shù)據(jù)具有第一大小,當由MPI源代碼 程序的第二組件訪問時,在空白公共塊中的數(shù)據(jù)具有第二大小,其中,所述第一大小和第二 大小不同。在發(fā)現(xiàn)這種狀況后,轉(zhuǎn)換器360會將這種代碼識別為對于到基于線程的實現(xiàn)的 轉(zhuǎn)換是有問題的。轉(zhuǎn)換器360還可以檢查MPI源代碼程序以發(fā)現(xiàn)以下狀況其中,當由MPI 源代碼程序的第一組件訪問時,在空白公共塊中的數(shù)據(jù)具有第一格式,并且當由MPI源代 碼程序的第二組件訪問時,在空白公共塊中的數(shù)據(jù)具有第二格式,其中,所述第一格式和第 二格式不同。在發(fā)現(xiàn)這種狀況時,轉(zhuǎn)換器360會將這種代碼識別為對于到基于線程的實現(xiàn) 的轉(zhuǎn)換是有問題的。轉(zhuǎn)換器360搜索的其它類型的問題代碼包括將數(shù)據(jù)從組件的一個實例保存到組 件的下一實例中的代碼。例如,F(xiàn)ortran提供了如下特征其中,組件可以擁有如下所述的 變量,即,不管是否在同一線程內(nèi)對組件進行實例化,所述變量都將它們的值從組件的一個 實例保留到下一個實例。為了發(fā)現(xiàn)這種特征,轉(zhuǎn)換器360檢查MPI源代碼程序,以發(fā)現(xiàn)MPI 源代碼程序的具有如下變量的組件,所述變量將來自該組件的第一實例的值保留到該組件 的第二實例。在發(fā)現(xiàn)這種狀況后,轉(zhuǎn)換器360會將這種代碼識別為對于到基于線程的實現(xiàn) 的轉(zhuǎn)換是有問題的。轉(zhuǎn)換器360搜索的其它類型的問題代碼包括依賴于處理器的狀態(tài)或其控制字 (control word)的代碼。例如,如果程序的結(jié)果依賴于利用處理器的不同設(shè)置而工作的不 同的MPI進程,那么如下所述的代碼可能無法正確地轉(zhuǎn)換為基于線程的實現(xiàn),所述代碼依 賴于在特定狀態(tài)中操作、或者以特定控制字操作以處理浮點操作的處理器。在發(fā)現(xiàn)這種狀 況后,轉(zhuǎn)換器360會將這種代碼識別為對于到基于線程的實現(xiàn)的轉(zhuǎn)換是有問題的。響應(yīng)于發(fā)現(xiàn)了指示問題代碼的狀況,轉(zhuǎn)換器360進行到“指示問題代碼的狀況?,, 決定點420的“是”分支,其中,所述問題代碼針對到基于線程的實現(xiàn)的轉(zhuǎn)換??刂七M行到 “拒絕轉(zhuǎn)換MPI源代碼程序的命令并且正常地生成MPI源代碼程序的目標代碼”步驟425。 響應(yīng)于發(fā)現(xiàn)所述狀況,轉(zhuǎn)換MPI源代碼程序的命令被拒絕,并且正常地生成MPI源代碼程序 的目標代碼。在另一個實施例中,不是生成MPI源代碼程序的目標代碼,而是轉(zhuǎn)換器360可 以拒絕轉(zhuǎn)換MPI源代碼程序的命令,并且在不產(chǎn)生MPI源代碼程序的可執(zhí)行版本的情況下終止。響應(yīng)于未發(fā)現(xiàn)指示了問題代碼的狀況,轉(zhuǎn)換器360進行到“指示了問題代碼的狀 況?,,決定點420的“否”分支??刂七M行到“生成目標代碼以將MPI源代碼程序的全局變 量聲明為線程私有變量”步驟430。在該步驟,轉(zhuǎn)換器360生成目標代碼以將MPI源代碼程 序的每一個全局變量聲明為線程私有變量。這種聲明的結(jié)果是將為在公共父進程地址空 間內(nèi)的每一個線程創(chuàng)建單獨的私有變量,類似于圖2的公共進程地址空間250內(nèi)的線程私 有變量212、222和232。為了確保線程私有變量是有效的,應(yīng)當由轉(zhuǎn)換器360所產(chǎn)生的基于 MPI線程的程序中的對應(yīng)的線程來實例化由MPI源代碼程序來實例化的每一個進程。為了確保當執(zhí)行基于MPI線程的程序時,線程而不是MPI進程被實例化,必須使用 合適的庫以建立基于MPI線程的程序的可執(zhí)行版本。因此,控制從“生成目標代碼以將MPI 源程序的全局變量聲明為線程私有變量”步驟430進行到“識別合適的庫以建立可執(zhí)行代 碼”步驟440。例如,用于建立基于MPI線程的程序的可執(zhí)行版本的每一個庫應(yīng)當支持多線 程。通過使用多線程系統(tǒng)庫,操作系統(tǒng)可以利用多核處理器內(nèi)的多個核心來實例化不同線 程,以執(zhí)行任務(wù),由此加速了基于MPI線程的程序的執(zhí)行。還預見到,正確地處理基于MPI線程的程序可能需要使用特定的庫以使得能夠?qū)?MPI進程轉(zhuǎn)換為線程。這些庫可以包括用于使得特定功能將在初始化MPI進程或在建立 MPI執(zhí)行環(huán)境時被調(diào)用的代碼。例如,在庫內(nèi)的代碼可以用于在基于MPI線程的程序的執(zhí)行 期間識別新進程的實例化。響應(yīng)于識別到新進程的實例化,所述庫可以調(diào)用代碼以使得用 于基于MPI線程的程序的對應(yīng)線程被實例化。新進程的實例化可以被識別為響應(yīng)于MPI_ Init命令而發(fā)生,該命令產(chǎn)生MPI進程。代替產(chǎn)生一新的MPI進程,針對MPI_Init命令的 代碼可以實例化一線程。然后,該線程可以執(zhí)行本應(yīng)由原始的MPI源代碼程序中的正被初 始化的MPI進程執(zhí)行的功能。或者可以響應(yīng)于MPI_Init命令,或者可以更早地在建立MPI執(zhí)行環(huán)境時,來創(chuàng)建 替代MPI進程執(zhí)行MPI功能的線程。例如,mpiexec命令可以用于初始化MPI執(zhí)行環(huán)境,并 且響應(yīng)于mpiexec命令可以實例化許多線程。在線程被實例化之后,當調(diào)用MPI_Init以實 例化新進程時,針對MPI_Init命令的代碼可以映射已經(jīng)存在的線程中的一個線程以代替 MPI進程執(zhí)行功能。在MPI進程的基于線程的實現(xiàn)中可能有問題的另一個類型的狀況是文件輸入/輸 出(I/O)。當不同的進程讀和寫公共文件時,通常操作系統(tǒng)的文件系統(tǒng)組件處理文件I/O的 協(xié)調(diào),以確保由不同進程進行的操作的正確排序。如果這些進程被轉(zhuǎn)換為線程,則由不同線 程對訪問文件I/O單元或句柄的嘗試應(yīng)當被當做它們在應(yīng)用層與不同的文件有關(guān)來處理。 可能需要來自合適的庫的支持,以處理文件I/O的協(xié)調(diào)。這種庫可以包括例如用于以下操 作的代碼識別由第一線程對第一文件的訪問,使得第一線程通過第一文件句柄來訪問第 一文件,識別由第二線程對第一文件的訪問,并且使得第二線程通過第二文件句柄訪問第 一文件,其中,所述第二文件句柄不同于所述第一文件句柄。在問題代碼被識別并且MPI源代碼程序的目標代碼被正常地生成的情況下,控制 從“拒絕轉(zhuǎn)換MPI源代碼程序的命令并且正常地生成MPI源代碼程序的目標代碼”步驟425 進行到“識別合適的庫以建立可執(zhí)行代碼”步驟440。在該情況下,將被使用的庫不需要具 有多線程的能力,而應(yīng)當是為建立MPI源代碼程序的可執(zhí)行版本而正常需要的庫。
從“識別合適的庫以建立可執(zhí)行代碼”步驟440,控制進行到“使用識別的庫以建 立可執(zhí)行代碼”步驟450。使用識別的庫來建立MPI源代碼程序的可執(zhí)行版本。如果沒有 發(fā)現(xiàn)問題代碼,那么MPI源代碼程序的可執(zhí)行版本可以是基于MPI線程的程序,或者如果發(fā) 現(xiàn)了問題代碼,那么可以根據(jù)MPI源代碼程序的正常生成的目標代碼來建立可執(zhí)行版本。一旦是線程而不是不同的MPI進程被實例化,就可以如參照圖2所描述的在線程 之間直接傳輸數(shù)據(jù),而無需執(zhí)行如參照圖1所描述的到共享存儲器段的復制操作以及從其 進行的復制操作。在基于MPI線程的程序的可執(zhí)行版本的執(zhí)行期間,通過將第一私有變量 的內(nèi)容直接提供給第二線程,可以將數(shù)據(jù)從第一線程傳輸?shù)降诙€程。這種從第一線程到 第二線程的數(shù)據(jù)傳輸不使用共享存儲器段來傳輸數(shù)據(jù)。根據(jù)本發(fā)明的由轉(zhuǎn)換器執(zhí)行的轉(zhuǎn)換過程是自動的。不需要為了產(chǎn)生具有基于MPI 線程的程序366的形式的、使用線程的可執(zhí)行程序,而對圖3的MPI源代碼程序362的源代 碼進行改變。通過自動地將MPI源代碼程序362轉(zhuǎn)換為基于線程的模式,基于MPI線程的 程序366可以利用在多處理器環(huán)境中提供的線程功能以及在線程之間的數(shù)據(jù)傳輸?shù)钠渌?功效。該自動轉(zhuǎn)換與當前通常需要的、用于通過重寫上述MPI源代碼程序來轉(zhuǎn)換MPI源代 碼程序以使用線程功能的技術(shù)形成對比。例如,在對在共享存儲器或集群(cluster)環(huán)境 中實現(xiàn)MPI功能的嘗試中,加利福尼亞大學圣巴巴拉分校的研究人員已經(jīng)開發(fā)了稱為TMPI 的技術(shù),其包括了針對MPI環(huán)境中的線程的編譯時間和運行時間支持。編譯時間轉(zhuǎn)換采用 線程特定數(shù)據(jù)結(jié)構(gòu)來消除C代碼中的全局和靜態(tài)變量的使用。運行時間支持包括基于無鎖 隊列管理方案的點對點通信協(xié)議。但是,源代碼程序必須被修改以使用該點對點通信協(xié)議, 并且不能對將使用線程功能在MPI環(huán)境中運行的未修改的源代碼程序進行自動轉(zhuǎn)換。圖5是描述了合適的數(shù)據(jù)處理環(huán)境501的框圖,在該環(huán)境中可以實現(xiàn)本發(fā)明的示 例性實施例的某些方面。數(shù)據(jù)處理環(huán)境501包括處理系統(tǒng)500,其包括一個或多個處理器或 中央處理單元(CPU),在圖中顯示為處理器510A和510B。本領(lǐng)域的技術(shù)人員將意識到,雖 然示出了兩個處理器,但是單個處理器或任意數(shù)量的多個處理器可以向處理系統(tǒng)500提供 處理器功能。處理器510A和510B中的每一個可以是單核的或多核的處理器。處理器510A 和510B被顯示為經(jīng)由一個或多個系統(tǒng)總線540或其它通信路徑或介質(zhì)可通信地耦合到包 括存儲器520在內(nèi)的各種其它部件。處理器510A和510B還被顯示為經(jīng)由點對點處理器互 連511而連接,所述互連511例如HyperTransport鏈路或Intel快速路徑互連(QPI)。如以上參照圖3和4所描述的,轉(zhuǎn)換器560將MPI源代碼程序轉(zhuǎn)換為基于MPI線 程的程序。轉(zhuǎn)換器560可以被實現(xiàn)為在存儲器520內(nèi)的、由處理器510A和/或處理器510B 所執(zhí)行的指令。如本文所使用的,術(shù)語“處理系統(tǒng)”和“數(shù)據(jù)處理系統(tǒng)”旨在廣泛地涵蓋單個機器或 可通信地耦合在一起并一同工作的機器或設(shè)備的系統(tǒng)。示例性處理系統(tǒng)包括分布式計算 系統(tǒng)、超級計算機、高性能計算系統(tǒng)、計算集群、大型計算機、小型計算機、客戶服務(wù)器系統(tǒng)、 個人計算機、工作站、服務(wù)器、便攜式計算機、膝上型計算機、平板電腦、電話、個人數(shù)字助理 (PDA)、手持設(shè)備、諸如音頻和/或視頻設(shè)備這樣的娛樂設(shè)備、以及用于處理或傳送信息的 其它設(shè)備,但是處理器系統(tǒng)不限于此??梢灾辽俨糠值赜蓙碜詡鹘y(tǒng)的輸入設(shè)備(例如,鍵盤、鼠標等)的輸入和/或由從 另一個機器、生物反饋(biometric feedback)或其它輸入源或信號接收的命令,來控制處理系統(tǒng)500。處理系統(tǒng)500可以使用到一個或多個遠程數(shù)據(jù)處理系統(tǒng)(沒有示出)的一個 或多個連接,例如通過網(wǎng)絡(luò)接口控制器(NIC) 550、調(diào)制解調(diào)器、或其它通信端口或耦合。可以通過物理和/或邏輯網(wǎng)絡(luò)502(例如,局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、內(nèi)聯(lián)網(wǎng)、互 聯(lián)網(wǎng)等)將處理系統(tǒng)500互連到其它處理系統(tǒng)(沒有示出)。涉及網(wǎng)絡(luò)502的通信可以使 用各種有線和/或無線短距離或長距離載波和協(xié)議,包括射頻(RF)、衛(wèi)星、微波、電氣和電 子工程師協(xié)會(IEEE)802. 11、藍牙、光、紅外線、電纜、激光等。在處理系統(tǒng)500內(nèi),處理器510A和510B可以被可通信地耦合到一個或多個易失 性的或非易失性的數(shù)據(jù)存儲設(shè)備,例如存儲器520。處理器510A和510B經(jīng)由系統(tǒng)總線540 和互連541a、541b和541m連接到存儲器520。存儲器520可以包括隨機存取存儲器(RAM)、 只讀存儲器(ROM)、大容量存儲設(shè)備,例如集成驅(qū)動電子設(shè)備(IDE)硬盤驅(qū)動器,和/或其它 設(shè)備或介質(zhì),例如軟盤、光存儲、磁帶、閃速存儲器、記憶棒、數(shù)字視頻盤、生物存儲等。為了 該公開,術(shù)語“ROM”通??梢杂糜谥阜且资源鎯ζ髟O(shè)備,例如可擦除可編程ROM(EPROM)、 電可擦除可編程ROM(EEPROM)、閃存ROM、閃速存儲器等。處理器510A和510B還可以可通信 地耦合到另外的部件,例如視頻控制器、小型計算機系統(tǒng)接口(SCSI)控制器、網(wǎng)絡(luò)控制器、 通用串行總線(USB)控制器、輸入設(shè)備,例如鍵盤和鼠標等。處理系統(tǒng)500還可以包括一 個或多個橋或中心,例如存儲器控制器中心、輸入/輸出(I/O)控制器中心、PCI根橋(PCI root bridge)等,它們用于可通信地耦合各種系統(tǒng)部件。如本文所使用的,術(shù)語“總線”可 以用于指共享的通信路徑,以及點對點路徑。系統(tǒng)總線540還提供了經(jīng)由互連541η的對網(wǎng) 絡(luò)接口 550的訪問。一些部件(例如NIC)可以被實現(xiàn)為具有用于與總線進行通信的接口(例如,PCI 連接器)的適配器卡。在一個實施例中,使用例如可編程或不可編程邏輯器件或陣列、專用 集成電路(ASIC)、嵌入式計算機、智能卡等的部件,可以將一個或多個設(shè)備實現(xiàn)為嵌入式控 制器。可以用硬件、軟件、固件或這些實現(xiàn)方式的組合來實現(xiàn)本文公開的裝置的實施例。 本發(fā)明的實施例可以被實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序,所述可編程系統(tǒng)包括至 少一個處理器、數(shù)據(jù)存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個 輸入設(shè)備,以及至少一個輸出設(shè)備??梢詫⒊绦虼a應(yīng)用到輸入數(shù)據(jù)以執(zhí)行本文描述的功能并且生成輸出信息。本發(fā) 明的實施例還包括包含指令或包含設(shè)計數(shù)據(jù)的機器可訪問介質(zhì),所述指令用于執(zhí)行本發(fā)明 的操作,所述設(shè)計數(shù)據(jù)例如是HDL,其定義了本文描述的結(jié)構(gòu)、電路、裝置、處理器和/或系 統(tǒng)特征。這些實施例還可以被稱為程序產(chǎn)品。這種機器可訪問存儲介質(zhì)可以包括由機器或設(shè)備制造或形成的粒子的有形排列, 包括存儲介質(zhì),例如硬盤,任何其它類型的盤(包括軟盤、光盤、光盤只讀存儲器(CD-ROM)、 可重寫光盤(⑶-RW)和磁光盤)、半導體設(shè)備(例如只讀存儲器(ROM)、諸如動態(tài)隨機存取 存儲器(DRAM)和靜態(tài)隨機存取存儲器(SRAM)這樣的隨機存取存儲器(RAM)、可擦除可編程 只讀存儲器(EPROM)、閃速可編程存儲器(FLASH)、電可擦除可編程只讀存儲器(EEPROM))、 磁卡或光卡、或適合于存儲電子指令的任何其它類型的介質(zhì),但機器可訪問存儲介質(zhì)并不 限于此??梢园凑找阎姆绞綄⑤敵鲂畔?yīng)用到一個或多個輸出設(shè)備。為了該應(yīng)用,處理系統(tǒng)包括具有處理器的任何系統(tǒng),處理器例如數(shù)字信號處理器(DSP)、微控制器、專用集 成電路(ASIC)或微處理器??梢杂酶呒夁^程式或面向?qū)ο缶幊陶Z言來實現(xiàn)程序以與處理系統(tǒng)進行通信。如果 期望的話,還可以以匯編或機器語言來實現(xiàn)程序。事實上,本文描述的機制在范圍上并不限 于任何特定的編程語言。在任何情況下,語言可以是編譯的或是解釋的語言。本文呈現(xiàn)了用于將MPI源代碼程序自動地轉(zhuǎn)換為基于MPI線程的程序的方法和系 統(tǒng)的實施例。雖然已經(jīng)示出并描述了本發(fā)明的特定實施例,但是對本領(lǐng)域的技術(shù)人員來說 顯而易見的是,可以在不脫離所附權(quán)利要求的范圍的情況下,進行大量改變、修改和更改。 因此,本領(lǐng)域的技術(shù)人員將意識到,在不脫離本發(fā)明的更寬的方面的情況下,可以進行改變 和更改。所附權(quán)利要求將在它們的范圍內(nèi)包括落入本發(fā)明的真實范圍和精神內(nèi)的所有這種 改變、修改和更改。
權(quán)利要求
一種方法,包括響應(yīng)于將MPI源代碼程序轉(zhuǎn)換為基于MPI線程的程序的命令,由處理器執(zhí)行的轉(zhuǎn)換器來執(zhí)行以下操作將所述MPI源代碼程序的全局變量聲明為線程私有變量,以創(chuàng)建用于第一線程的第一私有變量和用于第二線程的第二私有變量;識別用于建立所述基于MPI線程的程序的可執(zhí)行版本的庫;以及使用所述識別的庫建立所述基于MPI線程的程序的可執(zhí)行版本。
2.根據(jù)權(quán)利要求1所述的方法,還包括在所述基于MPI線程的程序的可執(zhí)行版本在第二處理器上執(zhí)行期間,通過將所述第一 私有變量的內(nèi)容直接提供給所述第二線程,從而將數(shù)據(jù)從所述第一線程傳輸?shù)剿龅诙€程。
3.根據(jù)權(quán)利要求2所述的方法,其中,將所述數(shù)據(jù)從所述第一線程傳輸?shù)剿龅诙€程不使用共享存儲器段來傳輸所述數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述的方法,其中 所述識別的庫支持多線程。
5.根據(jù)權(quán)利要求1所述的方法,還包括檢查所述MPI源代碼程序以發(fā)現(xiàn)下列狀況中的一個第一狀況,其中,當被所述MPI源代碼程序的第一組件訪問時,空白公共塊中的數(shù)據(jù)具 有第一大小,并且當被所述MPI源代碼程序的第二組件訪問時,所述空白公共塊中的數(shù)據(jù) 具有第二大小,其中,所述第一大小和所述第二大小不同;第二狀況,其中,當被所述MPI源代碼程序的第一組件訪問時,空白公共塊中的數(shù)據(jù)具 有第一格式,并且當被所述MPI源代碼程序的第二組件訪問時,所述空白公共塊中的數(shù)據(jù) 具有第二格式,其中,所述第一格式和所述第二格式不同;第三狀況,其中,所述MPI源代碼程序的組件具有一變量,該變量將來自所述組件的第 一實例的值保留到所述組件的第二實例;第四狀況,其依賴于所述處理器的狀態(tài);以及 第五狀況,其依賴于所述處理器的控制字的狀態(tài);以及響應(yīng)于發(fā)現(xiàn)了所述第一、第二、第三、第四和第五狀況中的一個狀況,拒絕轉(zhuǎn)換所述MPI 源代碼程序的命令。
6.根據(jù)權(quán)利要求1所述的方法,其中所述識別的庫包括代碼以在所述基于MPI線程的程序的執(zhí)行期間執(zhí)行以下操作 識別由所述第一線程對第一文件的訪問; 使得所述第一線程通過第一文件句柄來訪問所述第一文件; 識別由所述第二線程對所述第一文件的訪問;使得所述第二線程通過第二文件句柄來訪問所述第一文件,其中,所述第二文件句柄 不同于所述第一文件句柄。
7.根據(jù)權(quán)利要求1所述的方法,其中所述識別的庫包括代碼以在所述基于MPI線程的程序的執(zhí)行期間執(zhí)行以下操作識別新進程的實例化;響應(yīng)于識別到新進程的實例化,使得用于所述基于MPI線程的程序的對應(yīng)線程被實例化。
8.一種系統(tǒng),包括 至少一個處理器;以及存儲器,其包括用于使在所述處理器上執(zhí)行的轉(zhuǎn)換器響應(yīng)于將MPI源代碼程序轉(zhuǎn)換為 基于MPI線程的程序的命令來執(zhí)行以下操作的指令將所述MPI源代碼程序的全局變量聲明為線程私有變量,以創(chuàng)建用于第一線程的第一 私有變量和用于第二線程的第二私有變量;識別用于建立所述基于MPI線程的程序的可執(zhí)行版本的庫;以及 使用所述識別的庫建立所述基于MPI線程的程序的可執(zhí)行版本。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其中,所述存儲器還包括用于執(zhí)行以下操作的指令 在所述基于MPI線程的程序的可執(zhí)行版本在第二處理器上執(zhí)行期間,通過將所述第一私有變量的內(nèi)容直接提供給所述第二線程,從而將數(shù)據(jù)從所述第一線程傳輸?shù)剿龅诙€ 程。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其中將所述數(shù)據(jù)從所述第一線程傳輸?shù)剿龅诙€程不使用共享存儲器段來傳輸所述數(shù)據(jù)。
11.根據(jù)權(quán)利要求8所述的系統(tǒng),其中 所述識別的庫支持多線程。
12.根據(jù)權(quán)利要求8所述的系統(tǒng),其中,用于所述轉(zhuǎn)換器的指令還包括用于執(zhí)行以下操 作的指令檢查所述MPI源代碼程序以發(fā)現(xiàn)下列狀況中的一個第一狀況,其中,當被所述MPI源代碼程序的第一組件訪問時,空白公共塊中的數(shù)據(jù)具 有第一大小,并且當被所述MPI源代碼程序的第二組件訪問時,所述空白公共塊中的數(shù)據(jù) 具有第二大小,其中,所述第一大小和所述第二大小不同;第二狀況,其中,當被所述MPI源代碼程序的第一組件訪問時,空白公共塊中的數(shù)據(jù)具 有第一格式,并且當被所述MPI源代碼程序的第二組件訪問時,所述空白公共塊中的數(shù)據(jù) 具有第二格式,其中,所述第一格式和所述第二格式不同;第三狀況,其中,所述MPI源代碼程序的組件具有一變量,該變量將來自所述組件的第 一實例的值保留到所述組件的第二實例;第四狀況,其依賴于所述處理器的狀態(tài);以及 第五狀況,其依賴于所述處理器的控制字的狀態(tài);以及響應(yīng)于發(fā)現(xiàn)了所述第一、第二、第三、第四和第五狀況中的一個狀況,拒絕轉(zhuǎn)換所述MPI 源代碼程序的命令。
13.根據(jù)權(quán)利要求8所述的系統(tǒng),其中,所述識別的庫包括用于在所述基于MPI線程的程序的執(zhí)行期間執(zhí)行以下操作的代碼識別由所述第一線程對第一文件的訪問;使得所述第一線程通過第一文件句柄來訪問所述第一文件;識別由所述第二線程對所述第一文件的訪問;使得所述第二線程通過第二文件句柄來訪問所述第一文件,其中,所述第二文件句柄 不同于所述第一文件句柄。
14.根據(jù)權(quán)利要求8所述的系統(tǒng),其中,所述識別的庫包括用于在所述基于MPI線程的程序的執(zhí)行期間執(zhí)行以下操作的代碼 識別新進程的實例化;響應(yīng)于識別到新進程的實例化,使得用于所述基于MPI線程的程序的對應(yīng)線程被實例化。
15.一種裝置,包括用于響應(yīng)于將MPI源代碼程序轉(zhuǎn)換為基于MPI線程的程序的命令的模塊,所述模塊包括用于將所述MPI源代碼程序的全局變量聲明為線程私有變量,以創(chuàng)建用于第一線程的 第一私有變量和用于第二線程的第二私有變量的模塊;用于識別用于建立所述基于MPI線程的程序的可執(zhí)行版本的庫的模塊;以及 用于使用所述識別的庫建立所述基于MPI線程的程序的可執(zhí)行版本的模塊。
全文摘要
一種方法、系統(tǒng)和包含指令的計算機程序產(chǎn)品,用于將MPI源代碼程序自動地轉(zhuǎn)換為基于MPI線程的程序。響應(yīng)于MPI源代碼程序的形式的輸入和命令,轉(zhuǎn)換器將所述MPI源代碼程序的全局變量聲明為線程私有變量,以創(chuàng)建用于第一線程的第一私有變量和用于第二線程的第二私有變量。識別用于支持在基于MPI線程的程序的執(zhí)行期間將進程轉(zhuǎn)換為線程的庫,并且使用所述識別的庫建立所述基于MPI線程的程序的可執(zhí)行版本。所述識別的庫可以包括用于以下操作的代碼在基于MPI線程的程序執(zhí)行時識別新進程的實例化,并且作為響應(yīng),使得用于基于MPI線程的程序的對應(yīng)線程被實例化。
文檔編號G06F9/54GK101937367SQ20101022129
公開日2011年1月5日 申請日期2010年6月30日 優(yōu)先權(quán)日2009年6月30日
發(fā)明者A·V·索巴洛夫, R·F·范德韋恩加特, S·J·惠特洛克 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
错那县| 天全县| 沁水县| 陵川县| 同江市| 玛沁县| 岑溪市| 加查县| 环江| 裕民县| 文化| 台南县| 米泉市| 利川市| 南充市| 普陀区| 阳原县| 南皮县| 延长县| 霍林郭勒市| 鹿邑县| 饶阳县| 南陵县| 潢川县| 林芝县| 阳西县| 自贡市| 乐平市| 商都县| 白河县| 金秀| 惠州市| 阜城县| 碌曲县| 启东市| 嫩江县| 武陟县| 井冈山市| 陇川县| 德庆县| 东至县|