• <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線程實現技術研究
    免费av不卡在线播放| 国产不卡一卡二| 亚洲自拍偷在线| 五月玫瑰六月丁香| 国产精品嫩草影院av在线观看| 国产精品伦人一区二区| 亚洲,欧美,日韩| 久久久久国产网址| 国产精品不卡视频一区二区| 欧美高清性xxxxhd video| 黑人高潮一二区| 午夜福利18| 成年女人看的毛片在线观看| 高清午夜精品一区二区三区 | 十八禁国产超污无遮挡网站| 亚洲精品乱码久久久v下载方式| 色尼玛亚洲综合影院| 国内久久婷婷六月综合欲色啪| 精品久久久久久久久久免费视频| 一级毛片aaaaaa免费看小| 欧美激情国产日韩精品一区| av天堂在线播放| 男女边吃奶边做爰视频| 亚洲人与动物交配视频| 日韩大尺度精品在线看网址| 天天躁夜夜躁狠狠久久av| 日本精品一区二区三区蜜桃| 老司机影院成人| 老师上课跳d突然被开到最大视频| 国产白丝娇喘喷水9色精品| 欧美日韩在线观看h| 亚洲精品国产成人久久av| 简卡轻食公司| av专区在线播放| 色哟哟哟哟哟哟| 亚洲av美国av| 别揉我奶头~嗯~啊~动态视频| 真实男女啪啪啪动态图| 精品熟女少妇av免费看| 哪里可以看免费的av片| 最近的中文字幕免费完整| 欧美潮喷喷水| 婷婷精品国产亚洲av在线| 国产亚洲91精品色在线| 国产成人aa在线观看| 联通29元200g的流量卡| 亚洲成人久久性| 十八禁网站免费在线| 日本一二三区视频观看| av专区在线播放| 国产爱豆传媒在线观看| 久久久精品欧美日韩精品| 99热6这里只有精品| 成人欧美大片| 亚洲精品日韩在线中文字幕 | 插阴视频在线观看视频| 久久久久久久亚洲中文字幕| 精品人妻偷拍中文字幕| av在线天堂中文字幕| 精品无人区乱码1区二区| 免费一级毛片在线播放高清视频| 欧美性猛交黑人性爽| 亚洲最大成人手机在线| 尤物成人国产欧美一区二区三区| 久久人人爽人人片av| 五月伊人婷婷丁香| 精华霜和精华液先用哪个| 国产午夜精品久久久久久一区二区三区 | 国产色爽女视频免费观看| 国产aⅴ精品一区二区三区波| 国产激情偷乱视频一区二区| 熟妇人妻久久中文字幕3abv| 亚洲中文字幕日韩| 欧美+亚洲+日韩+国产| 日韩精品有码人妻一区| 亚洲18禁久久av| 露出奶头的视频| 色播亚洲综合网| 国产真实乱freesex| 国产v大片淫在线免费观看| 99精品在免费线老司机午夜| 三级经典国产精品| 日日啪夜夜撸| 久久久久久久午夜电影| 少妇人妻精品综合一区二区 | 国产精品一区二区三区四区免费观看 | 午夜福利视频1000在线观看| 美女被艹到高潮喷水动态| 亚洲激情五月婷婷啪啪| 久久6这里有精品| 亚洲不卡免费看| .国产精品久久| www.色视频.com| 亚洲va在线va天堂va国产| 一本精品99久久精品77| 嫩草影视91久久| 欧美性猛交╳xxx乱大交人| 国产亚洲欧美98| 亚洲欧美日韩东京热| eeuss影院久久| 精品久久久久久久末码| 日日摸夜夜添夜夜添小说| 嫩草影视91久久| 超碰av人人做人人爽久久| 亚洲精品456在线播放app| 黄色一级大片看看| 天堂动漫精品| 久久99热6这里只有精品| 国产精品乱码一区二三区的特点| 日日撸夜夜添| 三级毛片av免费| 国产亚洲精品av在线| 亚洲自拍偷在线| 日韩av在线大香蕉| 国内精品久久久久精免费| 国产高潮美女av| 亚洲最大成人av| 久久99热6这里只有精品| 人妻制服诱惑在线中文字幕| 国产精品一及| 99热6这里只有精品| 特级一级黄色大片| 在线免费观看的www视频| 欧美色视频一区免费| 看片在线看免费视频| 蜜臀久久99精品久久宅男| 搡老妇女老女人老熟妇| 亚洲天堂国产精品一区在线| 国产精品久久久久久亚洲av鲁大| 91久久精品国产一区二区成人| 色尼玛亚洲综合影院| 日本黄大片高清| 露出奶头的视频| 亚洲欧美精品综合久久99| 黄色日韩在线| 欧美一区二区国产精品久久精品| 免费黄网站久久成人精品| 插逼视频在线观看| 九九热线精品视视频播放| 又爽又黄无遮挡网站| 大香蕉久久网| 女生性感内裤真人,穿戴方法视频| 一本一本综合久久| 国产美女午夜福利| 一本精品99久久精品77| 午夜福利在线观看免费完整高清在 | 亚洲国产欧美人成| 欧美高清性xxxxhd video| 国产午夜福利久久久久久| 一级毛片电影观看 | 日韩欧美免费精品| 亚洲国产精品国产精品| 18+在线观看网站| 免费无遮挡裸体视频| 亚洲专区国产一区二区| 国产午夜精品久久久久久一区二区三区 | 国产女主播在线喷水免费视频网站 | 97碰自拍视频| 亚洲一级一片aⅴ在线观看| 亚洲国产精品成人综合色| 国产精品一二三区在线看| 免费一级毛片在线播放高清视频| 国产极品精品免费视频能看的| 久久精品夜夜夜夜夜久久蜜豆| 超碰av人人做人人爽久久| 久久精品国产亚洲网站| 欧美日韩国产亚洲二区| 深夜精品福利| 最新在线观看一区二区三区| av.在线天堂| 激情 狠狠 欧美| 精品99又大又爽又粗少妇毛片| 成人特级黄色片久久久久久久| 色综合站精品国产| 精品久久久久久久久久久久久| 国产高潮美女av| 一夜夜www| 男女那种视频在线观看| 国产真实伦视频高清在线观看| 卡戴珊不雅视频在线播放| 亚洲欧美日韩高清在线视频| 婷婷色综合大香蕉| 亚洲精品国产av成人精品 | 亚洲七黄色美女视频| 亚洲中文字幕一区二区三区有码在线看| 久久中文看片网| 国产黄色视频一区二区在线观看 | 啦啦啦韩国在线观看视频| 午夜福利18| 最近手机中文字幕大全| 精品少妇黑人巨大在线播放 | 亚洲精品成人久久久久久| 97热精品久久久久久| 国产av麻豆久久久久久久| 3wmmmm亚洲av在线观看| 欧美xxxx性猛交bbbb| 人妻制服诱惑在线中文字幕| 天堂√8在线中文| 性欧美人与动物交配| 亚洲中文字幕日韩| 69av精品久久久久久| 人妻丰满熟妇av一区二区三区| 人人妻人人澡欧美一区二区| 99久国产av精品国产电影| 亚洲成av人片在线播放无| 午夜a级毛片| 午夜爱爱视频在线播放| 三级男女做爰猛烈吃奶摸视频| 久久精品综合一区二区三区| 日韩欧美国产在线观看| 少妇被粗大猛烈的视频| 免费在线观看成人毛片| 国产极品精品免费视频能看的| 观看美女的网站| 国产成人a区在线观看| 午夜影院日韩av| 亚洲va在线va天堂va国产| 日韩成人伦理影院| 免费高清视频大片| 直男gayav资源| 波多野结衣高清无吗| 成人无遮挡网站| 亚洲人成网站在线观看播放| 国内揄拍国产精品人妻在线| 国产精品嫩草影院av在线观看| 亚洲国产精品国产精品| 亚洲一区二区三区色噜噜| 成年女人永久免费观看视频| 久久精品夜色国产| 亚洲欧美精品自产自拍| 欧美在线一区亚洲| 亚洲性久久影院| 黑人高潮一二区| 国产精品久久久久久久久免| 亚洲精品在线观看二区| 老司机影院成人| 99久久九九国产精品国产免费| 一级毛片电影观看 | 日韩av在线大香蕉| 亚洲国产精品久久男人天堂| 一个人看视频在线观看www免费| 国产大屁股一区二区在线视频| 99精品在免费线老司机午夜| 亚洲,欧美,日韩| 欧美人与善性xxx| 一级a爱片免费观看的视频| 亚洲熟妇熟女久久| 最近手机中文字幕大全| 久久久a久久爽久久v久久| 高清午夜精品一区二区三区 | 国产真实伦视频高清在线观看| 69人妻影院| 老女人水多毛片| 国产成人精品久久久久久| 国产男人的电影天堂91| 午夜激情欧美在线| 久久久久久久久久成人| 日本与韩国留学比较| 91在线精品国自产拍蜜月| 内地一区二区视频在线| 欧美区成人在线视频| 国产私拍福利视频在线观看| 亚洲欧美日韩高清专用| 尾随美女入室| 国产午夜精品久久久久久一区二区三区 | 久久久成人免费电影| 亚洲aⅴ乱码一区二区在线播放| 久久人妻av系列| 欧美日韩一区二区视频在线观看视频在线 | 观看美女的网站| 日本三级黄在线观看| 国产精品国产高清国产av| www.色视频.com| 精品一区二区三区视频在线| 久久久欧美国产精品| 一级a爱片免费观看的视频| 国产精品久久视频播放| 国产色婷婷99| 波多野结衣高清无吗| 乱人视频在线观看| av专区在线播放| 久久中文看片网| 欧美另类亚洲清纯唯美| 精品久久久久久久久亚洲| 久久人人爽人人片av| 精品一区二区三区人妻视频| 国产成人影院久久av| 黄色一级大片看看| 久久6这里有精品| 国产精品不卡视频一区二区| 国产精品爽爽va在线观看网站| 国产高清三级在线| 美女黄网站色视频| 国产综合懂色| www.色视频.com| 亚洲欧美精品综合久久99| 亚洲精品在线观看二区| 亚洲国产色片| 成人av一区二区三区在线看| 日韩亚洲欧美综合| 国产成人精品久久久久久| videossex国产| 黄色配什么色好看| 嫩草影院新地址| 亚洲国产日韩欧美精品在线观看| 久久精品综合一区二区三区| 看片在线看免费视频| 国产一区亚洲一区在线观看| 日韩欧美国产在线观看| 亚洲欧美成人综合另类久久久 | 人人妻,人人澡人人爽秒播| 国产视频一区二区在线看| 亚洲自偷自拍三级| 午夜爱爱视频在线播放| 欧美高清成人免费视频www| 3wmmmm亚洲av在线观看| 99久国产av精品国产电影| 免费av观看视频| 少妇丰满av| 久久久国产成人免费| 久久久久免费精品人妻一区二区| 热99在线观看视频| 别揉我奶头~嗯~啊~动态视频| 欧美绝顶高潮抽搐喷水| 高清毛片免费看| 亚洲第一区二区三区不卡| 亚洲内射少妇av| 啦啦啦啦在线视频资源| h日本视频在线播放| 国产精品三级大全| 国产av一区在线观看免费| 久久精品久久久久久噜噜老黄 | 欧美中文日本在线观看视频| 国产91av在线免费观看| 99视频精品全部免费 在线| 日日撸夜夜添| 晚上一个人看的免费电影| 色哟哟哟哟哟哟| 搡老妇女老女人老熟妇| 美女被艹到高潮喷水动态| 色噜噜av男人的天堂激情| 美女 人体艺术 gogo| 永久网站在线| 亚洲av第一区精品v没综合| 中文字幕久久专区| 色噜噜av男人的天堂激情| 亚洲欧美日韩高清专用| 亚洲国产精品合色在线| 国产精品一及| 国产精品伦人一区二区| 老熟妇仑乱视频hdxx| 日本a在线网址| 午夜精品一区二区三区免费看| 国产三级在线视频| 男插女下体视频免费在线播放| 中文资源天堂在线| 精品午夜福利在线看| 亚洲人成网站在线播| 日韩一本色道免费dvd| 99国产精品一区二区蜜桃av| 可以在线观看毛片的网站| 无遮挡黄片免费观看| 日韩欧美精品免费久久| 欧美最黄视频在线播放免费| 五月伊人婷婷丁香| 日韩亚洲欧美综合| 黄色日韩在线| 美女xxoo啪啪120秒动态图| 久久久国产成人精品二区| 亚洲色图av天堂| 色哟哟·www| 午夜激情欧美在线| 婷婷精品国产亚洲av| 国产国拍精品亚洲av在线观看| 女人被狂操c到高潮| 熟女电影av网| 亚洲无线在线观看| 成年av动漫网址| 成年女人看的毛片在线观看| 激情 狠狠 欧美| 国产大屁股一区二区在线视频| 99国产极品粉嫩在线观看| 午夜免费激情av| 日韩国内少妇激情av| 国产一区二区在线av高清观看| 欧美高清性xxxxhd video| 日韩精品青青久久久久久| 国产精品久久久久久av不卡| 小蜜桃在线观看免费完整版高清| 精品久久久久久久久亚洲| 亚洲欧美日韩卡通动漫| 精品久久久久久久久久免费视频| 一级a爱片免费观看的视频| 午夜激情福利司机影院| 99久久九九国产精品国产免费| 色综合站精品国产| 中文在线观看免费www的网站| 91av网一区二区| 男插女下体视频免费在线播放| 久久久久国产网址| 欧美性猛交╳xxx乱大交人| 国产在视频线在精品| 亚洲欧美日韩无卡精品| 国产真实乱freesex| 在线观看免费视频日本深夜| 18禁在线播放成人免费| 欧美最黄视频在线播放免费| 最新中文字幕久久久久| 三级毛片av免费| 小说图片视频综合网站| 亚洲无线在线观看| 最近最新中文字幕大全电影3| 久久国产乱子免费精品| 可以在线观看的亚洲视频| 亚洲人成网站在线播放欧美日韩| av在线天堂中文字幕| 美女被艹到高潮喷水动态| 一进一出好大好爽视频| 欧美成人免费av一区二区三区| 国产精品福利在线免费观看| 精品一区二区三区视频在线| 国产午夜福利久久久久久| 搡老妇女老女人老熟妇| 亚洲三级黄色毛片| 久久精品夜夜夜夜夜久久蜜豆| 色视频www国产| 一区二区三区高清视频在线| 久久久久九九精品影院| 国产亚洲精品综合一区在线观看| 亚洲成人精品中文字幕电影| 一本一本综合久久| 亚洲人成网站在线观看播放| 国产高清激情床上av| 久久久色成人| 国语自产精品视频在线第100页| 亚洲av一区综合| 久久久a久久爽久久v久久| 久久久午夜欧美精品| 精品欧美国产一区二区三| 亚洲中文日韩欧美视频| 黄片wwwwww| 非洲黑人性xxxx精品又粗又长| 全区人妻精品视频| 亚洲精品粉嫩美女一区| 成人亚洲精品av一区二区| 国产精品一区二区性色av| 深爱激情五月婷婷| 国产 一区 欧美 日韩| 国产精品无大码| 国产真实乱freesex| 高清午夜精品一区二区三区 | 直男gayav资源| 国产精品一区二区免费欧美| 搡老岳熟女国产| 男插女下体视频免费在线播放| 一个人看视频在线观看www免费| 免费电影在线观看免费观看| 国产中年淑女户外野战色| 精品熟女少妇av免费看| а√天堂www在线а√下载| 少妇的逼水好多| 最新中文字幕久久久久| aaaaa片日本免费| 在线a可以看的网站| 欧美性感艳星| 一本精品99久久精品77| 久久人人精品亚洲av| 1024手机看黄色片| av天堂中文字幕网| 久久国产乱子免费精品| aaaaa片日本免费| 男女啪啪激烈高潮av片| 别揉我奶头~嗯~啊~动态视频| 国产精品久久久久久久电影| 日韩成人av中文字幕在线观看 | 99国产极品粉嫩在线观看| 亚洲va在线va天堂va国产| 欧美日韩国产亚洲二区| 99在线人妻在线中文字幕| 欧美另类亚洲清纯唯美| 久久人人精品亚洲av| 最近2019中文字幕mv第一页| 国产成人freesex在线 | 又爽又黄a免费视频| 久久精品国产自在天天线| 免费看av在线观看网站| 国产三级中文精品| 在线免费十八禁| 悠悠久久av| 男人和女人高潮做爰伦理| 精品一区二区三区视频在线观看免费| 亚洲精品久久国产高清桃花| 精品福利观看| 久久6这里有精品| 日韩精品中文字幕看吧| 日日干狠狠操夜夜爽| 国产精品乱码一区二三区的特点| 综合色丁香网| 伦精品一区二区三区| 免费观看人在逋| 久久久久久久久久成人| 一夜夜www| 日韩精品中文字幕看吧| 最近在线观看免费完整版| 无遮挡黄片免费观看| 国产综合懂色| 国产黄a三级三级三级人| 免费观看精品视频网站| 久久精品影院6| 天堂网av新在线| 99久久中文字幕三级久久日本| 色av中文字幕| 亚洲欧美日韩无卡精品| 99热6这里只有精品| 12—13女人毛片做爰片一| 高清毛片免费观看视频网站| 黄色一级大片看看| 在线观看美女被高潮喷水网站| 小蜜桃在线观看免费完整版高清| 亚洲av成人av| 免费观看精品视频网站| 国产av不卡久久| 成人综合一区亚洲| 长腿黑丝高跟| 国产av麻豆久久久久久久| 国产精品三级大全| 人人妻人人看人人澡| 最近视频中文字幕2019在线8| 日韩欧美在线乱码| 国产男人的电影天堂91| 国产在线精品亚洲第一网站| 99久久精品热视频| 亚洲av不卡在线观看| 国产女主播在线喷水免费视频网站 | 99久久久亚洲精品蜜臀av| 国产亚洲精品久久久com| 在线观看66精品国产| 一夜夜www| 欧美绝顶高潮抽搐喷水| 69av精品久久久久久| 三级男女做爰猛烈吃奶摸视频| 日本一二三区视频观看| 国语自产精品视频在线第100页| av在线播放精品| 色综合色国产| 99riav亚洲国产免费| 国产精品亚洲一级av第二区| 午夜老司机福利剧场| av.在线天堂| 别揉我奶头~嗯~啊~动态视频| 中文字幕av成人在线电影| 一级黄片播放器| 国产男靠女视频免费网站| 蜜桃亚洲精品一区二区三区| 久久亚洲精品不卡| 十八禁国产超污无遮挡网站| 99在线人妻在线中文字幕| 成人精品一区二区免费| 黄色视频,在线免费观看| 国产免费男女视频| 看非洲黑人一级黄片| 给我免费播放毛片高清在线观看| av.在线天堂| 少妇人妻精品综合一区二区 | 日本一二三区视频观看| 免费在线观看影片大全网站| 国产麻豆成人av免费视频| 搡老岳熟女国产| 高清毛片免费看| 国产精品人妻久久久影院| 午夜精品一区二区三区免费看| 综合色av麻豆| 伊人久久精品亚洲午夜| 一区二区三区免费毛片| 不卡一级毛片| 国产美女午夜福利| 亚洲乱码一区二区免费版| 久久草成人影院| 草草在线视频免费看| 亚洲av成人av| 亚洲人成网站高清观看| 久久久久久久久久黄片| 联通29元200g的流量卡| 露出奶头的视频| 欧美日韩国产亚洲二区| 男女视频在线观看网站免费| 精品一区二区三区视频在线观看免费| 亚洲国产精品成人久久小说 | 免费看光身美女| 99久久无色码亚洲精品果冻| 成人特级黄色片久久久久久久| 国产精品一区www在线观看| av在线观看视频网站免费| 校园春色视频在线观看| 久久久久久久久久黄片| 午夜免费男女啪啪视频观看 | 国产精品99久久久久久久久| 欧美成人a在线观看| 国产精品一区二区性色av| 99热这里只有是精品在线观看| 日韩中字成人| 国产色爽女视频免费观看| a级毛片免费高清观看在线播放| 国产伦在线观看视频一区| av卡一久久| 91久久精品电影网| 久久精品国产99精品国产亚洲性色| 日韩制服骚丝袜av| 日日摸夜夜添夜夜添小说| 日本爱情动作片www.在线观看 | 午夜福利视频1000在线观看| 久久精品人妻少妇| 亚洲人成网站高清观看| 69av精品久久久久久| 久久久久久九九精品二区国产|