本發(fā)明涉及水電技術(shù)領(lǐng)域,具體是一種大規(guī)模梯級(jí)水電站群多核并行優(yōu)化調(diào)度方法。
背景技術(shù):
隨著我國西南地區(qū)烏江、瀾滄江、紅水河、金沙江等特大干流梯級(jí)水電站群的出現(xiàn),這類大規(guī)模水電系統(tǒng)優(yōu)化調(diào)度方法研究變得尤為重要。這類梯級(jí)水電站群突出的顯著特點(diǎn)是電站級(jí)數(shù)非常多,比如,烏江流域規(guī)劃11座電站,已建9座;瀾滄江規(guī)劃15級(jí)電站,已建6座;紅水河規(guī)劃10級(jí)電站,已建9座;金沙江中下游規(guī)劃12級(jí)電站,已建6座。水電站群電站級(jí)數(shù)多意味著梯級(jí)水電站之間的水力和電力聯(lián)系變得愈加復(fù)雜,增加了問題的約束條件數(shù)目,對(duì)于部分求解方法而言,其計(jì)算量隨電站及約束數(shù)目會(huì)呈指數(shù)增長(zhǎng),進(jìn)一步加劇了水電系統(tǒng)優(yōu)化問題求解難度,如何保證系統(tǒng)求解已成為大規(guī)模水電系統(tǒng)面臨的核心問題之一。以往常用的非線性規(guī)劃、動(dòng)態(tài)規(guī)劃等經(jīng)典方法,在求解大規(guī)模水電系統(tǒng)優(yōu)化問題時(shí),存在無法避免的缺陷,建模求解非常困難,比如,非線性規(guī)劃方法難以對(duì)模型約束或目標(biāo)函數(shù)簡(jiǎn)化,即使采用一些線性化方法簡(jiǎn)化也易于使問題偏離實(shí)際;動(dòng)態(tài)規(guī)劃方法受求解規(guī)模限制,大規(guī)模問題易導(dǎo)致維數(shù)災(zāi)問題,造成求解困難甚至因內(nèi)存不足而無法計(jì)算。為了使在有限時(shí)間內(nèi)求解大規(guī)模水電站群優(yōu)化調(diào)度問題成為可能,并同時(shí)保證優(yōu)化結(jié)果的質(zhì)量,需要探索新的合理有效的求解算法。隨著90年代計(jì)算機(jī)技術(shù)的發(fā)展,為粒子群算法、遺傳算法、模擬退火方法、混沌算法等啟發(fā)式智能算法的興起提供了有利條件。這些智能算法在求解優(yōu)化問題時(shí),并不依賴于問題本身的性質(zhì)和特點(diǎn),在一定條件下證明可收斂到全局最優(yōu),且具有魯棒性強(qiáng)、收斂速度快、尋優(yōu)機(jī)制簡(jiǎn)單等優(yōu)點(diǎn),在求解優(yōu)化問題中被廣泛應(yīng)用。但是,單一的智能算法在應(yīng)用時(shí)仍然存在一定的缺陷,如粒子群算法存在早熟收斂、容易陷入局部最優(yōu)、停滯等,遺傳算法求解容易早熟且局部搜索能力差等。因此,根據(jù)不同智能算法的優(yōu)缺點(diǎn),通過多種智能算法之間的相互結(jié)合,改進(jìn)單一算法的缺陷,是大規(guī)模水電系統(tǒng)優(yōu)化問題新的求解途徑。
目前,學(xué)者們對(duì)混合智能算法的研究取得了豐碩的成果。但是,群體算法的求解精度與計(jì)算規(guī)模存在一定競(jìng)爭(zhēng)關(guān)系,即種群規(guī)模或迭代次數(shù)越大,在解空間搜索到全局優(yōu)化解的概率越大,求解精度越高,但是同時(shí)也意味著計(jì)算耗時(shí)越多,求解效率越低,尤其是應(yīng)用于我國當(dāng)前大規(guī)模梯級(jí)水電站群優(yōu)化調(diào)度時(shí),求解效率下降非常顯著。另外,隨著電網(wǎng)和水電公司的精細(xì)化調(diào)度需求越來越高,提高求解效率已不容忽視。因此,如何在保證結(jié)果質(zhì)量的前提下,進(jìn)一步提高算法求解效率,是適應(yīng)水電快速發(fā)展必須解決的實(shí)質(zhì)性問題。
并行計(jì)算一直是計(jì)算機(jī)科學(xué)領(lǐng)域的研究熱點(diǎn)。基于多核處理器的多核并行技術(shù)以其并行實(shí)現(xiàn)容易、運(yùn)行環(huán)境穩(wěn)定、成本低廉等獨(dú)特的優(yōu)勢(shì)被廣泛應(yīng)用于實(shí)際工程,對(duì)于水電系統(tǒng)而言,尋求優(yōu)化調(diào)度問題、求解算法與并行技術(shù)之間的切入點(diǎn),設(shè)計(jì)合適粗細(xì)粒度的并行優(yōu)化方式將是一種提高系統(tǒng)求解效率的可行途徑。目前,在梯級(jí)水電站群優(yōu)化調(diào)度領(lǐng)域并行優(yōu)化方法的研究成果中,方法并行化方式主要分為粗粒度和細(xì)粒度,而且成果普遍利用了已成熟的openmp、mpi或.net等能夠有效兼容fortran、c++、c#等語言的并行模式或框架,為fortran、c++、c#等語言開發(fā)的串行方法并行化提供了便利。但是這些框架并不能有效適應(yīng)java語言開發(fā)的串行方法,難以應(yīng)用于java編碼的程序并行化開發(fā)和改造。因此,實(shí)現(xiàn)串行方法并行化,選擇合適的并行模式或框架非常重要,不僅需要考慮編程語言的支持類型、并行任務(wù)的應(yīng)用性以及平臺(tái)兼容性等因素,而且開發(fā)人員對(duì)不同編程語言的熟悉程度也對(duì)并行框架的選擇有重要影響。
fork/join并行框架是一種基于java源碼開發(fā)的多核并行框架,并已作為標(biāo)準(zhǔn)程序集成到j(luò)ava版本7的并發(fā)程序包中,能夠最大效率地簡(jiǎn)化開發(fā)人員的編程工作,便于java編碼開發(fā)的串行方法并行化改造。因此,申請(qǐng)人以java語言為基礎(chǔ)開發(fā)語言,將一種自適應(yīng)混合粒子群算法和fork/join多核并行框架耦合,發(fā)明了一種基于fork/join多核并行框架的大規(guī)模梯級(jí)水電站群粗粒度多核并行優(yōu)化調(diào)度方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種大規(guī)模梯級(jí)水電站群多核并行優(yōu)化調(diào)度方法,以解決如何將fork/join多核并行框架與一種自適應(yīng)混合粒子群算法耦合,從而實(shí)現(xiàn)方法的并行化,提高求解效率,并為其他智能算法的并行化提供參考和借鑒。
為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種大規(guī)模梯級(jí)水電站群多核并行優(yōu)化調(diào)度方法,包括以下步驟:
1)劃分子種群:從主線程中獲取初始種群的計(jì)算規(guī)模作為父任務(wù)規(guī)模,采用fork/join并行框架的通用的閾值計(jì)算公式將父任務(wù)劃分為不少于1個(gè)規(guī)模更小的子任務(wù),且每次遞歸分解將父任務(wù)規(guī)模對(duì)半劃分為2個(gè)規(guī)模相同的子任務(wù),直至子任務(wù)規(guī)模小于或等于閾值,停止分解;
2)子線程同時(shí)計(jì)算各自分配的子任務(wù):每個(gè)分配到子線程的子任務(wù)的種群規(guī)模相同,并且設(shè)置相同計(jì)算參數(shù)的自適應(yīng)混合粒子群算法計(jì)算各子任務(wù)的最優(yōu)解;
3)輸出最優(yōu)解:當(dāng)各子線程完成所有子任務(wù)的計(jì)算,合并所有子任務(wù)的最優(yōu)解并篩選出全局最優(yōu)解,返回主線程;
其中自適應(yīng)混合粒子群算法求解過程,包括以下步驟:
step1算法參數(shù)初始化:設(shè)定種群規(guī)模m、混沌序列個(gè)數(shù)d、種群最大迭代次數(shù)kmax、飛行加速度c1,c2、慣性因子w、常量e、常量s、粒子能量上限eini、粒子能量下限efin以及粒子相似度上限sini和粒子相似度下限sfin;
step2種群初始化:根據(jù)logistic映射公式,在各時(shí)段水位允許范圍內(nèi),隨機(jī)初始化粒子種群個(gè)體位置(zi1,zi2,...,zin)以及粒子飛行速度(vi1,vi2,...,vin);其中,粒子位置元素為水位,飛行速度元素為水位漲落速度;
step3計(jì)算粒子適應(yīng)度、粒子個(gè)體最優(yōu)解以及種群全局最優(yōu)解:粒子適應(yīng)度與其個(gè)體最優(yōu)解比較,若粒子適應(yīng)度比其個(gè)體最優(yōu)解更優(yōu),則當(dāng)前粒子位置作為個(gè)體最優(yōu)位置;粒子適應(yīng)度與種群全局最優(yōu)解比較,若粒子適應(yīng)度比種群全局最優(yōu)解更優(yōu),則當(dāng)前粒子位置作為種群全局最優(yōu)位置;
step4計(jì)算粒子能量以及粒子能量閾值:若粒子能量低于當(dāng)前粒子能量閾值,對(duì)粒子當(dāng)前位置與速度執(zhí)行變異操作;
step5計(jì)算粒子相似度以及粒子相似度閾值:若兩相鄰粒子相似度小于當(dāng)前粒子相似度閾值,則對(duì)較差粒子的歷史最優(yōu)位置執(zhí)行變異操作;
step6引入基于鄰域的貪心隨機(jī)搜索策略對(duì)粒子的個(gè)體最優(yōu)位置進(jìn)行更新,若在鄰域搜索到的當(dāng)前位置比搜索前粒子適應(yīng)度更大,則代替搜索前粒子個(gè)體位置,再用搜索后粒子個(gè)體位置與粒子歷史最優(yōu)位置以及種群全局最優(yōu)位置作比較,更新粒子歷史最優(yōu)位置以及種群最優(yōu)位置;
step7更新粒子種群;
step8判斷迭代是否結(jié)束:若當(dāng)前迭代次數(shù)小于最大迭代次數(shù),返回step3;否則退出迭代,輸出結(jié)果;
fork/join并行框架采用分治法技術(shù),通過遞歸分割原問題,形成不少于1個(gè)規(guī)模更小、相互獨(dú)立且可并行計(jì)算的子任務(wù);當(dāng)各子任務(wù)進(jìn)行獨(dú)立并行計(jì)算后,組合各子任務(wù)的子結(jié)果即能輸出原問題的最終結(jié)果,其中fork/join并行框架的線程池:當(dāng)程序開始執(zhí)行時(shí),默認(rèn)創(chuàng)建與可用的處理器數(shù)目相同的活動(dòng)線程數(shù);在分治法執(zhí)行過程中,定義了一個(gè)可自由設(shè)置的控制子任務(wù)規(guī)模大小的閾值作為子任務(wù)規(guī)模的上限值,即當(dāng)子任務(wù)規(guī)模小于或等于閾值時(shí),分治法執(zhí)行結(jié)束,各子任務(wù)被平均分配到不同線程中開始并行計(jì)算;在子任務(wù)并行計(jì)算過程中,fork/join采用雙端隊(duì)列排序模式,并采用了工作竊取算法,即當(dāng)一個(gè)線程的隊(duì)列計(jì)算任務(wù)為空時(shí),將從其它處于工作狀態(tài)的線程隊(duì)列尾部竊取計(jì)算任務(wù)。
作為本發(fā)明進(jìn)一步的方案:fork/join并行框架的接口類以及實(shí)現(xiàn)類封裝在java.util.concurrent中。
作為本發(fā)明進(jìn)一步的方案:自適應(yīng)混合粒子群算法實(shí)現(xiàn)的代碼類需繼承fork/join并行框架的應(yīng)用接口類java.util.concurrent.recursiveaction或者java.util.concurrent.recursivetask。
作為本發(fā)明進(jìn)一步的方案:fork/join并行框架的通用的閾值設(shè)置公式如下:
式中:
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明以java語言為基礎(chǔ)開發(fā)語言,將一種自適應(yīng)混合粒子群算法和fork/join多核并行框架耦合,發(fā)明了一種基于fork/join多核并行框架的大規(guī)模梯級(jí)水電站群粗粒度多核并行優(yōu)化調(diào)度方法。解決如何將fork/join多核并行框架與一種自適應(yīng)混合粒子群算法耦合,從而實(shí)現(xiàn)方法的并行化,提高求解效率,并為其他智能算法的并行化提供參考和借鑒。本發(fā)明能夠有效提高線程利用率;fork/join是一種基于內(nèi)存共享的并行框架,實(shí)現(xiàn)了內(nèi)核中緩存共享,而且fork/join具有獨(dú)特的隊(duì)列設(shè)計(jì),其竊取算法能夠有效減少物理緩存的占用和爭(zhēng)奪,減少線程閑置時(shí)間,提高線程利用率。
附圖說明
圖1是自適應(yīng)混合粒子群算法流程圖;
圖2是分治法示意圖;
圖3是閾值控制方式示意圖;
圖4是工作竊取算法示意圖;
圖5是fork/join偽代碼示意圖;
圖6是pahpso方法并行設(shè)計(jì)框架示意圖;
圖7是水庫群拓?fù)浣Y(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例1
本發(fā)明實(shí)施例中,一種大規(guī)模梯級(jí)水電站群多核并行優(yōu)化調(diào)度方法的具體實(shí)施過程如下所述。
一、梯級(jí)水電站群優(yōu)化調(diào)度模型
(1)目標(biāo)函數(shù)
以梯級(jí)水庫群總發(fā)電量最大模型為例。該模型可描述為:在已知調(diào)度期內(nèi)各電站入庫流量過程條件下,考慮水量平衡、蓄水量、泄量、出力等各種約束,兼顧防洪、灌溉、航運(yùn)等綜合要求,制定最優(yōu)調(diào)度決策過程,使調(diào)度期內(nèi)水庫群發(fā)電量最大。目標(biāo)函數(shù)數(shù)學(xué)表達(dá)式如下:
式中:e為水電站群總發(fā)電量(億kw.h);n為電站數(shù)目;i為電站序號(hào);t為時(shí)段數(shù);t為時(shí)段序號(hào);
(2)約束條件
水量平衡約束:
水庫蓄水量約束:
發(fā)電流量約束:
出庫流量約束:
出力約束:
末水位約束:
水電系統(tǒng)總出力約束:
式中:
二、自適應(yīng)混合粒子群算法(ahpso)求解流程
step1算法參數(shù)初始化。設(shè)定種群規(guī)模m、混沌序列個(gè)數(shù)d、種群最大迭代次數(shù)kmax、飛行加速度c1,c2、慣性因子w、常量e、常量s、粒子能量上限eini、粒子能量下限efin以及粒子相似度上限sini和粒子相似度下限sfin。
step2種群初始化。根據(jù)logistic映射公式,在各時(shí)段水位允許范圍內(nèi),隨機(jī)初始化粒子種群個(gè)體位置(zi1,zi2,...,zin)以及粒子飛行速度(vi1,vin,...,vin)。其中,粒子位置元素為水位,飛行速度元素為水位漲落速度。
step3計(jì)算粒子適應(yīng)度、粒子個(gè)體最優(yōu)解以及種群全局最優(yōu)解。粒子適應(yīng)度與其個(gè)體最優(yōu)解比較,若粒子適應(yīng)度比其個(gè)體最優(yōu)解更優(yōu),則當(dāng)前粒子位置作為個(gè)體最優(yōu)位置;粒子適應(yīng)度與種群全局最優(yōu)解比較,若粒子適應(yīng)度比種群全局最優(yōu)解更優(yōu),則當(dāng)前粒子位置作為種群全局最優(yōu)位置。
step4計(jì)算粒子能量以及粒子能量閾值。若粒子能量低于當(dāng)前粒子能量閾值,對(duì)粒子當(dāng)前位置與速度執(zhí)行變異操作。
step5計(jì)算粒子相似度以及粒子相似度閾值。若兩相鄰粒子相似度小于當(dāng)前粒子相似度閾值,則對(duì)較差粒子的歷史最優(yōu)位置執(zhí)行變異操作。
step6引入基于鄰域的貪心隨機(jī)搜索策略對(duì)粒子的個(gè)體最優(yōu)位置進(jìn)行更新。若在鄰域搜索到的當(dāng)前位置比搜索前粒子適應(yīng)度更大,則代替搜索前粒子個(gè)體位置,再用搜索后粒子個(gè)體位置與粒子歷史最優(yōu)位置以及種群全局最優(yōu)位置作比較,更新粒子歷史最優(yōu)位置以及種群最優(yōu)位置。
step7更新粒子種群。
step8判斷迭代是否結(jié)束。若當(dāng)前迭代次數(shù)小于最大迭代次數(shù),返回step3;否則退出迭代,輸出結(jié)果。
算法流程如附圖1所示。
三、fork/join并行框架
(1)基本原理及核心
fork/join并行框架的核心繼承了分治法的特性,通過遞歸分割原問題,形成若干個(gè)規(guī)模更小、相互獨(dú)立且可并行計(jì)算的子任務(wù)。當(dāng)各子任務(wù)進(jìn)行獨(dú)立并行計(jì)算后,組合各子任務(wù)的子結(jié)果即可輸出原問題的最終結(jié)果,附圖2為分治法流程框架圖。fork/join并行框架設(shè)計(jì)了獨(dú)特的線程池技術(shù),當(dāng)程序開始執(zhí)行時(shí),默認(rèn)創(chuàng)建與可用的處理器數(shù)目相同的活動(dòng)線程數(shù),便于線程的維護(hù)和管理,減小了系統(tǒng)資源消耗,尤其適合在單機(jī)多核配置上部署多線程程序。在分治法執(zhí)行過程中,定義了一個(gè)可自由設(shè)置的控制子任務(wù)規(guī)模大小的閾值作為子任務(wù)規(guī)模的上限值,即當(dāng)子任務(wù)規(guī)模小于或等于閾值時(shí),分治法執(zhí)行結(jié)束,各子任務(wù)被平均分配到不同線程中開始并行計(jì)算,附圖3為閾值控制模式下的子任務(wù)分割框架圖。另外,在子任務(wù)并行計(jì)算過程中,fork/join設(shè)計(jì)了獨(dú)特的雙端隊(duì)列排序模式,并采用了工作竊取算法,即當(dāng)一個(gè)線程的隊(duì)列計(jì)算任務(wù)為空時(shí),將從其它處于工作狀態(tài)的線程隊(duì)列尾部竊取計(jì)算任務(wù),避免了線程處于閑置狀態(tài),提高線程的利用效率,附圖4為工作竊取算法示意圖。
(2)實(shí)現(xiàn)方法
fork/join并行框架的接口類以及實(shí)現(xiàn)類封裝在java.util.concurrent中。雖然fork/join的并行效率與其他并行框架相比較并非最優(yōu),但其最大優(yōu)點(diǎn)在于給開發(fā)人員提供了非常簡(jiǎn)便的應(yīng)用程序?qū)崿F(xiàn)接口。開發(fā)人員不再需要處理各種并行相關(guān)事務(wù),例如同步、通信等,同時(shí)可避免難以調(diào)試的死鎖和數(shù)據(jù)爭(zhēng)用等錯(cuò)誤,只需按照給定接口的實(shí)現(xiàn)方式,編寫很少的程序即可完成算法與框架接口的對(duì)接,極大地簡(jiǎn)化了編寫并發(fā)程序的瑣碎工作,可大量節(jié)省開發(fā)人員的工作量,提高工作效率,fork/join偽代碼示意圖見附圖5。對(duì)于開發(fā)人員而言,應(yīng)用fork/join并行框架實(shí)現(xiàn)算法并行化計(jì)算主要需關(guān)注以下4個(gè)問題。
1)算法實(shí)現(xiàn)的代碼類需繼承fork/join應(yīng)用接口類java.util.concurrent.recursiveaction或者java.util.concurrent.recursivetask。
2)選擇合適的閾值劃分任務(wù)。根據(jù)附圖3中的實(shí)例,閾值的大小直接影響子任務(wù)的分割數(shù)目。當(dāng)閾值設(shè)置偏小,意味著子任務(wù)的規(guī)模更小且分割數(shù)量更多,易造成資源管理消耗過大;當(dāng)閾值設(shè)置偏大,意味著子任務(wù)的規(guī)模更大且分割數(shù)量更少,甚至當(dāng)子任務(wù)數(shù)量小于工作線程數(shù)時(shí),易導(dǎo)致部分工作線程處于閑置狀態(tài)。因此,為了保證所有工作線程均能分配到子任務(wù),通用的閾值設(shè)置公式如下:
式中:
3)實(shí)現(xiàn)fork/join接口類的voidcompute()方法。該方法接口主要實(shí)現(xiàn)各子任務(wù)的計(jì)算,即將算法可并行化部分的代碼程序?qū)懭朐摲椒ń涌凇?/p>
4)設(shè)置任務(wù)劃分方式。每次任務(wù)劃分可將父任務(wù)劃分為多個(gè)子任務(wù),而劃分的子任務(wù)個(gè)數(shù)由開發(fā)人員編寫代碼實(shí)現(xiàn)。一般來說,采用對(duì)半分解父任務(wù)的方式有利于硬件實(shí)現(xiàn)負(fù)載均衡。
四、并行自適應(yīng)混合粒子群算法(pahpso)實(shí)現(xiàn)方式
ahpso方法的初始種群由不同的個(gè)體粒子組成,粒子的個(gè)數(shù)即為種群的計(jì)算規(guī)模。由于每個(gè)粒子代表解空間的一個(gè)候選解,采用劃分初始種群為多個(gè)規(guī)模更小子種群的粗粒度并行設(shè)計(jì),并不影響每個(gè)粒子在其子種群中的搜索尋優(yōu)。因此,子種群之間的優(yōu)化搜索是相互獨(dú)立的,具有天然的并行性。附圖6為pahpso方法并行設(shè)計(jì)框架示意圖,其并行步驟主要如下:
1)劃分子種群。從主線程中獲取初始種群的計(jì)算規(guī)模作為父任務(wù)規(guī)模,采用fork/join閾值計(jì)算公式(9)將父任務(wù)劃分為多個(gè)規(guī)模更小的子任務(wù),且每次遞歸分解將父任務(wù)規(guī)模對(duì)半劃分為2個(gè)規(guī)模相同的子任務(wù),直至子任務(wù)規(guī)模小于或等于閾值,停止分解。
2)子線程同時(shí)計(jì)算各自分配的子任務(wù)。每個(gè)分配到子線程的子任務(wù)的種群規(guī)模相同,并且設(shè)置相同計(jì)算參數(shù)的ahpso方法計(jì)算各子任務(wù)的最優(yōu)解。
3)輸出最優(yōu)解。當(dāng)各子線程完成所有子任務(wù)的計(jì)算,合并所有子任務(wù)的最優(yōu)解并篩選出全局最優(yōu)解,返回主線程。
(1)基礎(chǔ)信息
為了驗(yàn)證pahpso方法的并行效率,采用瀾滄江下游梯級(jí)水庫群年發(fā)電量最大模型(見《具體實(shí)施方式》)作為計(jì)算實(shí)例。梯級(jí)自上游而下分別為小灣(多年調(diào)節(jié))、漫灣(季調(diào)節(jié))、大朝山(年調(diào)節(jié))、糯扎渡(多年調(diào)節(jié))和景洪(季調(diào)節(jié))水庫,水庫群梯級(jí)拓?fù)浣Y(jié)構(gòu)見附圖7。用于測(cè)試的計(jì)算機(jī)cpu配置為intelxeone31245@3.30ghz(4核),測(cè)試狀態(tài)分別設(shè)置“超線程”開啟和關(guān)閉狀態(tài)進(jìn)行對(duì)比分析。
(2)并行性能指標(biāo)
加速比sp和效率ep是衡量并行算法性能的兩個(gè)常用指標(biāo),其數(shù)學(xué)表達(dá)式分別如下所示:
sp=t1/tp(1)
ep=sp/p(2)
式中:t1表示串行環(huán)境下算法執(zhí)行時(shí)間,s;tp表示p個(gè)內(nèi)核環(huán)境下算法執(zhí)行時(shí)間,s。
(3)測(cè)試方案
由于pahpso方法采用種群分解的粗粒度并行設(shè)計(jì)模式,為了測(cè)試不同種群規(guī)模條件下算法的并行性能,設(shè)置四組種群規(guī)模大小不同的方案進(jìn)行仿真測(cè)試。各方案種群規(guī)模大小設(shè)置見表1。
表1四組仿真方案種群規(guī)模大小
(4)并行結(jié)果
表2為pahpso方法在不同并行核數(shù)、超線程啟閉狀態(tài)下的并行結(jié)果。從表中可以看到,方法的計(jì)算時(shí)間隨著核數(shù)的增加大幅縮減,并行效果非常明顯。
對(duì)于同一方案,算法在不同并行環(huán)境下的并行性能有所不同。以方案一計(jì)算結(jié)果為例,隨著并行核數(shù)增加,在1核、2核、4核環(huán)境下的加速比分別為1、1.98、3.84,計(jì)算加速比逐漸提高。而且在相同核環(huán)境下,在“超線程”開啟狀態(tài)下獲得了更佳的加速效果,主要是因?yàn)椤俺€程”技術(shù)能夠在1個(gè)核心上模擬出2個(gè)邏輯線程,減少硬件cpu的閑置時(shí)間,更好地發(fā)揮了cpu的計(jì)算效率。但是隨著并行核數(shù)增加,在“超線程”啟閉相同環(huán)境下,1核、2核、4核且“超線程”開啟狀態(tài)下的效率分別為100%、99%、96%,呈逐漸下降趨勢(shì),主要原因是并行核數(shù)越多,則執(zhí)行線程數(shù)越多,資源管理消耗、線程間通信時(shí)間、內(nèi)存占用等因素也相應(yīng)提高,直接影響了并行效率的下降。
對(duì)于不同方案,算法的種群規(guī)模越大,并行性能的優(yōu)勢(shì)愈加明顯。四組仿真方案在4核“超線程”開啟狀態(tài)下的縮減時(shí)間分別為486.6s、926.3s、1381.0s以及1787.2s,并行效果非常明顯。在相同的并行環(huán)境下,以4核“超線程”開啟為例,隨著種群規(guī)模增大,計(jì)算加速比、效率逐漸增加,且計(jì)算加速比越接近理想加速比。主要原因是計(jì)算任務(wù)規(guī)模越大,線程處于閑置狀態(tài)的時(shí)間越少,線程利用率更加充分。另外,方案三和方案四在2核環(huán)境“超線程”開啟狀態(tài)下的計(jì)算加速比大于理想加速比,發(fā)生“超線性”加速比現(xiàn)象,主要原因有兩點(diǎn):1)“超線程”技術(shù)能夠有效提高線程利用率;2)fork/join是一種基于內(nèi)存共享的并行框架,實(shí)現(xiàn)了內(nèi)核中緩存共享,而且fork/join具有獨(dú)特的隊(duì)列設(shè)計(jì),其竊取算法能夠有效減少物理緩存的占用和爭(zhēng)奪,減少線程閑置時(shí)間,提高線程利用率。
表2pahpso算法測(cè)試結(jié)果
對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本發(fā)明。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化囊括在本發(fā)明內(nèi)。
此外,應(yīng)當(dāng)理解,雖然本說明書按照實(shí)施方式加以描述,但并非每個(gè)實(shí)施方式僅包含一個(gè)獨(dú)立的技術(shù)方案,說明書的這種敘述方式僅僅是為清楚起見,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)將說明書作為一個(gè)整體,各實(shí)施例中的技術(shù)方案也可以經(jīng)適當(dāng)組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實(shí)施方式。