最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

自編教材分享:第九章—負(fù)載均衡優(yōu)化

2023-12-07 09:19 作者:先進(jìn)編譯實驗室  | 我要投稿


負(fù)載均衡優(yōu)化

OpenMP能夠以較低的成本開發(fā)多線程程序,是將大量串行程序快速并行的有效方法,但并行執(zhí)行過程中的調(diào)度開銷、線程創(chuàng)建開銷、以及同步開銷等造成的負(fù)載失衡都會影響OpenMP程序的性能,而合理利用調(diào)度策略以及線程數(shù)設(shè)置等方式可以很好地實現(xiàn)負(fù)載均衡,提升程序的性能。


循環(huán)嵌套合并調(diào)度

子句collapse只能用于循環(huán)嵌套,它的具體語法格式為collapse(n),其中參數(shù)n是一個整數(shù),是指將與collapse子句最相鄰的n層循環(huán)的迭代壓縮合并在一起組成更大的任務(wù)調(diào)度空間,從而增加線程組調(diào)度空間中的循環(huán)總數(shù),可調(diào)度迭代次數(shù)的增加有助于解決負(fù)載不均衡問題。

添加指導(dǎo)語句#pragma omp parallel for對循環(huán)嵌套進(jìn)行并行,往往只能對緊鄰指導(dǎo)語句的循環(huán)進(jìn)行多線程任務(wù)劃分,而其內(nèi)層的循環(huán)只能在一個線程上執(zhí)行。如果外層循環(huán)的迭代次數(shù)過少,而內(nèi)層循環(huán)的迭代次數(shù)很多,僅對外層循環(huán)進(jìn)行任務(wù)劃分就容易造成負(fù)載不均衡的情況,OpenMP規(guī)范中提供的collapse子句可用于解決此問題。

線程調(diào)度配置策略

選擇合適的線程調(diào)度策略,即對循環(huán)迭代采取靜態(tài)或動態(tài)的方式分配到各個線程上并行執(zhí)行,使得各個線程的工作量相當(dāng),以提升程序的性能。

  • 靜態(tài)調(diào)度 static:將所有的循環(huán)迭代劃分為大小相等的調(diào)度塊,使得迭代次數(shù)在線程上盡可能地均分。

  • 動態(tài)調(diào)度 dynamic:使用“先來先服務(wù)的排隊申請策略”,當(dāng)某個線程執(zhí)行完當(dāng)前調(diào)度塊的任務(wù)時,就為其從調(diào)度塊隊列中分配一個新的調(diào)度塊。

  • 指導(dǎo)調(diào)度 guided:強(qiáng)調(diào)的是任務(wù)分塊動態(tài)變化,調(diào)度塊的大小開始比較大,但會隨程序的執(zhí)行會按指數(shù)關(guān)系逐漸變小。

  • 運(yùn)行時調(diào)度 runtime:指在運(yùn)行時使用環(huán)境變量OMP_SCHDULE來確定上述三種調(diào)度策略的某一種。


  • 規(guī)則循環(huán)結(jié)構(gòu):如矩陣乘法程序,建議使用帶參數(shù)的靜態(tài)調(diào)度以取得較好的性能。

  • 遞增型循環(huán)結(jié)構(gòu):建議使用帶參數(shù)的靜態(tài)調(diào)度策略可在一定程度上緩解循環(huán)各迭代之間的計算量差距,以獲得較好的性能。

  • 遞減循環(huán)結(jié)構(gòu):首先使用指導(dǎo)調(diào)度,判斷在開始時是否會因調(diào)度塊較大會導(dǎo)致負(fù)載極為不均衡,若是則推薦使用動態(tài)調(diào)度,使得各線程調(diào)度的迭代塊大小相當(dāng),從而實現(xiàn)有效的負(fù)載均衡。

  • 隨機(jī)循環(huán)結(jié)構(gòu):推薦優(yōu)先使用動態(tài)調(diào)度。

線程數(shù)設(shè)置優(yōu)化

串并行切換

串并行切換:OpenMP提供有if子句來自動切換程序的并行和串行,即在指導(dǎo)命令后增加if(N>Number)子句,其中當(dāng)程序的計算量N大于閾值Number時,并行執(zhí)行,否則串行執(zhí)行。在本例中,閾值Number需要根據(jù)運(yùn)行環(huán)境和線程設(shè)置數(shù)量等,不斷調(diào)整矩陣規(guī)模N測試進(jìn)行尋找。

選擇合適的線程數(shù)

OpenMP程序設(shè)置的線程數(shù)量一定程度上影響了程序的性能,增加線程可以在特定時間段內(nèi)完成更多的任務(wù),但不斷增加線程數(shù)量可能會使線程間同步等開銷增加反而導(dǎo)致程序的性能降低,OpenMP提供的線程設(shè)置模式,幫助開發(fā)人員選擇程序的并行線程數(shù)量。

  • 靜態(tài)模式:由優(yōu)化人員確定并行區(qū)中線程的數(shù)量

????????omp_set_num_threads()

????????添加子句num_threads

????????使用環(huán)境變量OMP_NUM_THREADS

  • 動態(tài)模式:

????????采用默認(rèn)模式(不指定線程數(shù))

????????omp_set_dynamic() 設(shè)定并行區(qū)內(nèi)線程的數(shù)目上限

  • 嵌套模式:函數(shù)omp_set_nested()啟動或禁用嵌套并行,即在并行區(qū)中構(gòu)建另一個并行區(qū)

  • 條件模式:利用子句if切換程序串行并行

在實際應(yīng)用中,并行程序可能會進(jìn)行程序優(yōu)化調(diào)整或發(fā)生運(yùn)行環(huán)境改變,由于不同程序的最優(yōu)性能對應(yīng)的線程數(shù)是不同的,需要重新設(shè)置線程數(shù)以達(dá)到性能最優(yōu),因此根據(jù)程序特征和運(yùn)行環(huán)境來設(shè)置合適的線程數(shù)十分重要。


自編教材分享:第九章—負(fù)載均衡優(yōu)化的評論 (共 條)

分享到微博請遵守國家法律
商丘市| 札达县| 高台县| 西平县| 祁东县| 汶上县| 陈巴尔虎旗| 乌苏市| 佛坪县| 永善县| 封开县| 怀远县| 新野县| 谢通门县| 恩平市| 绩溪县| 尚义县| 开阳县| 宾阳县| 天台县| 北川| 垫江县| 新邵县| 鹤庆县| 漳州市| 海淀区| 汨罗市| 门源| 云梦县| 中西区| 三原县| 安阳县| 武功县| 聂拉木县| 出国| 罗源县| 拉孜县| 文水县| 微山县| 太湖县| 陆河县|