• <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線程實現技術研究
    久久影院123| 美女cb高潮喷水在线观看| 少妇人妻 视频| 亚洲精品视频女| 中国美白少妇内射xxxbb| 中文字幕人妻熟人妻熟丝袜美| 国产精品一区www在线观看| 成人影院久久| 十分钟在线观看高清视频www| 欧美日韩成人在线一区二区| 肉色欧美久久久久久久蜜桃| 国产av一区二区精品久久| 久久久久久久大尺度免费视频| av女优亚洲男人天堂| 国产在视频线精品| 一级片'在线观看视频| 美女国产视频在线观看| 国产黄色免费在线视频| 午夜福利在线观看免费完整高清在| 人人妻人人爽人人添夜夜欢视频| 赤兔流量卡办理| 日韩视频在线欧美| 乱人伦中国视频| 久久久久久久久久久丰满| 欧美精品高潮呻吟av久久| 十八禁高潮呻吟视频| 欧美丝袜亚洲另类| 人妻少妇偷人精品九色| 国产亚洲av片在线观看秒播厂| 九色亚洲精品在线播放| 丰满少妇做爰视频| 丰满迷人的少妇在线观看| 免费不卡的大黄色大毛片视频在线观看| 国产一区二区在线观看日韩| a级毛片在线看网站| 美女脱内裤让男人舔精品视频| 欧美激情国产日韩精品一区| 日本欧美视频一区| 亚洲图色成人| 久久久久网色| 精品国产国语对白av| 在线观看美女被高潮喷水网站| 一边亲一边摸免费视频| 亚洲av.av天堂| 五月伊人婷婷丁香| 成人手机av| 91久久精品电影网| 看十八女毛片水多多多| 赤兔流量卡办理| 考比视频在线观看| 在线观看一区二区三区激情| 91成人精品电影| 婷婷成人精品国产| 亚洲精品第二区| av不卡在线播放| 中文字幕精品免费在线观看视频 | 国产在线免费精品| 熟女av电影| 国产成人午夜福利电影在线观看| 丁香六月天网| 女的被弄到高潮叫床怎么办| 亚洲精品中文字幕在线视频| 国产片特级美女逼逼视频| 国产免费一区二区三区四区乱码| 欧美性感艳星| 综合色丁香网| 精品少妇久久久久久888优播| 久久ye,这里只有精品| 欧美少妇被猛烈插入视频| 亚洲av男天堂| 观看av在线不卡| 亚洲一区二区三区欧美精品| 亚洲av日韩在线播放| 亚洲精品aⅴ在线观看| 在线天堂最新版资源| 一本一本久久a久久精品综合妖精 国产伦在线观看视频一区 | 久久久久久久亚洲中文字幕| 97在线人人人人妻| 午夜精品国产一区二区电影| 国产日韩欧美视频二区| av国产久精品久网站免费入址| 人妻人人澡人人爽人人| av在线播放精品| 丰满乱子伦码专区| 久久人人爽人人爽人人片va| 欧美精品国产亚洲| xxx大片免费视频| 爱豆传媒免费全集在线观看| 久久精品久久久久久噜噜老黄| 最黄视频免费看| 男女边摸边吃奶| 人成视频在线观看免费观看| 寂寞人妻少妇视频99o| 国产成人精品无人区| 日本黄大片高清| 肉色欧美久久久久久久蜜桃| 大陆偷拍与自拍| 成年人免费黄色播放视频| 久久亚洲国产成人精品v| 少妇的逼水好多| 久久精品熟女亚洲av麻豆精品| 国产高清三级在线| 久久久久久久亚洲中文字幕| 91成人精品电影| 国产亚洲av片在线观看秒播厂| 亚洲精品国产av蜜桃| 亚洲成人一二三区av| 少妇人妻精品综合一区二区| 99热6这里只有精品| 久久久久精品性色| 亚洲欧美一区二区三区国产| 精品国产国语对白av| 免费观看的影片在线观看| 夜夜骑夜夜射夜夜干| 亚洲成人手机| 夜夜骑夜夜射夜夜干| 美女cb高潮喷水在线观看| 婷婷色综合www| 91精品伊人久久大香线蕉| 久久精品久久精品一区二区三区| 18禁动态无遮挡网站| 亚洲精品国产av蜜桃| 丁香六月天网| 精品人妻一区二区三区麻豆| 少妇精品久久久久久久| 国产亚洲精品第一综合不卡 | a级毛片黄视频| videossex国产| 一二三四中文在线观看免费高清| 欧美日韩国产mv在线观看视频| videossex国产| 国产精品久久久久成人av| 一级毛片我不卡| 男男h啪啪无遮挡| 国产成人a∨麻豆精品| 中文字幕精品免费在线观看视频 | 99久久综合免费| 啦啦啦视频在线资源免费观看| 日韩成人av中文字幕在线观看| 天堂8中文在线网| 99久久综合免费| 国内精品宾馆在线| 中文字幕精品免费在线观看视频 | 色婷婷久久久亚洲欧美| 春色校园在线视频观看| 高清欧美精品videossex| 春色校园在线视频观看| 最后的刺客免费高清国语| 久久国产亚洲av麻豆专区| 国产精品欧美亚洲77777| 精品一区在线观看国产| 精品一区在线观看国产| 国产精品一区二区在线不卡| 爱豆传媒免费全集在线观看| 国产精品国产av在线观看| 亚洲伊人久久精品综合| 99九九线精品视频在线观看视频| 亚洲不卡免费看| 色婷婷av一区二区三区视频| 国产一区亚洲一区在线观看| 国产欧美另类精品又又久久亚洲欧美| 亚洲天堂av无毛| 欧美精品一区二区免费开放| 美女大奶头黄色视频| 亚洲精品久久久久久婷婷小说| 精品人妻偷拍中文字幕| 三级国产精品欧美在线观看| 久久久国产精品麻豆| 久久精品国产亚洲av涩爱| kizo精华| 日韩欧美一区视频在线观看| 久久久久久人妻| 亚洲成人一二三区av| av在线app专区| 国产成人午夜福利电影在线观看| 亚洲少妇的诱惑av| 国产黄色视频一区二区在线观看| av国产精品久久久久影院| 日本猛色少妇xxxxx猛交久久| 最近最新中文字幕免费大全7| 制服诱惑二区| 高清黄色对白视频在线免费看| 亚洲av成人精品一区久久| 91精品国产九色| 99久国产av精品国产电影| 欧美日韩国产mv在线观看视频| 国模一区二区三区四区视频| 最后的刺客免费高清国语| 99久久综合免费| 最后的刺客免费高清国语| 免费观看的影片在线观看| 黄色视频在线播放观看不卡| 久久精品夜色国产| 日本黄色片子视频| 欧美日韩亚洲高清精品| 高清在线视频一区二区三区| 久久国产精品男人的天堂亚洲 | 亚洲国产成人一精品久久久| 亚洲人成网站在线播| 少妇精品久久久久久久| 一区二区日韩欧美中文字幕 | 国语对白做爰xxxⅹ性视频网站| 亚洲四区av| 秋霞在线观看毛片| 如何舔出高潮| 自线自在国产av| tube8黄色片| 国产又色又爽无遮挡免| 亚洲精品美女久久av网站| 国产av精品麻豆| 一级片'在线观看视频| 国产国语露脸激情在线看| 免费不卡的大黄色大毛片视频在线观看| 久久久国产一区二区| 制服人妻中文乱码| 黄色毛片三级朝国网站| 美女cb高潮喷水在线观看| 亚洲欧美日韩另类电影网站| 乱人伦中国视频| 日韩一区二区视频免费看| 欧美+日韩+精品| 99精国产麻豆久久婷婷| 亚洲av日韩在线播放| 免费人妻精品一区二区三区视频| 看非洲黑人一级黄片| 日韩三级伦理在线观看| 久久影院123| 国语对白做爰xxxⅹ性视频网站| 在线 av 中文字幕| 久久精品久久久久久久性| 高清毛片免费看| 秋霞伦理黄片| 国产精品一区二区三区四区免费观看| 免费观看av网站的网址| 一级,二级,三级黄色视频| 制服诱惑二区| 日韩三级伦理在线观看| 丰满迷人的少妇在线观看| 99久久综合免费| 曰老女人黄片| 妹子高潮喷水视频| 国产在线一区二区三区精| 久久精品熟女亚洲av麻豆精品| 日韩成人伦理影院| videosex国产| 伊人亚洲综合成人网| 少妇丰满av| 国产成人精品婷婷| 国产男女内射视频| 精品少妇内射三级| 最近的中文字幕免费完整| 国产在线一区二区三区精| 99久久精品一区二区三区| 女性生殖器流出的白浆| 免费观看av网站的网址| 亚洲色图 男人天堂 中文字幕 | 亚洲av二区三区四区| 免费高清在线观看日韩| 汤姆久久久久久久影院中文字幕| 日日撸夜夜添| 国产精品女同一区二区软件| 色婷婷久久久亚洲欧美| 特大巨黑吊av在线直播| 精品一区二区三卡| 国产精品.久久久| 日韩人妻高清精品专区| 久久久久久伊人网av| 91久久精品国产一区二区三区| 丝袜美足系列| 久久人人爽人人片av| 中文字幕人妻熟人妻熟丝袜美| 在线播放无遮挡| 一个人看视频在线观看www免费| 国产精品久久久久久久电影| freevideosex欧美| 日韩三级伦理在线观看| 成人无遮挡网站| 欧美成人精品欧美一级黄| 美女中出高潮动态图| 大陆偷拍与自拍| 免费人妻精品一区二区三区视频| 国产精品国产三级国产av玫瑰| xxxhd国产人妻xxx| 午夜激情av网站| 精品人妻一区二区三区麻豆| 不卡视频在线观看欧美| 天天躁夜夜躁狠狠久久av| av又黄又爽大尺度在线免费看| 亚洲色图综合在线观看| 午夜激情福利司机影院| 十八禁高潮呻吟视频| 亚洲国产日韩一区二区| 汤姆久久久久久久影院中文字幕| 亚州av有码| 午夜福利视频精品| 蜜桃国产av成人99| 两个人免费观看高清视频| .国产精品久久| 日本色播在线视频| 精品一区在线观看国产| 亚洲av免费高清在线观看| 亚洲av在线观看美女高潮| 亚洲久久久国产精品| 91久久精品电影网| 国产欧美另类精品又又久久亚洲欧美| 王馨瑶露胸无遮挡在线观看| 国产精品久久久久久久久免| 日韩一区二区视频免费看| 国产精品久久久久久久电影| 一区二区av电影网| 在线观看美女被高潮喷水网站| 少妇 在线观看| 久久婷婷青草| 亚洲欧美一区二区三区黑人 | 少妇人妻精品综合一区二区| 亚洲美女搞黄在线观看| 亚洲性久久影院| 亚洲色图 男人天堂 中文字幕 | 高清黄色对白视频在线免费看| 婷婷色综合大香蕉| 午夜免费鲁丝| 日本黄色片子视频| 涩涩av久久男人的天堂| videosex国产| 亚洲精品日韩av片在线观看| 国产日韩一区二区三区精品不卡 | 国产欧美日韩一区二区三区在线 | 国产成人精品婷婷| 国产免费一区二区三区四区乱码| 美女视频免费永久观看网站| 日韩在线高清观看一区二区三区| 母亲3免费完整高清在线观看 | 毛片一级片免费看久久久久| 亚洲精品中文字幕在线视频| 精品人妻熟女毛片av久久网站| freevideosex欧美| av一本久久久久| 少妇 在线观看| 国产午夜精品一二区理论片| 男女边摸边吃奶| 一级毛片电影观看| 午夜激情福利司机影院| 赤兔流量卡办理| 久久久亚洲精品成人影院| 久久久国产一区二区| 亚洲国产色片| 成年女人在线观看亚洲视频| 亚洲av日韩在线播放| 黑人高潮一二区| 亚洲四区av| 少妇被粗大的猛进出69影院 | 美女视频免费永久观看网站| 日韩在线高清观看一区二区三区| 亚洲精品视频女| a级毛片免费高清观看在线播放| 在线免费观看不下载黄p国产| 亚洲欧美成人精品一区二区| 日韩一本色道免费dvd| 中文字幕最新亚洲高清| 亚洲精品第二区| 午夜福利,免费看| 日本与韩国留学比较| 啦啦啦中文免费视频观看日本| 国产无遮挡羞羞视频在线观看| 欧美+日韩+精品| 少妇丰满av| 亚洲国产最新在线播放| 久久精品国产亚洲av天美| 成人免费观看视频高清| 国产国语露脸激情在线看| 午夜福利视频精品| 内地一区二区视频在线| 五月开心婷婷网| 国产一区二区在线观看日韩| 91久久精品国产一区二区成人| 自线自在国产av| 全区人妻精品视频| 亚洲内射少妇av| 亚洲国产精品成人久久小说| 亚洲丝袜综合中文字幕| 美女大奶头黄色视频| 欧美另类一区| 麻豆精品久久久久久蜜桃| 成年人免费黄色播放视频| 亚洲怡红院男人天堂| 亚洲欧美一区二区三区国产| 人妻 亚洲 视频| 国产免费一级a男人的天堂| 色哟哟·www| 精品一区二区三区视频在线| 秋霞伦理黄片| 国产黄色免费在线视频| 亚洲情色 制服丝袜| 亚洲精品成人av观看孕妇| 久久av网站| 一级毛片 在线播放| 女性被躁到高潮视频| h视频一区二区三区| 人成视频在线观看免费观看| 少妇的逼好多水| 国产 精品1| 午夜免费男女啪啪视频观看| 2022亚洲国产成人精品| 国产综合精华液| 三上悠亚av全集在线观看| 国产免费现黄频在线看| 国产国语露脸激情在线看| 午夜91福利影院| 国产高清三级在线| 欧美精品一区二区大全| 欧美少妇被猛烈插入视频| 欧美 日韩 精品 国产| 伦理电影大哥的女人| 久久久久久久久大av| 国产老妇伦熟女老妇高清| 赤兔流量卡办理| 日本色播在线视频| 王馨瑶露胸无遮挡在线观看| 在线观看一区二区三区激情| 伊人亚洲综合成人网| 一级二级三级毛片免费看| 纯流量卡能插随身wifi吗| 最近中文字幕2019免费版| 久久人人爽人人爽人人片va| 2021少妇久久久久久久久久久| 午夜免费观看性视频| 久久99蜜桃精品久久| 国产免费视频播放在线视频| 精品亚洲乱码少妇综合久久| 天堂中文最新版在线下载| 成人黄色视频免费在线看| 91aial.com中文字幕在线观看| 人体艺术视频欧美日本| 精品一区二区三卡| 性色avwww在线观看| 亚洲精品久久午夜乱码| a级毛色黄片| 99国产精品免费福利视频| 免费播放大片免费观看视频在线观看| videossex国产| 黄色欧美视频在线观看| 亚洲成人av在线免费| 七月丁香在线播放| 2021少妇久久久久久久久久久| 亚洲三级黄色毛片| 男女啪啪激烈高潮av片| 国产亚洲最大av| 妹子高潮喷水视频| 精品人妻在线不人妻| 亚洲av欧美aⅴ国产| 伦理电影免费视频| 国产精品蜜桃在线观看| 国产白丝娇喘喷水9色精品| 国产精品秋霞免费鲁丝片| 久久国内精品自在自线图片| 久久毛片免费看一区二区三区| 人人妻人人添人人爽欧美一区卜| 亚洲精品久久午夜乱码| 免费黄网站久久成人精品| 成人毛片60女人毛片免费| 免费av中文字幕在线| 自线自在国产av| 母亲3免费完整高清在线观看 | 国产成人aa在线观看| 少妇被粗大的猛进出69影院 | 尾随美女入室| 草草在线视频免费看| 亚洲精品第二区| 一级毛片黄色毛片免费观看视频| 丰满乱子伦码专区| 三上悠亚av全集在线观看| 人成视频在线观看免费观看| 国产黄片视频在线免费观看| 久久久国产欧美日韩av| 在线天堂最新版资源| 9色porny在线观看| av在线app专区| 成人手机av| 日本欧美国产在线视频| 午夜福利,免费看| 日韩大片免费观看网站| 欧美亚洲日本最大视频资源| 欧美xxⅹ黑人| av国产精品久久久久影院| 精品一区二区三卡| 看非洲黑人一级黄片| 简卡轻食公司| 免费大片黄手机在线观看| 一级a做视频免费观看| 女的被弄到高潮叫床怎么办| 纵有疾风起免费观看全集完整版| 啦啦啦视频在线资源免费观看| 日韩一区二区视频免费看| 精品国产一区二区久久| 亚洲欧美日韩另类电影网站| .国产精品久久| 中文字幕最新亚洲高清| 一级爰片在线观看| 日韩中字成人| 国产乱来视频区| 成人毛片60女人毛片免费| 免费观看无遮挡的男女| 午夜视频国产福利| 中国三级夫妇交换| 晚上一个人看的免费电影| 久久久亚洲精品成人影院| 国模一区二区三区四区视频| 国产探花极品一区二区| 夫妻午夜视频| 内地一区二区视频在线| 免费人妻精品一区二区三区视频| 国产精品熟女久久久久浪| 伦理电影大哥的女人| 丰满迷人的少妇在线观看| 亚洲国产毛片av蜜桃av| 亚洲欧洲国产日韩| 丝袜在线中文字幕| 汤姆久久久久久久影院中文字幕| 2021少妇久久久久久久久久久| 女人久久www免费人成看片| 久久人人爽av亚洲精品天堂| 在线观看一区二区三区激情| 亚洲怡红院男人天堂| 飞空精品影院首页| 大香蕉久久成人网| 水蜜桃什么品种好| 国产精品久久久久久久电影| 国产黄片视频在线免费观看| 国产成人精品一,二区| 观看av在线不卡| 欧美xxxx性猛交bbbb| 精品熟女少妇av免费看| 在线观看免费高清a一片| 欧美激情国产日韩精品一区| 男女边吃奶边做爰视频| 少妇精品久久久久久久| 搡女人真爽免费视频火全软件| 免费看av在线观看网站| 免费高清在线观看视频在线观看| 18禁在线无遮挡免费观看视频| 欧美老熟妇乱子伦牲交| 一级片'在线观看视频| 高清在线视频一区二区三区| 欧美bdsm另类| 热re99久久精品国产66热6| 纵有疾风起免费观看全集完整版| 国模一区二区三区四区视频| 性高湖久久久久久久久免费观看| 精品少妇久久久久久888优播| 亚洲人成网站在线观看播放| 多毛熟女@视频| 国产精品麻豆人妻色哟哟久久| 女人精品久久久久毛片| 自线自在国产av| 99热国产这里只有精品6| 国产精品久久久久久精品古装| 日韩av不卡免费在线播放| a 毛片基地| 国产成人精品无人区| 日韩亚洲欧美综合| 午夜福利在线观看免费完整高清在| 春色校园在线视频观看| 精品国产一区二区三区久久久樱花| 国产成人a∨麻豆精品| 少妇高潮的动态图| 一区二区三区四区激情视频| 国产在线视频一区二区| 久久久久久久精品精品| 久久精品国产亚洲av涩爱| 国产成人av激情在线播放 | 天天操日日干夜夜撸| av女优亚洲男人天堂| 成人毛片a级毛片在线播放| 女性被躁到高潮视频| 亚洲av日韩在线播放| 热99国产精品久久久久久7| 国产成人精品在线电影| 久久午夜福利片| 久久久国产精品麻豆| 国产免费一区二区三区四区乱码| 国产精品一区二区在线观看99| 美女福利国产在线| 亚洲成色77777| 日韩欧美精品免费久久| 久久精品人人爽人人爽视色| 免费大片18禁| 九草在线视频观看| 国产成人a∨麻豆精品| 丰满少妇做爰视频| 熟女电影av网| 大香蕉97超碰在线| 中文天堂在线官网| 中文乱码字字幕精品一区二区三区| 一级毛片黄色毛片免费观看视频| 最后的刺客免费高清国语| 黄色配什么色好看| 最近中文字幕高清免费大全6| 欧美日本中文国产一区发布| 亚洲欧美日韩卡通动漫| videosex国产| 春色校园在线视频观看| 欧美日韩一区二区视频在线观看视频在线| 亚洲四区av| 永久免费av网站大全| 熟女人妻精品中文字幕| 亚洲av国产av综合av卡| 蜜桃国产av成人99| 少妇被粗大猛烈的视频| 亚洲国产精品国产精品| 免费不卡的大黄色大毛片视频在线观看| 一级爰片在线观看| 色哟哟·www| 在线播放无遮挡| 最近中文字幕高清免费大全6| 亚洲中文av在线|