• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    面向國產高性能眾核處理器的編程模型

    2023-11-29 10:28:42陳虎周鵬靈
    計算機應用 2023年11期
    關鍵詞:線程隊列高性能

    陳虎,周鵬靈

    面向國產高性能眾核處理器的編程模型

    陳虎1,2,周鵬靈1*

    (1.華南理工大學 軟件學院,廣州 510006; 2.廣東省高性能計算重點實驗室,廣州 510033)( ? 通信作者電子郵箱1197615077@qq.com)

    在國產高性能眾核處理器上編程時,需要直接使用最底層的接口開發(fā)軟件,這使編程和調試非常困難;并且各自平臺的高性能軟件編程模型較為基礎,計算軟件不能通用,造成了重復性開發(fā)。針對以上問題,實現了通用編程模型以及所對應的支撐庫:一方面基于消息隊列機制開發(fā)國產高性能眾核處理器的線程級并行機制;另一方面基于單指令多數據流(SIMD)編程模型開發(fā)從核上的數據級并行性。首先,對國產高性能眾核處理器體系結構進行抽象;其次,設計模型的消息隊列機制,并為程序員提供一套異構并行編程接口,如系統(tǒng)參數接口、從核線程控制接口、消息隊列接口、SIMD抽象接口;最后,在上述基礎上形成全新的高性能計算軟件開發(fā)模型和方法,方便用戶開發(fā)基于國產高性能眾核處理器的并行計算軟件。性能傳輸測試結果表明,在國產眾核處理器上,當啟動核數較少時,所提模型的傳輸帶寬普遍達到了峰值直接內存訪問(DMA)帶寬的90%;當啟動的核數較多時,消息隊列模型的傳輸帶寬普遍達到了峰值DMA帶寬的70%。在矩陣乘法實驗中,與系統(tǒng)原語傳輸矩陣并計算的性能相比,所提模型的性能達到前者的90%;在口令猜測系統(tǒng)中,所提模型的代碼性能與直接使用最底層的接口開發(fā)的代碼性能基本持平。所提通用編程模型和支撐框架使高性能計算(HPC)軟件開發(fā)更簡易,并且具有更好的可移植性,可為促進國產自主HPC軟件研發(fā)提供幫助。

    國產眾核處理器;單指令多數據流;并行編程模型;SW26010;消息隊列模型

    0 引言

    為了在有限的芯片面積上提供更多的計算能力,我國研發(fā)的SW26010[1-2]和面向E級計算的異構融合加速器[3-4]等高性能眾核處理器系統(tǒng)采用異構結構,即包含數量眾多的較為簡單的從核和少量復雜的主核。主核和從核通常具有不同的指令集,通過核中單指令多數據流(Single Instruction Multiple Data, SIMD)部件提升計算能力,通過不具有Cache一致性[5]的本地存儲器和主核心交換數據。在軟件層面,主核執(zhí)行較為完善的操作系統(tǒng),可以支持通用的多線程編程模型如OpenMP(Open Multi-Processing)[6]、pthread[7]等;但從核上僅能運行一個線程,而且從核的線程控制也是非標準化的編程接口。

    國產高性能眾核處理器在內存組織方面與傳統(tǒng)對稱多處理器(Symmetrical Multi-Processor, SMP)[8]和Cache一致性的統(tǒng)一存儲器訪問(Cache Coherent Uniform Memory Access, CC-UMA)[9]的結構有很大不同,而且從核多線程和SIMD指令的使用也與國際常見標準不同。這直接導致兩個問題:1)軟件開發(fā)困難,大多數情況下,在這些國產高性能眾核處理器上進行軟件開發(fā)只能遠程連接到超算中心進行調試;2)不同國產高性能眾核處理器的國產軟件無法通用,因為在這些處理器上進行軟件開發(fā)都直接選用平臺最底層的接口,導致本就薄弱的國產應用軟件研發(fā)力量變得更分散,造成大量重復性開發(fā)工作。

    為此,本文提出一種面向國產高性能眾核處理器的編程模型。一方面,基于消息隊列機制開發(fā)國產高性能眾核處理器的線程級并行機制;另一方面,通過SIMD編程模型開發(fā)從核上的數據級并行機制。該編程模型已經在x86微處理器[10]、SW26010處理器、面向E級計算的異構融合加速器這三種不同平臺上實現。在此編程模型的支持下,用戶可以首先使用基于x86平臺上的模型開發(fā)和調試高性能計算(High Performance Computing, HPC)軟件,再將應用軟件移植到國產高性能眾核處理器上,這樣不僅可以有效降低開發(fā)難度,還可以在兩種不同類型的國產高性能微處理器上快速遷移同一個軟件,有效提升國產HPC軟件開發(fā)和遷移的效率。基于本文模型的國產HPC軟件開發(fā)流程如圖1所示。

    1 相關工作

    1.1 多線程編程模型

    OpenMP[6]是當前對稱多處理器系統(tǒng)上的常見多線程編程接口,并得到了廣泛支持?;谠摌藴书_發(fā)的應用程序具有良好的可移植性。

    Cilk++[11]是一種基于C++的并行編程模型。Cilk++使用了clk_for、cilk_spawn和cilk_sync這3個關鍵字對C++進行并行擴展,運行時應用分而治之的方法在工作線程之間調度任務,以確保多個線程負載均衡。

    Voss等[12]提出了開源線程構建庫(Threading Building Block, TBB),它以任務為調度單位,并在POSIX和Windows線程庫上具有可移植性。oneAPI[13]的軟件編程框架目標是為Intel各類計算架構,如CPU、GPU、現場可編程門陣列(Field Programmable Gate Array, FPGA)或者其他針對不同應用的硬件加速器等,提供一個統(tǒng)一編程模型和應用程序接口。oneAPI的核心是DPC++(Data Parallel C++)的編程語言,可以支持跨CPU和加速器上的數據并行和異構編程,目標是簡化編程,提高代碼在不同硬件上的可重用性,同時能根據特定的加速器調優(yōu)。oneAPI提供了一個統(tǒng)一的編程模型和一組開發(fā)工具和庫,可以使各種中間件和框架更輕松地利用CPU、GPU、FPGA等加速器,實現高性能計算;同時,oneAPI提供的DPC++使用戶能夠直接利用這些工具和庫,無須了解底層硬件的細節(jié)。

    1.2 SIMD編程模型

    現代微處理器上已經廣泛使用了SIMD指令,如SSE(Streaming SIMD Extensions)[14]、AVX(Advanced Vector eXtension)[15]、AVX-512[15]和SVE(Scalable Vector Extension)[16-17]等。為了充分使用這些SIMD指令,在軟件系統(tǒng)中使用了以下方法:

    1)直接書寫匯編或使用針對特定處理器的內嵌原語。這種方法與特定的硬件平臺綁定,性能較高但可移植性很差。

    2)使用編譯器自動矢量化[18-19]。在編譯器自動矢量化方面,如OpenMP 4.0的#pragma omp simd語句可以將函數和循環(huán)標識為數據并行。編譯器自動矢量化使應用軟件具有較好的可移植性,但是效果取決于編譯器的能力和軟件書寫的風格,性能往往較差。

    3)采用較為通用的SIMD抽象層。例如,MAL(Macro Abstraction Layer)[20]使用了一組宏代替內嵌原語函數,并可以根據配置替換為SSE、AVX指令。Kretz等[21]提出的Vc庫(Vc library)將SIMD內嵌原語封裝在高級函數中,可以提供更高級別的抽象,庫將確定目標硬件可以并行執(zhí)行的向量的寬度;但如果僅需要部分的向量寬度時,必須使用額外的屏蔽操作來禁用向量通道。Wang等[22]提出的gSIMD(generic SIMD)庫根據每個向量的通道數(fixed-lane)而非向量的字節(jié)長度(fixed-width)操作,程序員只需定義通道數,由該庫將這些元素映射到基礎SIMD向量寬度和硬件。目前,也僅支持Intel的SSE4.2以及IBM POWER7處理器的VSX指令。

    4)在應用軟件系統(tǒng)(如快速傅里葉變換(Fastest Fourier Transform, FFT)軟件[23])中自行設計和使用SIMD抽象層,并按照不同硬件平臺編譯成特定的SIMD指令。這種方法在很多HPC軟件上得到了廣泛使用,但是每種HPC軟件的抽象層定義不統(tǒng)一,難以推廣。

    5)使用C++等高級語言提供的庫(如Click++庫)。

    可見,對于國際高性能軟件編程模型來說,應用軟件在不同硬件平臺上的可移植性仍然是一個重要的特性。但是現有的編程模型難以直接在國產高性能眾核處理器上使用,因為該處理器的體系結構和操作系統(tǒng)具有自己的特點;而且國產高性能眾核微處理器的差異性阻礙了國產高性能軟件的發(fā)展,使應用軟件在國產高性能眾核處理器之間不通用;同時,現有的SIMD編程模型也無法適用于國產眾核處理器,例如自動矢量化的OpenMP和Cilk++方法需要編譯器版本支持,而當前的SIMD抽象層比如Vc庫和gSIMD方法,它們封裝了SIMD指令,但支持的指令集僅僅包含SSE4.2以及IBM POWER7處理器的VSX指令等,十分有限;MAL也僅支持部分指令集架構(Instruction Set Architecture, ISA)中的宏,不能在國產眾核處理器中使用。

    本文研究的編程模型和支撐框架可以在“神威”“天河”和x86等不同體系結構上高效運行,有效提高應用軟件的可移植性,能為我國HPC軟件研發(fā)提供幫助。

    2 編程模型設計

    2.1 國產眾核處理器的體系結構模型

    我國自行設計和實現的SW26010處理器采用了異構多核處理器結構,由4個異構群構成,通過群間傳輸網絡來實現4個異構群和系統(tǒng)接口總線的存儲共享和通信。每個異構群都可以被當作一個單獨的計算單元用于計算,它的結構如圖2所示。

    每個異構群包括1個主核和64個從核。每個異構群具有相同的存儲器層次關系,它分為兩部分:一部分為8 GB的異構群內存;另一部分為從核局部存儲空間。

    主核主頻為1.5 GHz,L1 Cache大小為32 KB,L2 Cache大小為256 KB,采用4譯碼7發(fā)射超標量結構。從核主頻為1.5 GHz,采用2譯碼2發(fā)射超標量結構,支持256 bit的SIMD指令集,每個從核局部存儲空間大小為64 KB,指令存儲空間為16 KB,從核可以直接離散訪問主存,也可以通過DMA的方式批量訪問主存。

    面向E級高性能計算的異構融合處理器采用了異構融合架構,包含16個CPU、96個控制核心和1 536個加速核心:16個CPU組成一個通用區(qū),96個控制核心和1 536個加速核心組成加速區(qū),平均分為4個加速簇,如圖3所示。每個集群有24個控制核、384個加速核,處理器結合了超長指令字(Very Long Instruction Word, VLIW)技術和加速陣列的微結構,每個加速核心以VLIW方式工作,每16個加速核和1個控制核組成一個加速陣列。

    多核CPU采用硬件維護Cache一致性,包含512 KB的 L2 Cache。每個加速簇采用6 MB的全局共享存儲(Global Shared Memory,GSM)、48 MB的HBSM(High Bandwidth Shared Memory)和32 GB DDR4(Double Data Rate Fourth Generation)多級存儲結構。另外,在每個加速陣列上還包括了64 KB的私有標量內存(Scalar Memory, SM)和768 KB的私有陣列內存(Array Memory, AM)。最高支持1 024位的SIMD指令操作。通用區(qū)域中的CPU可以訪問不同加速簇中的HBSM和DDR空間,而控制核心和加速核心只能訪問它自己簇中的GSM、HBSM和DDR空間,不同加速簇的數據共享是通過CPU完成的。

    SW26010和面向E級高性能計算的異構融合處理器具有以下共同的特點:

    1)它們都采用了非對稱的結構,即片上的處理器核分為少量的主控核和大量的計算從核。

    2)從核上不具備多進程(線程)的操作系統(tǒng)支持,僅支持一個線程在從核上運行。不同的處理器具有不同的從核線程編程接口。

    3)每個計算核都有獨立的局部存儲器空間,而且這些存儲器空間不具備Cache一致性,需要程序員通過顯式程序控制系統(tǒng)主存與各個計算核存儲器之間的數據交換。

    4)主核和從核之間的數據交換有兩種方法:①從核直接訪問主核的內存空間,延遲較長,僅僅適用于傳遞控制信息;②從核啟動的DMA過程,可以傳輸規(guī)模較大的數據。

    5)從核上支持SIMD指令,不同處理器的SIMD寬度各不相同。

    圖3 面向E級高性能計算的加速器芯片

    本文提出了如圖4所述的抽象結構描述這兩種不同類型的眾核處理器的特點。一個完整的處理器簇由一個主核和個從核構成:主核擁有片上Cache訪問主存;從核具有獨立的局部存儲器,但不支持Cache一致性協議,主核和從核之間進行數據交換,可以通過從核DMA完成。每個從核上都具有SIMD指令系統(tǒng)。不同的處理器中,SIMD的數據寬度不一定相同。

    圖4 國產高性能異構處理器的體系結構抽象

    為了降低并行程序編寫的難度,將x86一個主線程當作主核,其他線程當作從核,在x86平臺完成代碼開發(fā)并利用x86上廣泛使用的工具進行調試。表1給出了實驗所用x86服務器、SW26010和面向E級高性能計算的異構融合加速器的主要體系結構參數。

    2.2 編程模型

    本文模型結構如圖5所示,主要分為系統(tǒng)參數接口、從核線程控制、消息隊列接口、從核上SIMD抽象接口等部分。主核和從核的應用程序通過系統(tǒng)參數接口獲取從核數量、SIMD寬度、局部存儲器容量等參數,并可以根據這些參數調整相應的算法和數據結構尺寸。主核通過從核線程控制接口啟動和管理從核上的線程。主核和從核之間通過消息隊列[24]交換數據,而不需要應用程序考慮不同眾核處理器局部存儲器的數據傳輸機制。從核上的應用程序可以通過SIMD抽象接口使用從核上的SIMD指令系統(tǒng)。

    表1 國產高性能眾核處理器的主要參數

    圖5 針對國產高性能眾核處理器的編程模型

    2.2.1系統(tǒng)參數接口

    系統(tǒng)參數接口主要用于標識當前高性能眾核處理器的關鍵體系結構參數。在主核和從核上均可以獲得從核數量、從核的局部存儲器空間容量、從核SIMD數據寬度等信息,在從核上還可以得到該線程所處的從核編號(對于包含個從核的多處理器,從核的標號從0開始計數,直至-1)。

    2.2.2從核線程控制接口

    主核可以通過這個接口創(chuàng)建并啟動從核線程組、等待線程組終止、關閉線程組,并查詢特定從核上的線程是否活躍。

    int sum_calc(int *a, int n) {

    int cluster_id=1;

    int cn=mGetSlaveCoreNum(cluster_id); //獲取從核數量

    ThreadID tid=mStartSlaveThreads(0, cn,

    (void *)slave_sum_calc_by_slave_core, NULL); //開啟從核線程組

    mWaitSlaveThreads(tid); //等待線程組終止

    mDestroySlaveThreads(tid); //關閉線程組

    return sum;}

    上述應用程序示例中,主核根據從核數啟動從核線程,并等待從核線程結束,再銷毀所有的從核線程。該接口完全屏蔽了國產微處理器私有的athread和hThread從核線程接口,同時還支持Linux上的pthread接口,使應用程序具有良好的可移植性。

    2.2.3消息隊列接口

    消息隊列是主核與從核之間交換數據的主要方式。在本文模型中,消息隊列的方向分為主核到從核和從核到主核兩類,不支持從核之間直接建立消息隊列。在每個消息隊列中,消息的大小固定。當發(fā)送方往一個隊列發(fā)送多個消息時,接收方將按照發(fā)送方發(fā)送消息的順序先后接收到消息。

    在主核和同一個從核之間可以建立多個消息隊列,以傳輸不同類型的消息。與消息隊列相關的接口主要包括:

    1)消息隊列的創(chuàng)建和銷毀。

    在創(chuàng)建消息隊列時,需要指定以下參數:消息隊列的名稱、從核的編號、消息的尺寸大小、消息隊列在主核部分所能容納的消息數量、在從核部分所能容納的消息數量、消息隊列的方向、主核消息隊列的起始地址位置、消息隊列在從核中所使用的存儲器類型等。創(chuàng)建的每一個隊列都擁有一個唯一的標識號。

    隊列是由主核創(chuàng)建,但會在主核和從核都產生一個新的隊列句柄。在主核方面,將按照不同的從核編號分區(qū)設置句柄,(從核編號,句柄號)或者(從核編號,隊列名稱)可以確定一個唯一的隊列實體。在從核方面,句柄號或者隊列名稱就可以標識唯一的隊列實體。同一個隊列在主核與從核上的句柄相同,即主核上(SlaveID, handle)對應的隊列與第SlaveID個從核上對應的句柄為handle的隊列為同一個隊列實體。

    例如,現在有一個主處理器和兩個從核A、B,如果主處理器和從核A建立兩個隊列,名稱分別為“MasterToA”“AToMaster”。主處理器和從核B建立了兩個隊列,名稱分別為“MasterToB”“BToMaster”。所形成的句柄如表2所示。

    表2 隊列句柄示例

    2)消息隊列的狀態(tài)查詢。

    通過消息隊列的標識號能夠查詢到特定消息隊列的狀態(tài),主要包括隊列是否存在、消息的尺寸、當前隊列中消息的數量、消息隊列方向等。

    3)發(fā)送和接收消息。

    主核或者從核可以向消息隊列發(fā)送或接收消息,而且提供了阻塞版本與非阻塞版本。

    從核的局部存儲器容量非常有限,本文采用了應用程序直接訪問消息隊列中消息內容的方法,可以有效減少局部存儲器中占用的空間,并避免不必要的內存拷貝。從核上消息訪問接口有所不同。

    int sum_calc(int *a, int n) {

    int cn=mGetSlaveCoreNum(c_id); //獲取從核數量

    int sn=n/cn;

    for (int i=0; i

    handle0=mCreateQueue(c_id, "Input" , i, M*sizeof(int),

    1, 1, NULL, SlaveScalarMem, MasterToSlave, &err0);

    handle1=mCreateQueue(c_id, "Output", i, M*sizeof(int),

    1, 1, NULL, SlaveScalarMem, SlaveToMaster, &err1);

    … //主核發(fā)送消息程序

    int *addr=(int *)mAllocateMsg(i,handle0,&err0); //分配消息內存

    int len=((j+M)

    memcpy(addr, &a[i * sn+j], len);

    mSendMsg(i, handle0, addr, len, &err0); //發(fā)送消息

    … //主核接收消息程序

    int *ret_ptr; int sum_size;

    ret_ptr=(int *)mRecvMsg(i, handle1, &sum_size, &err1); //接收消息

    … //處理消息

    mReleaseMsg(i, handle1, ret_ptr, &err1);} //釋放消息內存

    上述例子中,主核首先針對每個從核建立了一對主核到從核和從核到主核的消息隊列。主核程序在發(fā)送消息時將先使用mAllocateMsg()獲得消息塊的指針,再使用memcpy()填充消息塊內容,最后使用mSendMsg()發(fā)送這個消息。從核程序使用sResvMsg()接收消息后,將獲得這個消息塊的指針并鎖定這個消息,再直接訪問消息塊的內容,在使用完消息中的內容后再使用sReleaseMsg()向消息隊列釋放消息塊。

    2.2.4SIMD抽象接口

    SIMD接口為應用程序提供了多種向量數據類型,例如:_VF32表示32位單精度浮點向量,_VU32表示32位無符號整數向量。在此基礎上提供了常見的SIMD操作,主要包括數據設置、存儲器讀/寫、單精度/雙精度浮點的算術計算、整數的算術/邏輯/移位計算等。

    本文模型還增加了預先定義的常量表示SIMD指令系統(tǒng)的通道數。例如_VF32_SIZE表示SIMD指令集中單精度浮點的通道數。在AVX指令集上,該值為256/32=8。使用通道數參數可以基于不同的SIMD指令系統(tǒng)構造應用程序。以下是一個具備良好可移植性的向量求和程序:

    void addv(float *a,float *b, float *c, int len){

    int i=0;

    while((i+_VF32_SIZE)

    _VF32 va,vb,vc;

    va=_VF32_LOAD(a+i); //加載向量

    vb=_VF32_LOAD(b+i);

    vc=_VF32_ADD(va,vb); //進行向量加法運算

    _VF32_STORE(c+i,vc); //存儲向量

    for(;i

    3 編程模型實現

    3.1 主要數據結構

    在系統(tǒng)中,主核需要訪問的消息隊列的管理和控制信息都存儲在主核存儲器上。因為從核到主核和主核到從核的DMA數據傳輸的請求都只能由從核來發(fā)起,而且從核是單線程,從核可以訪問到主存,所以當隊列管理模塊需要被主核訪問時,需要建立在主存,可以由主核和從核共同訪問。主核會存儲它與所有從核的交互的消息隊列信息。

    系統(tǒng)主核主要的數據結構關系圖6所示,箭頭表示該表項結構體包含的指針。圖6中,SlaveArgument表示表項數量為從核設備數量,每一項作為一個對應從核線程的結構體參數,該結構體中含有需用戶指定的主核設備號、線程序號以及用戶定義的傳參,并均含有一個指向HMQTab線性表中對應設備表項的指針,它們指向同一個表項。

    HMQTable表的每一項對應一個主核,并指向一個主核所對應的所有從核的消息隊列入口表HMQLinkedListHead。HMQLinkedListHead表中每個表項對應一個從核,表項指向的HMessQueueNode表為該主核和從核之間的消息隊列。SlaveArgument、HMQTable和HMQLinkedListHead表項數目與主核和從核的核心數目相關,可以根據不同的HPC平臺靈活配置。

    HMessQueue線性表表項數目則由用戶代碼創(chuàng)建的消息隊列數量決定,可以通過前文所提到的句柄handle快速訪問到表項。

    圖6 系統(tǒng)主核的主要數據結構

    3.2 消息隊列結構

    在系統(tǒng)中,因為從核訪問主核數據會產生較長的時間浪費,所以主核與從核的消息隊列的管理和控制信息分別存儲在各自的存儲器上,消息隊列整體結構如圖7所示。

    圖7 消息隊列的組織

    在本文模型中,1個主核和1個從核之間可以有多個單向消息隊列。按照方向區(qū)分,可以分為主處理器到從處理器(MasterToSlave),從處理器到主處理器(SlaveToMaster)兩種。主核和從核消息隊列的管理和控制信息存儲器在各自的存儲器上。不過主核的存儲器信息可以由主核和從核共同訪問。兩種類型的消息隊列在主核和從核上都具有一塊連續(xù)的存儲空間(分別成為消息隊列的主核部分和從核部分)存放消息內容。

    HMessQueue線性表為主核的消息隊列管理和控制信息,每個節(jié)點對應了一個消息隊列,包含了計算核心的ID號、隊列名稱、句柄、狀態(tài)、方向、隊列在計算核心的地址類型、最長支持的消息字節(jié)數、主核部分的消息內容、主核部分的控制消息內容。

    SMessQueue線性表為從核的消息隊列管理和控制信息,在啟動從核線程時,它由從核線程初始化相應信息,SMessQueue線性表每個表項與HMessQueue線性表的每個表項一一對應,除了HMessQueue線性表所包含的內容,還創(chuàng)建了本從核的消息內容,以及本從核的控制消息內容。

    3.3 消息的狀態(tài)結構設計和傳遞算法

    國產眾核處理器采用了非對稱的結構,包括少量復雜的主核和數量眾多的較為簡單的計算核,從核上不具備多進程(線程)的操作系統(tǒng)支持,僅僅支持一個線程在從核上運行,所以在進行主核與某個從核A之間的消息隊列通信時,建立一個主核與某個從核A單獨的消息隊列,這個消息隊列可以看作單生產者單消費者模型,而消息的存儲采用環(huán)形緩沖隊列,實現了不使用任何同步機制的傳遞算法。類似Lamport單生產者單消費者無鎖隊列[25],它證明了當隊列由單個使用者和單個使用者同時訪問時不需要鎖,通過位置變量充當訪問數組中的索引實現同步。

    根據消息的傳遞方向不同,會有兩種相關的消息結構設計:主核到從核方向消息隊列的控制信息布局(圖8[24]),及從核到主核方向消息隊列的控制信息布局(圖9)。

    圖8 主核到從核方向消息隊列的控制信息布局

    圖9 從核到主核方向消息隊列的控制信息布局

    每個消息隊列的控制信息分為兩部分:位置索引和狀態(tài)列表。狀態(tài)列表中的每個狀態(tài)與環(huán)形消息塊的數據區(qū)域中的每個消息塊一一對應。主核部分的消息塊狀態(tài)列表和從核部分的消息塊狀態(tài)列表(分別記為MState和SState)分別在主核地址區(qū)和從核本地存儲中。

    主核部分和從核部分分別有四個位置索引,用于指示當前狀態(tài)消息塊的邊界。IMTran、IMLocked、IMIdle和IMReady為[0,MSize-1]中的整數;ISTran、ISLocked、ISIdle和ISReady的為[0,SSize-1]中的整數。

    在主核發(fā)往從核的消息隊列控制信息布局(圖8)中,IMLocked和IMIdle存儲在主核地址區(qū)域。IMTran、IMReady和其余4個位置索引均位于從核局部存儲器。因為IMTran 、IMReady僅僅被從核讀寫,而不會被主核使用,可以放置在從核的局部存儲器中。從核將盡可能地將為處于MReady狀態(tài)的消息塊啟動DMA。這樣的設計將主核不必要的變量放置在從核中存儲,可以減少從核代碼對主核變量的訪問,從而提高模型的性能。初始化后,狀態(tài)列表MState中所有的狀態(tài)均為MIdle;狀態(tài)列表SState中的所有狀態(tài)均為SIdle,所有的位置索引均為0。

    主核發(fā)往從核方面,消息在消息隊列中的狀態(tài)轉移變化如圖10所示,主核端消息的消息變化為MasterIdle>>MasterLocked>>MasterReady >>MasterTran>>MasterIdle,相應地從核端的消息狀態(tài)變化為SlaveIdle>>SlaveTran>>SlaveReady>>SlaveLocked>>SlaveIdle。

    圖10 主核發(fā)往從核時消息隊列中消息的狀態(tài)

    以將消息從主核發(fā)向從核的交換算法操作序列為例:

    1)主核消息塊的初始狀態(tài)為MasterIdle;

    2)在主核應用程序調用mAllocateMsg(),會將第一個MasterIdle狀態(tài)的消息塊分配給應用程序,將該消息塊的狀態(tài)轉為MasterLocked;

    3)主核應用程序設置完成該消息塊內容后,調用mSendMsg(),將該消息塊的狀態(tài)轉為MasterReady,表示該消息塊內容已經準備好,等待從核接收;

    4)從核消息塊的初始狀態(tài)為SlaveIdle;

    5)當從核接收一個消息時,啟動DMA傳輸,會將從核第一個SlaveIdle塊改為SlaveTransfer態(tài),并將獲取主核第一個MasterReady的消息塊,將主核消息塊改為MasterTransfer態(tài);

    6)DMA傳輸結束時,主核消息塊的MasterTransfer消息塊狀態(tài)又恢復到MasterIdle等待下次調用分配,從核SlaveTransfer消息塊狀態(tài)變?yōu)镾laveReady;

    7)從核應用程序調用sRecvMsg()獲取第一個SlaveReady狀態(tài)的消息塊,該消息塊的狀態(tài)轉變?yōu)镾laveLocked態(tài);

    8)從核使用完畢后,應用程序調用sReleaseMsg(),將從核消息塊SlaveLocked態(tài)設置為SlaveIdle狀態(tài)。

    從核發(fā)往主核的消息狀態(tài)轉移和消息隊列控制信息布局都跟主核發(fā)往從核的不同,對于位置索引來說,如圖9所示,IIMTran、ISTran、ISReady、ISLocked和ISIdle存儲在從核局部存儲器,其余3個位置索引均位于主核地址區(qū)域。在消息隊列中,消息的狀態(tài)轉移變化為:主核端消息從MasterIdle>>MasterTran>>MasterReady>>MasterLocked>>MasterIdle,相應地從核端的消息狀態(tài)變化為SlaveIdle>>SlaveLocked>>SlaveReady>>SlaveTran>>SlaveIdle。

    3.4 從核線程庫的實現

    國產高性能眾核微處理器采用非對稱的結構設計,主核與從核兩者協同為具體的應用提供高效的計算平臺。各個平臺提供了各自的線程庫的管理。

    以SW26010、面向E級高性能計算的異構融合加速器為例,SW26010眾核處理器提供一組athread庫。使用設計程序可以更好地發(fā)揮SW26010下從核線程組的加速性能,并能夠讓用戶方便、快捷地對核組內的線程進行創(chuàng)建和管理。主核調用加速線程庫可以進行控制線程的初始化、啟動、結束等一系列操作。每個線程都綁定到一個從核。而從核調用的加速線程庫接口可以進行啟動數據傳輸、執(zhí)行核心計算等。

    而面向E級高性能計算的異構融合處理器上使用了hThread多線程編程接口。該編程接口同樣分為兩部分,一部分為主核編程接口,另一部分為從核編程接口。主核編程接口除了包括線程管理外,還包含了設備管理、鏡像管理等;從核編程接口主要包括并行管理接口、同步管理以及向量化函數接口。

    本文模型通過宏定義的方式封裝了pthread、athread和hThread這三種不同類型的線程庫,形成一層更高級的抽象,提供給用戶統(tǒng)一的接口,如:創(chuàng)建并啟動從核線程組、等待線程組終止、關閉線程組、主核加載鏡像文件到設備等;以下給出了等待線程終止接口的實現方式。在編譯時,通過預先定義不同類型的宏,可以使用不同類型的線程庫。

    void mWaitSlaveThreads(int cluster_id, ThreadID t_id) {

    #if defined(SW5_VERSION)

    athread_join();

    #endif

    #if defined(MT3_VERSION)

    hThread_group_wait(t_id.m_thread_id);

    #endif

    #if defined(AVX_VERSION)

    void *retval;

    pthread_t *tids=(pthread_t *)t_id.m_ptr;

    for (int i=0; i < t_id.m_num; ++i) {

    pthread_join(tids[i], &retval);}

    #endif}

    3.5 SIMD抽象設計與實現

    抽象層的設計主要有兩部分:一部分是SIMD數據類型即抽象向量類型;另一部分是對這些數據類型進行的一系列的操作。

    1)向量數據類型和長度。針對SIMD指令中的基本數據類型(包括符號和無符號整數、浮點數等),本文定義了一系列向量類型。例如MMX指令集的__m64、SSE指令集的__m128i、AVX指令集的__m256i、__m512i等整數數據類型,都可以認為是32位無符號整數向量類型__VU32。編程模型還可以根據指令系統(tǒng)和基本數據類型指定每個向量的通道數(例如_VU32_SIZE表示了一個向量中的32位無符號整數的通道數)。除此之外,本文模型還可以描述SW26010和面向E級計算的異構融合加速器支持的SIMD數據類型。這兩種處理器分別能處理256 bit和1 024 bit的向量類型,通過一條SIMD指令能分別進行4路和32路的32 bit的向量計算。

    表3 典型的32位無符號整數向量操作指令

    4 實驗與結果分析

    4.1 數據傳輸測試

    分別在SW26010處理器上和面向E級高性能計算的加速器芯片上進行測試,實驗步驟如下:

    1)初始化個元素的一維雙精度浮點數組;

    2)將數組個大小的數據作為一個消息,每個消息帶上消息序號,拷貝到消息隊列中,發(fā)送次,啟動個從核接收消息;

    3)每個從核利用消息序號對收到的數組進行驗證,并累加收到的消息序號的值;

    4)從核接收完所有消息后,返回給主核1個累加之后的值,主核驗證是否完全收到消息。

    采用了對比測試:一種為使用DMA原生接口進行傳輸的性能,它是理論上能達到的最高傳輸性能;一種為使用本文消息隊列模型的傳輸性能,每次傳輸的的大小為16 KB的結果如表4所示。

    在兩種國產平臺上,消息隊列模型在從核數啟動較少時,本文模型與單純使用DMA接口的程序相比,消息隊列模型的傳輸帶寬普遍達到了峰值傳輸帶寬的90%。在從核數較多時,消息隊列模型的傳輸帶寬普遍達到了峰值傳輸帶寬的70%,因為部分控制信息是在主核中存儲,從核訪問與主核共享的數據是離散的從主存訪問(非DMA模式),大量從核離散地訪問主存,可能會影響DMA性能,而且主存帶寬效率低,大量從核離散load/store訪問的話,可能會產生阻塞,耗時會更長。

    4.2 矩陣乘法應用

    矩陣乘法[26]是科學計算的基礎方法,利用眾核處理器和并行化的特點提高它的效率也至關重要。本節(jié)根據消息隊列模型與SIMD抽象層完成線性代數中重要的矩陣乘法的設計并實現,可以在多種眾核處理器上高效并行。

    傳統(tǒng)的對稱處理器在計算大規(guī)模矩陣乘法時,為了減少內存帶寬的影響,會進行多級數據分塊,分塊大小圍繞著各級緩存容量進行調整。而對于國產眾核處理器如SW26010處理器,它能為每個計算核心提供私有的高速緩沖(Local Data Memory, LDM)且從核核組空間有限,一共為64×64 KB 的局部存儲空間,無法容納超過4 MB的數據,因此對于大規(guī)模的矩陣乘法,也必須對矩陣進行分塊,將矩陣分為多個小矩陣,利用主從核傳輸接口傳輸小矩陣,從核多次接收主核分塊小矩陣進行計算。

    使用編程模型的矩陣乘法代碼結構如圖11所示,類似圖5,代碼在x86平臺就可以完成軟件開發(fā)和測試,然后再移植到多個國產眾核平臺。

    表4 數據傳輸性能測試結果對比

    圖11 使用編程模型的矩陣乘法主核和從核的軟件模塊

    SW26010處理器參數信息如表5所示,將代碼移植到SW26010處理器首先要完成一個核組內的矩陣乘法基礎計算代碼MATRIXCOMPUTE。利用SW26010下SIMD指令與vldr/vldc和ldder/lddec指令(寄存器互相廣播通信指令),達到高效的性能,最終在1個核組內以256×256規(guī)模計算矩陣的情況下,性能達到621 GFLOPs。

    DMA傳輸占比矩陣計算時間過長,如果DMA傳輸和矩陣計算串行運行會顯著降低矩陣乘法計算性能。而消息隊列模型中利用了異步DMA傳輸雙緩沖的思想,DMA傳輸啟動后,軟件系統(tǒng)無須等待DMA結束即可異步地進行其他工作,通過查詢DMA結果即可得知DMA是否已經完成。當從核接收消息時,開始對主核部分中已經處于MasterReady狀態(tài)的消息進行DMA傳輸(可能不止一個消息)。當從核部分具有兩個或以上消息塊,并且主核發(fā)送消息的速度比從核使用消息的速度快時,從核應用程序讀取消息和DMA傳輸過程就可以并行完成。對于矩陣乘法的表現如圖12所示,在主從核建立了3個消息隊列QA、QB、QC,QA、QB隊列均含有兩個消息塊表示為A0、A1、B0、B1,用于接收、小矩陣,只含有1個消息塊用于返回結果小矩陣,MATRIXCOMPUTE表示矩陣計算,操作時序如圖12所示,充分利用國產眾核處理器可以異步DMA傳輸的特性,將DMA傳輸和矩陣計算并行起來,減少傳輸對矩陣乘法性能的影響。

    最終想要移植矩陣乘法到國產眾核處理器SW26010,將代碼中矩陣的計算方法MATRIXCOMPUTE由x86下MKL庫的cblas_dgemm方法改為SW26010處理器一個核組內的矩陣乘法計算代碼并調整相應的傳輸數據,然后通過改變表6所述對應的編譯選項便可以移植運行。矩陣乘法代碼按照本文消息隊列模型具有極佳的可移植性。

    圖12 雙緩沖操作邏輯

    表5 國產眾核處理器SW26010配置

    表6 不同平臺的編譯選項

    本文模型提供了Makefile文件,在Makefile中修改表6所示的對應選項參數后,執(zhí)行make命令將本文模型編譯成主核與從核的鏈接庫libMHMessQueue.a、libSHMessQueue.a。最后,將應用程序和本鏈接庫編譯鏈接后即可生成不同平臺的應用程序。

    本文使用兩種傳輸接口分別進行了矩陣乘法性能測試,一種為使用系統(tǒng)原語DMA傳輸矩陣并計算的性能,另一種為本文的消息隊列模型傳輸矩陣并計算的性能,如表7所示,該表為一個核組內以256×256規(guī)模進行分塊傳輸計算的性能。使用系統(tǒng)原語DMA傳輸矩陣的代碼同樣使用了雙緩沖技術,矩陣乘法的性能達到556 GFLOPs,為單純進行矩陣計算性能的91%,剩下的一些消耗主要在每次小矩陣計算結束后傳輸從核小矩陣的傳輸開銷。而利用消息隊列模型進行矩陣計算的性能為504 GFLOPs,達到了系統(tǒng)原語傳輸矩陣并計算性能的88%,達到一個核組內256×256矩陣的性能的81%。主要因為從核訪問與主核共享的數據是從主存離散訪問,比如一些消息塊的狀態(tài)信息,對于這樣頻繁訪存的應用會有一小部份的性能損耗。

    表7 SW26010上的性能測試對比

    5 結語

    隨著集成電路技術水平的提高,單個微處理器所包含的內核數量持續(xù)增長,提高單個微處理器的性能是目前提升HPC系統(tǒng)整體性能的主要方法。我國自主開發(fā)了SW26010、Matrix 2000等一系列高性能眾核微處理器,在這些處理器上編程由于眾核處理器無Cache一致性等的結構特點,需要直接使用最底層的接口開發(fā)軟件,編程和調試非常困難,各平臺的高性能線程編程模型和SIMD指令集不能通用。

    本文針對國產高性能眾核處理器的線程編程庫不統(tǒng)一的問題,提供了線程控制接口層,用于在多個平臺下控制線程;針對每個計算核采用獨立的存儲器空間不具備Cache一致性,需要程序顯式控制系統(tǒng)主存與各個計算核存儲器之間的數據交換的問題,本文模型提供了消息隊列模型;針對國產高性能眾核處理器SIMD指令集不通用的問題,本文模型提供了SIMD抽象層。

    模型應用在口令猜測系統(tǒng)之中,并將系統(tǒng)移植到在多個平臺進行可移植性測試,比較了使用本文模型的代碼性能與直接使用最底層的接口開發(fā)的代碼性能的差異情況。實驗結果表明,使用本文模型增加了可移植性,減少了重復性工作,但性能在線程數較多時會有所下降,未來有待繼續(xù)改進。

    [1] 劉鑫,郭恒,孫茹君,等.“神威·太湖之光”計算機系統(tǒng)大規(guī)模應用特征分析與E級可擴展性研究[J].計算機學報,2018,41(10):2209-2220.(LIU X, GUO H, SUN R J, et al. The characteristic analysis and exascale scalability research of large scale parallel applications on “Sunway ·TaihuLight” supercomputer[J]. Chinese Journal of Computers, 2018,41(10):2209-2220.)

    [2] FU H, LIAO J, YANG J, et al. The Sunway TaihuLight supercomputer: system and applications[J]. Science China Information Sciences, 2016, 59(7): No.072001.

    [3] LU K, WANG Y, GUO Y, et al. MT-3000: a heterogeneous multi-zone processor for HPC[J]. CCF Transactions on High Performance Computing, 2022, 4(2):150-164.

    [4] 劉勝,盧凱,郭陽,等. 一種自主設計的面向E級高性能計算的異構融合加速器[J].計算機研究與發(fā)展,2021,58(06):1234-1237.(LIU S, LU K, GUO Y, et al. A self-designed heterogeneous fusion accelerator for exascale high-performance computing[J]. Journal of Computer Research and Development, 2021,58(06):1234-1237.)

    [5] NAGARAJAN V, SORIN D J, HILL M D, et al. A Primer on Memory Consistency and Cache Coherence[M]. 2nd ed. Cham: Springer, 2020: 10-11.

    [6] DE SUPINSKI B R, SCOGLAND T R W, DURAN A, et al. The ongoing evolution of OpenMP[J]. Proceedings of the IEEE, 2018, 106(11): 2004-2019.

    [7] ABBOTT D. Appendix B — Posix threads (pthreads) application programming interface[M]// Linux for Embedded and Real-time Applications, 2nd ed. New York: Elsevier Science Inc.,2006: 275-286.

    [8] BARKER D J, STUCKEY D C. A review of soluble microbial products (SMP) in wastewater treatment systems[J]. Water Research, 1999, 33(14): 3063-3082.

    [9] CAROTHERS C D, PERUMALLA K S, FUJIMOTO R M. The effect of state-saving in optimistic simulation on a cache-coherent non-uniform memory access architecture[C]// Proceedings of the 31st Conference on Winter Simulation: Simulation — A Bridge to the Future — Volume 2. New York: ACM, 1999: 1624-1633.

    [10] GUPTA K, SHARMA T. Changing trends in computer architecture: A comprehensive analysis of ARM and x86 processors[J]. International Journal of Scientific Research in Computer Science Engineering and Information Technology, 2021, 7(3): 619-631.

    [11] ROBISON A D. Composable parallel patterns with Intel Cilk Plus[J]. Computing in Science and Engineering, 2013, 15(2): 66-71.

    [12] VOSS M, ASENJO R, REINDERS J. Pro TBB: C++ Parallel Programming with Threading Building Blocks[M]. Berkeley, CA: Apress, 2019: 3-31

    [13] NOZAL R, BOSQUE J L. Exploiting co-execution with oneAPI: heterogeneity from a modern perspective[C]// Proceedings of the 27th International Conference on Parallel and Distributed Computing, LNTCS 12820. Cham: Springer, 2021: 501-516.

    [14] RAMAN S K, PENTKOVSKI V, KESHAVA J. Implementing streaming SIMD extensions on the Pentium III processor[J]. IEEE Micro, 2000, 20(4): 47-57.

    [15] AMIRI H, SHAHBAHRAMI A. SIMD programming using Intel vector extensions[J]. Journal of Parallel and Distributed Computing, 2020, 135: 83-100

    [16] STEPHENS N, BILES S, BOETTCHER M, et al. The ARM scalable vector extension[J]. IEEE Micro, 2017,37(2):26-39

    [17] ODAJIMA T, KODAMA Y, SATO M. Performance and power consumption analysis of ARM scalable vector extension[J]. The Journal of Supercomputing, 2021, 77(6): 5757-5778.

    [18] WANG D, ZHAO R, WANG Q, et al. Outer-loop auto-vectorization for SIMD architectures based on Open64 compiler[C]// Proceedings of the 17th International Conference on Parallel and Distributed Computing, Applications and Technologies. Piscataway: IEEE, 2016: 19-23.

    [19] TIAN X, SAITO H, SU E, et al. LLVM compiler implementation for explicit parallelization and SIMD vectorization[C]// Proceedings of the 4th Workshop on the LLVM Compiler Infrastructure in HPC. New York: ACM, 2017: No.4.

    [20] CEBRIáN J M, JAHRE M, NATVIG L. Optimized hardware for suboptimal software: the case for SIMD-aware benchmarks[C]// Proceedings of the 2014 IEEE International Symposium on Performance Analysis of Systems and Software. Piscataway: IEEE, 2014: 66-75.

    [21] KRETZ M, LINDENSTRUTH V. Vc: a C++ library for explicit vectorization[J]. Software: Practice and Experience, 2012, 42(11): 1409-1430.

    [22] WANG H, WU P, TANASE I G, et al. Simple, portable and fast SIMD intrinsic programming: generic simd library[C]//Proceedings of the 2014 ACM SIGPLAN Workshop on Programming Models for SIMD/Vector Processing. New York: ACM, 2014: 9-16.

    [23] FRIGO M, JOHNSON S G. FFTW: an adaptive software architecture for the FFT[C]// Proceedings of the 1998 IEEE International Conference on Acoustics, Speech and Signal Processing, Volume 3. Piscataway: IEEE, 1998: 1381-1384.

    [24] 華南理工大學,廣東省科技基礎條件平臺中心.基于局部存儲器的主核與從核之間消息傳遞系統(tǒng): 2023100756041[P]. 2023-06-23. (South China University of Technology, Guangdong Science and Technology Infrastructure Center. Message transfer system between master and slave cores based on local memory: 2023100756041.1[P]. 2023-06-23.)

    [25] MAFFIONE V, LETTIERI G, RIZZO L. Cache-aware design of general-purpose Single-Producer-Single-Consumer queues[J]. Software: Practice and Experience, 2019, 49(5): 748-779.

    [26] ALMAN J, WILLIAMS V V. A refined laser method and faster matrix multiplication[C]// Proceedings of the 32nd Annual ACM-SIAM Symposium on Discrete Algorithms. Philadelphia, PA: SIAM, 2021: 522-539.

    Programming model for domestic high-performance many-core processor

    CHEN Hu1,2, ZHOU Pengling1*

    (1,,510006,;2,510033,)

    Programming on domestic high-performance many-core processors has requirement of using the lowest-level interface to develop software, making programming and debugging very difficult. Moreover, the limitations of programming models for high-performance software on these platforms and the absence of common computing software are identified as factors that contribute to repetitive development work. Aiming at the above problems, a generalized programming model and corresponding support library were realized: on the one hand, the thread-level parallelism of domestic high-performance many-core processors based on the message queue mechanism was developed; on the other hand, the data-level parallelism on slave cores based on the Single Instruction Multiple Data (SIMD) programming model was developed. Firstly, the architecture of the domestic high-performance multicore processor was abstracted. Then, a message queue mechanism was designed for the proposed model, along with a set of heterogeneous parallel programming interfaces, including system parameter interface, slave core thread control interface, message queue interface, and SIMD abstraction interface. Finally, a new software development model and methodology for high-performance computing were formed on the basis of the above, which was convenient for users to develop parallel computing software based on domestic high-performance many-core processors. The results of performance transmission test show that the transmission bandwidth of the proposed model on domestic many-core processors generally reaches 90% of the peak DMA(Direct Memory Access) bandwidth when a few multi-cores are turned on; and that the transmission bandwidth of the message queue model generally reaches 70% of the peak DMA bandwidth when a large number of multi-cores are turned on. In matrix multiplication experiments, the performance of the proposed model reaches 90% of the performance of the system’s original primitives for transferring matrices and calculating them; in password guessing system, the performance of the proposed model code is basically the same as that of the code developed by using the lowest-level interface directly. The proposed generalized programming model and support framework make the High Performance Computing (HPC) software development easier and more portable, which can help to promote the development of domestic independent HPC software.

    domestic many-core processor; Single Instruction Multiple Data (SIMD); parallel programming model; SW26010; message queue model

    1001-9081(2023)11-3517-10

    10.11772/j.issn.1001-9081.2022101548

    2022?10?14;

    2023?04?22;

    國家自然科學基金重點項目(U1836207); 廣東省高性能計算重點實驗室開放課題。

    陳虎(1974—),男,江蘇南京人,副教授,博士,主要研究方向:高性能計算、信息安全; 周鵬靈(1999—),男,湖北鄂州人,碩士研究生,主要研究方向:高性能計算、信息安全。

    TP311.1

    A

    2023?04?24。

    This work is partially supported by Key Project of National Natural Science Foundation of China (U1836207), Open Development Project of Guangdong Provincial Key Laboratory of High Performance Computing.

    CHEN Hu, born in 1974, Ph. D., associate professor. His research interests include high-performance computing, information security.

    ZHOU Pengling, born in 1999, M. S. candidate. His research interests include high-performance computing, information security.

    猜你喜歡
    線程隊列高性能
    隊列里的小秘密
    基于多隊列切換的SDN擁塞控制*
    軟件(2020年3期)2020-04-20 00:58:44
    在隊列里
    豐田加速駛入自動駕駛隊列
    淺談linux多線程協作
    一款高性能BGO探測器的研發(fā)
    電子制作(2017年19期)2017-02-02 07:08:49
    高性能砼在橋梁中的應用
    SATA推出全新高性能噴槍SATAjet 5000 B
    高性能可變進氣岐管降低二氧化碳排放
    汽車零部件(2014年8期)2014-12-28 02:03:03
    Linux線程實現技術研究
    校园人妻丝袜中文字幕| 中文字幕精品免费在线观看视频 | 汤姆久久久久久久影院中文字幕| 另类亚洲欧美激情| 日本91视频免费播放| 少妇人妻精品综合一区二区| 国语对白做爰xxxⅹ性视频网站| 少妇的逼好多水| 人人妻人人澡人人看| 天堂中文最新版在线下载| 久久亚洲国产成人精品v| 精品久久久噜噜| 97在线人人人人妻| 午夜精品国产一区二区电影| 99热6这里只有精品| av女优亚洲男人天堂| 一二三四中文在线观看免费高清| 亚洲欧洲精品一区二区精品久久久 | 亚洲av不卡在线观看| 三级国产精品片| 五月天丁香电影| 午夜久久久在线观看| 久久久久视频综合| 国产真实伦视频高清在线观看| 亚洲精品亚洲一区二区| 亚洲欧美精品自产自拍| 五月开心婷婷网| 欧美老熟妇乱子伦牲交| 国产日韩欧美在线精品| 纯流量卡能插随身wifi吗| 97精品久久久久久久久久精品| 久久青草综合色| 9色porny在线观看| 一级片'在线观看视频| 我的女老师完整版在线观看| 日韩伦理黄色片| 日本色播在线视频| 亚洲av中文av极速乱| 你懂的网址亚洲精品在线观看| 亚洲中文av在线| 久久av网站| 久久精品熟女亚洲av麻豆精品| 乱人伦中国视频| 晚上一个人看的免费电影| 性色av一级| 秋霞在线观看毛片| 精品一区二区三区视频在线| 六月丁香七月| 免费大片18禁| 多毛熟女@视频| 精品久久国产蜜桃| 搡老乐熟女国产| 99九九线精品视频在线观看视频| 亚洲欧洲精品一区二区精品久久久 | av.在线天堂| 亚洲一级一片aⅴ在线观看| 五月玫瑰六月丁香| 精品久久国产蜜桃| 精品少妇久久久久久888优播| 毛片一级片免费看久久久久| 午夜91福利影院| 国产精品一区www在线观看| 如何舔出高潮| 中文字幕人妻熟人妻熟丝袜美| 少妇被粗大的猛进出69影院 | 美女视频免费永久观看网站| 人妻制服诱惑在线中文字幕| 国产欧美另类精品又又久久亚洲欧美| 国产免费视频播放在线视频| 高清毛片免费看| 国产精品一区二区三区四区免费观看| 亚洲伊人久久精品综合| 国产淫片久久久久久久久| 亚洲国产毛片av蜜桃av| 国产有黄有色有爽视频| 一边亲一边摸免费视频| 97精品久久久久久久久久精品| 成人午夜精彩视频在线观看| 国产午夜精品久久久久久一区二区三区| 我要看日韩黄色一级片| 韩国高清视频一区二区三区| 日韩成人伦理影院| 久久国产乱子免费精品| av在线播放精品| 丝袜在线中文字幕| 亚洲久久久国产精品| 一区二区三区精品91| 男女边吃奶边做爰视频| 建设人人有责人人尽责人人享有的| 亚洲性久久影院| 午夜av观看不卡| 久久6这里有精品| 婷婷色av中文字幕| 久久久国产精品麻豆| 亚洲怡红院男人天堂| 卡戴珊不雅视频在线播放| 国产欧美日韩一区二区三区在线 | 久久99蜜桃精品久久| 欧美性感艳星| 少妇 在线观看| 欧美变态另类bdsm刘玥| 日本色播在线视频| 国产在视频线精品| 一级爰片在线观看| 久久久午夜欧美精品| 久久ye,这里只有精品| 国产亚洲一区二区精品| 亚洲av二区三区四区| 国产成人免费观看mmmm| 最近的中文字幕免费完整| 少妇的逼水好多| 汤姆久久久久久久影院中文字幕| 人人妻人人添人人爽欧美一区卜| 国产精品伦人一区二区| 亚洲图色成人| 九九在线视频观看精品| 日韩一本色道免费dvd| 一个人免费看片子| 日韩欧美一区视频在线观看 | 亚洲av成人精品一二三区| 免费看光身美女| 99视频精品全部免费 在线| 久久久欧美国产精品| 免费少妇av软件| 国产亚洲一区二区精品| 丝袜脚勾引网站| a级毛片免费高清观看在线播放| 久久99热这里只频精品6学生| 99九九线精品视频在线观看视频| 成人国产av品久久久| 久久精品熟女亚洲av麻豆精品| 日韩一区二区视频免费看| 免费少妇av软件| 99热这里只有精品一区| 欧美日韩视频高清一区二区三区二| 精品午夜福利在线看| 精品久久久久久久久av| 一级毛片电影观看| 亚洲内射少妇av| 美女国产视频在线观看| 亚州av有码| 亚洲精品国产色婷婷电影| av在线播放精品| 一区二区三区乱码不卡18| 麻豆成人午夜福利视频| 国产精品久久久久成人av| 99久久中文字幕三级久久日本| 日本黄大片高清| 精品久久久噜噜| 免费少妇av软件| 久久婷婷青草| 国产精品99久久久久久久久| 丝袜喷水一区| 赤兔流量卡办理| 精品人妻熟女毛片av久久网站| 国产一区二区三区综合在线观看 | 亚洲欧美一区二区三区黑人 | 久热这里只有精品99| 三上悠亚av全集在线观看 | 国产成人精品福利久久| 午夜激情福利司机影院| 国产精品嫩草影院av在线观看| 熟女人妻精品中文字幕| 97在线视频观看| 国产精品福利在线免费观看| 人人妻人人澡人人爽人人夜夜| 国产伦在线观看视频一区| 少妇的逼水好多| 九草在线视频观看| av视频免费观看在线观看| 十八禁网站网址无遮挡 | 精品午夜福利在线看| 欧美高清成人免费视频www| 亚洲国产精品国产精品| 我要看黄色一级片免费的| 国产日韩一区二区三区精品不卡 | 亚洲性久久影院| 伦理电影大哥的女人| 狠狠精品人妻久久久久久综合| 18禁在线无遮挡免费观看视频| 亚洲精品乱久久久久久| 亚洲自偷自拍三级| 一级,二级,三级黄色视频| 亚洲美女黄色视频免费看| a级一级毛片免费在线观看| 亚洲精品第二区| 中文字幕精品免费在线观看视频 | 亚州av有码| 久久久久久久国产电影| 久久精品夜色国产| 欧美性感艳星| 99热网站在线观看| 亚洲国产av新网站| 丰满乱子伦码专区| 一本久久精品| 久久精品久久久久久久性| 国产亚洲一区二区精品| 久久久a久久爽久久v久久| 久久毛片免费看一区二区三区| 久久久国产欧美日韩av| 国产精品麻豆人妻色哟哟久久| a级片在线免费高清观看视频| 久久女婷五月综合色啪小说| 在线看a的网站| 三级国产精品欧美在线观看| 如日韩欧美国产精品一区二区三区 | 肉色欧美久久久久久久蜜桃| 国产熟女欧美一区二区| 成人综合一区亚洲| 免费少妇av软件| 国产成人aa在线观看| 免费观看无遮挡的男女| 国产亚洲欧美精品永久| 亚洲一区二区三区欧美精品| 精品熟女少妇av免费看| 欧美xxⅹ黑人| 肉色欧美久久久久久久蜜桃| 99久久精品一区二区三区| 两个人免费观看高清视频 | 国产伦精品一区二区三区四那| 久久久久国产精品人妻一区二区| 亚洲色图综合在线观看| 少妇人妻 视频| 国产高清不卡午夜福利| 中国美白少妇内射xxxbb| a级片在线免费高清观看视频| 亚洲无线观看免费| 亚洲经典国产精华液单| 最新的欧美精品一区二区| 我的女老师完整版在线观看| 黄色毛片三级朝国网站 | 男女无遮挡免费网站观看| 欧美日本中文国产一区发布| 男女边摸边吃奶| 国产成人精品婷婷| 我要看黄色一级片免费的| 中文字幕人妻熟人妻熟丝袜美| 亚洲欧美精品自产自拍| 我要看日韩黄色一级片| 国产91av在线免费观看| 伊人亚洲综合成人网| 美女内射精品一级片tv| 亚洲精华国产精华液的使用体验| 日本wwww免费看| 男人和女人高潮做爰伦理| 亚洲,欧美,日韩| 亚洲欧美精品专区久久| 男人和女人高潮做爰伦理| 精品酒店卫生间| 一本—道久久a久久精品蜜桃钙片| 日韩 亚洲 欧美在线| 在线精品无人区一区二区三| 久久午夜综合久久蜜桃| 国产91av在线免费观看| 在线观看av片永久免费下载| 成人18禁高潮啪啪吃奶动态图 | 亚洲四区av| 久久久欧美国产精品| 哪个播放器可以免费观看大片| 午夜91福利影院| 亚洲性久久影院| 色吧在线观看| 国产精品国产三级国产专区5o| 色94色欧美一区二区| av又黄又爽大尺度在线免费看| 免费黄色在线免费观看| 夜夜看夜夜爽夜夜摸| xxx大片免费视频| 亚洲精品日本国产第一区| 国产淫语在线视频| 91aial.com中文字幕在线观看| 9色porny在线观看| 一个人免费看片子| 精品久久久久久久久亚洲| 午夜福利影视在线免费观看| 国产探花极品一区二区| 国产国拍精品亚洲av在线观看| 成年av动漫网址| 22中文网久久字幕| 国产高清有码在线观看视频| 免费少妇av软件| 国产一区二区三区av在线| 最近手机中文字幕大全| 久久久欧美国产精品| 欧美日韩精品成人综合77777| 最近2019中文字幕mv第一页| 国产白丝娇喘喷水9色精品| 777米奇影视久久| 欧美丝袜亚洲另类| 交换朋友夫妻互换小说| 一区二区三区四区激情视频| 另类亚洲欧美激情| 一级毛片 在线播放| 国产精品一二三区在线看| av视频免费观看在线观看| 国产欧美日韩综合在线一区二区 | 国产高清三级在线| 91aial.com中文字幕在线观看| 国产精品久久久久成人av| 国产伦在线观看视频一区| 亚洲一级一片aⅴ在线观看| 亚洲欧美一区二区三区国产| 岛国毛片在线播放| 日本猛色少妇xxxxx猛交久久| 国产精品蜜桃在线观看| 中文天堂在线官网| 日韩欧美精品免费久久| 国产成人精品福利久久| 国产亚洲欧美精品永久| 老女人水多毛片| 如日韩欧美国产精品一区二区三区 | 亚洲国产精品一区二区三区在线| 国产日韩一区二区三区精品不卡 | 久久久精品94久久精品| 亚洲美女搞黄在线观看| av播播在线观看一区| 色视频在线一区二区三区| 亚洲欧美成人精品一区二区| 色吧在线观看| 久久久久久久国产电影| 欧美亚洲 丝袜 人妻 在线| 老司机影院成人| 精品少妇黑人巨大在线播放| 啦啦啦在线观看免费高清www| 精品亚洲成国产av| av免费观看日本| 麻豆成人午夜福利视频| 午夜福利在线观看免费完整高清在| 在线观看美女被高潮喷水网站| 欧美97在线视频| 欧美精品一区二区免费开放| 成年人午夜在线观看视频| 国产成人精品福利久久| 久久久精品94久久精品| 午夜免费观看性视频| 日韩伦理黄色片| 国产美女午夜福利| 中文资源天堂在线| 国产一区亚洲一区在线观看| 亚洲国产毛片av蜜桃av| 婷婷色综合大香蕉| 秋霞在线观看毛片| 美女大奶头黄色视频| 久久影院123| 亚洲国产欧美日韩在线播放 | 日本wwww免费看| 国产黄色视频一区二区在线观看| 99精国产麻豆久久婷婷| 国产综合精华液| 精品视频人人做人人爽| 亚洲美女黄色视频免费看| 99热这里只有是精品在线观看| 亚洲国产精品一区二区三区在线| 国语对白做爰xxxⅹ性视频网站| 色5月婷婷丁香| 精品久久久久久电影网| 久久99热6这里只有精品| 亚洲电影在线观看av| 偷拍熟女少妇极品色| 中文资源天堂在线| 国产亚洲欧美精品永久| 老女人水多毛片| 少妇人妻一区二区三区视频| 在线亚洲精品国产二区图片欧美 | 蜜臀久久99精品久久宅男| 亚洲图色成人| 欧美亚洲 丝袜 人妻 在线| 夜夜骑夜夜射夜夜干| 黄色一级大片看看| 久久综合国产亚洲精品| 欧美老熟妇乱子伦牲交| 激情五月婷婷亚洲| 一级爰片在线观看| 午夜激情久久久久久久| 一个人免费看片子| 日本色播在线视频| 久久久久久久国产电影| 国产精品福利在线免费观看| 日本欧美国产在线视频| 天堂中文最新版在线下载| 久久6这里有精品| 国产毛片在线视频| 亚洲国产精品一区三区| 伊人久久精品亚洲午夜| 国产高清国产精品国产三级| 美女中出高潮动态图| 亚洲美女视频黄频| 极品教师在线视频| 哪个播放器可以免费观看大片| 晚上一个人看的免费电影| 精品人妻偷拍中文字幕| 国产在视频线精品| 久久女婷五月综合色啪小说| 啦啦啦视频在线资源免费观看| 日韩视频在线欧美| 中文精品一卡2卡3卡4更新| 高清在线视频一区二区三区| 国内揄拍国产精品人妻在线| 国产无遮挡羞羞视频在线观看| 国产免费一级a男人的天堂| 嫩草影院入口| 熟女av电影| 一级毛片久久久久久久久女| 国产在线男女| 亚洲av福利一区| 乱码一卡2卡4卡精品| 91午夜精品亚洲一区二区三区| 国产亚洲精品久久久com| 色网站视频免费| 99久久精品国产国产毛片| 成人免费观看视频高清| 久久精品久久精品一区二区三区| 老司机影院毛片| 国产成人免费无遮挡视频| 一个人看视频在线观看www免费| 国产精品免费大片| 日韩视频在线欧美| 一本色道久久久久久精品综合| 国产乱来视频区| 寂寞人妻少妇视频99o| 婷婷色综合www| 三级经典国产精品| 久久97久久精品| 中国美白少妇内射xxxbb| 国产亚洲最大av| a级片在线免费高清观看视频| 多毛熟女@视频| 大又大粗又爽又黄少妇毛片口| 少妇人妻久久综合中文| 狠狠精品人妻久久久久久综合| 国产免费一级a男人的天堂| 精品少妇内射三级| 夜夜看夜夜爽夜夜摸| 六月丁香七月| 老司机影院毛片| 久久韩国三级中文字幕| 亚洲中文av在线| 久久精品久久精品一区二区三区| 最近中文字幕2019免费版| 嫩草影院入口| 久久国产精品大桥未久av | 熟妇人妻不卡中文字幕| 桃花免费在线播放| 日韩电影二区| 一级毛片电影观看| a级一级毛片免费在线观看| 青青草视频在线视频观看| 亚洲国产日韩一区二区| 校园人妻丝袜中文字幕| 久久av网站| 亚洲一级一片aⅴ在线观看| 午夜免费观看性视频| 亚洲内射少妇av| 日韩电影二区| 九色成人免费人妻av| 91成人精品电影| 国内揄拍国产精品人妻在线| 亚洲精品国产av蜜桃| 日韩伦理黄色片| 欧美成人精品欧美一级黄| 在线观看免费高清a一片| 日本黄色日本黄色录像| 亚洲精品久久午夜乱码| 中文字幕人妻熟人妻熟丝袜美| 九九久久精品国产亚洲av麻豆| 久久精品国产a三级三级三级| 久久精品久久久久久噜噜老黄| 极品教师在线视频| 欧美bdsm另类| 国产精品麻豆人妻色哟哟久久| 一本—道久久a久久精品蜜桃钙片| 久久久精品免费免费高清| 九色成人免费人妻av| 熟女av电影| 美女xxoo啪啪120秒动态图| 国产成人午夜福利电影在线观看| av国产精品久久久久影院| 日本黄色日本黄色录像| 9色porny在线观看| 亚洲成人av在线免费| 日韩欧美精品免费久久| 一级,二级,三级黄色视频| 亚洲精品第二区| 欧美亚洲 丝袜 人妻 在线| 亚洲美女搞黄在线观看| 精品一区二区免费观看| 精品人妻一区二区三区麻豆| 一边亲一边摸免费视频| 午夜免费男女啪啪视频观看| 国产精品欧美亚洲77777| 少妇被粗大的猛进出69影院 | 少妇的逼水好多| av在线播放精品| 国产精品.久久久| 国产综合精华液| 黄色一级大片看看| 国产免费一区二区三区四区乱码| 日韩欧美 国产精品| 人妻少妇偷人精品九色| 91午夜精品亚洲一区二区三区| 亚洲国产成人一精品久久久| 日韩中字成人| 国产日韩欧美在线精品| 亚洲国产欧美在线一区| 午夜免费观看性视频| 久久精品久久精品一区二区三区| 国产av一区二区精品久久| 黄色毛片三级朝国网站 | 搡老乐熟女国产| 日韩成人伦理影院| 高清不卡的av网站| 大话2 男鬼变身卡| 乱系列少妇在线播放| 久久精品国产自在天天线| 欧美成人午夜免费资源| 在线观看三级黄色| 少妇的逼水好多| 搡老乐熟女国产| 国产高清不卡午夜福利| 在线 av 中文字幕| 69精品国产乱码久久久| 亚洲国产精品国产精品| 美女主播在线视频| 大又大粗又爽又黄少妇毛片口| 亚洲精品国产成人久久av| 黄色日韩在线| 在线 av 中文字幕| 少妇被粗大猛烈的视频| 内地一区二区视频在线| 色吧在线观看| 欧美+日韩+精品| av天堂久久9| 麻豆成人av视频| 中国国产av一级| 久久精品国产亚洲av涩爱| 一二三四中文在线观看免费高清| 免费看光身美女| 久久青草综合色| 伦理电影大哥的女人| 欧美精品亚洲一区二区| 欧美日韩视频精品一区| 中文字幕久久专区| 激情五月婷婷亚洲| 色网站视频免费| 亚洲欧美中文字幕日韩二区| 国产极品粉嫩免费观看在线 | 热re99久久国产66热| 91久久精品电影网| 啦啦啦啦在线视频资源| 91aial.com中文字幕在线观看| 久久久久久久亚洲中文字幕| 91久久精品国产一区二区三区| 不卡视频在线观看欧美| 精品少妇内射三级| 汤姆久久久久久久影院中文字幕| 久久久久久久国产电影| 免费不卡的大黄色大毛片视频在线观看| 国产伦在线观看视频一区| 精品少妇内射三级| 国产女主播在线喷水免费视频网站| 久久久久国产精品人妻一区二区| 日本vs欧美在线观看视频 | 日韩av免费高清视频| 久久精品熟女亚洲av麻豆精品| 久久 成人 亚洲| 在线天堂最新版资源| a 毛片基地| 人人妻人人澡人人看| 新久久久久国产一级毛片| 国产综合精华液| 亚洲中文av在线| 午夜激情福利司机影院| 国产极品粉嫩免费观看在线 | 精品少妇内射三级| 日本-黄色视频高清免费观看| 国产黄色视频一区二区在线观看| 观看av在线不卡| 日韩一区二区视频免费看| 色视频在线一区二区三区| 色网站视频免费| 日韩欧美精品免费久久| 午夜av观看不卡| 精品亚洲成国产av| 多毛熟女@视频| 国产伦在线观看视频一区| 久久久久网色| 自拍偷自拍亚洲精品老妇| 亚洲av在线观看美女高潮| 美女xxoo啪啪120秒动态图| 久久女婷五月综合色啪小说| 亚洲色图综合在线观看| h日本视频在线播放| 少妇裸体淫交视频免费看高清| 纵有疾风起免费观看全集完整版| 国产无遮挡羞羞视频在线观看| 国产精品秋霞免费鲁丝片| 中文字幕久久专区| 亚洲高清免费不卡视频| 成人毛片a级毛片在线播放| 国产 精品1| 色吧在线观看| 欧美老熟妇乱子伦牲交| 一区二区三区免费毛片| 国产免费福利视频在线观看| 国产精品一二三区在线看| 极品人妻少妇av视频| 赤兔流量卡办理| 亚洲四区av| 国产真实伦视频高清在线观看| 一个人免费看片子| 少妇猛男粗大的猛烈进出视频| 成人毛片60女人毛片免费| 天堂俺去俺来也www色官网| 亚洲精品,欧美精品| 夜夜爽夜夜爽视频|