從 OpenMP 移轉至並行執行階段
並行執行階段支援多種不同的程式設計模型。 這些模型有可能相互重疊,但或許也可彌補其他程式庫之模型的不足之處。 本節中的文件會比較 OpenMP 與並行運行時間,並提供如何移轉現有 OpenMP 程式代碼以使用並行運行時間的範例。
OpenMP 程式設計模型是以開放標準定義的,具有定義完善的 Fortran 和 C/C++ 程式設計語言繫結。 Microsoft C++編譯程序支援的 OpenMP 2.0 和 2.5 版非常適合反復執行的平行演算法:也就是說,它們會在數據陣列上執行平行反覆運算。 OpenMP 3.0 除了反覆工作之外,還支援非反覆工作。
當平行處理原則程度已預先決定且符合系統可用資源時,OpenMP 最有效率。 OpenMP 模型特別適合高效能運算,其中非常大的計算問題會分散到一部計算機的處理資源。 在此案例中,硬體環境通常會固定,且開發人員可以合理預期在執行演算法時,擁有所有計算資源的獨佔存取權。
不過,較不受限的運算環境可能不適合 OpenMP。 例如,遞歸問題(例如快速排序演算法或搜尋數據樹狀結構)較難以使用 OpenMP 2.0 和 2.5 實作。 並行運行時間藉由提供異步代理程序連結庫和平行模式連結庫 (PPL) 來補充 OpenMP 的功能。 異步代理程序連結庫支援粗略的工作平行處理原則;PPL 支援更精細的平行工作。 並行運行時間提供平行執行作業所需的基礎結構,讓您可以專注於應用程式的邏輯。 不過,由於並行運行時間會啟用各種程序設計模型,因此其排程額外負荷可能會大於其他並行連結庫,例如 OpenMP。 因此,建議您在將現有的 OpenMP 程式代碼轉換為使用並行運行時間時,以累加方式測試效能。
何時從 OpenMP 遷移至並行運行時間
在下列情況下,移轉現有的 OpenMP 程式代碼以使用並行運行時間可能很有利。
案件 | 並行運行時間的優點 |
---|---|
您需要可延伸的並行程式設計架構。 | 並行執行階段中有許多功能皆可進行擴充。 您也可以合併現有功能,以撰寫新功能。 由於 OpenMP 依賴編譯程式指示詞,因此無法輕易擴充。 |
您的應用程式會受益於合作式封鎖。 | 當工作因為需要尚無法使用的資源而封鎖時,並行運行時間可以在第一個工作等候資源時執行其他工作。 |
您的應用程式會受益於動態負載平衡。 | 並行運行時間會使用排程演算法,在工作負載變更時調整計算資源的配置。 在OpenMP中,當排程器將計算資源配置至平行區域時,這些資源配置會在整個計算中固定。 |
您需要例外狀況處理支援。 | PPL 可讓您攔截平行區域或迴圈內外的例外狀況。 在 OpenMP 中,您必須處理平行區域或迴圈內的例外狀況。 |
您需要取消機制。 | PPL 可讓應用程式同時取消個別工作和平行工作樹狀結構。 OpenMP 需要應用程式實作自己的取消機制。 |
您需要平行程序代碼,才能在它啟動的不同內容中完成。 | 並行運行時間可讓您在一個內容中啟動工作,然後在另一個內容中等候或取消該工作。 在OpenMP中,所有平行工作都必須在開始的內容中完成。 |
您需要增強的偵錯支援。 | Visual Studio 提供 平行堆疊 和 平行 工作視窗,讓您更輕鬆地偵錯多線程應用程式。 如需偵錯並行運行時間支援的詳細資訊,請參閱使用工作視窗、使用平行堆疊視窗和逐步解說:偵錯平行應用程式。 |
何時不要從 OpenMP 遷移至並行運行時間
下列案例說明何時可能不適合移轉現有的 OpenMP 程式代碼以使用並行運行時間。
案件 | 說明 |
---|---|
您的應用程式已經符合您的需求。 | 如果您滿意應用程式效能和目前的偵錯支援,移轉可能不適合。 |
您的平行循環主體執行的工作很少。 | 並行運行時間工作排程器的額外負荷可能無法克服平行執行循環主體的優點,特別是當迴圈主體相對較小時。 |
您的應用程式是以 C 撰寫。 | 因為並行運行時間使用許多C++功能,所以當您無法撰寫可讓 C 應用程式完全使用它的程式代碼時,它可能不適合。 |
[相關主題]
如何:轉換 OpenMP parallel for 迴圈來使用並行執行階段
假設有一個使用 OpenMP 平行和 for 指示詞的基本循環,示範如何將它轉換成使用並行運行時間並行::p arallel_for 演算法。
如何:轉換使用取消的 OpenMP 迴圈來使用並行執行階段
假設OpenMP parallelfor 迴圈不需要執行所有反覆專案,會示範如何將它轉換成使用並行運行時間取消機制。
如何:轉換使用例外狀況處理的 OpenMP 迴圈來使用並行執行階段
指定執行例外狀況處理之迴圈的 OpenMP 平行處理,示範如何轉換它以使用並行運行時間例外狀況處理機制。
如何:轉換使用削減變數的 OpenMP 迴圈來使用並行執行階段
針對使用縮減子句的迴圈提供 OpenMP 平行處理,示範如何將它轉換成使用並行運行時間。
另請參閱
並行執行階段
OpenMP \(英文\)
平行模式程式庫 (PPL)
非同步代理程式程式庫