在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

領(lǐng)域編譯器發(fā)展的前世今生

sakobpqhz ? 來(lái)源:StarryHeavensAbove ? 2023-02-03 10:37 ? 次閱讀

本文分為兩個(gè)部分,第一部分為綜述,第二部分重點(diǎn)討論AI編譯技術(shù)。

近年來(lái),隨著GPU和DSA架構(gòu)在不同領(lǐng)域的廣泛應(yīng)用,特別是AI系統(tǒng)相關(guān)技術(shù)的飛速發(fā)展,對(duì)于編譯器的需求越來(lái)越強(qiáng)烈。編譯器已經(jīng)從一個(gè)相對(duì)小眾的研究領(lǐng)域,變?yōu)閷W(xué)界和業(yè)界都高度關(guān)注并大量投入的方向。與此同時(shí),編譯器的開(kāi)發(fā)人員也從芯片研發(fā)團(tuán)隊(duì)開(kāi)始延伸到更上層的軟件層面。在很多領(lǐng)域的軟件系統(tǒng)中,都開(kāi)始引入編譯技術(shù)來(lái)實(shí)現(xiàn)提升開(kāi)發(fā)效率或運(yùn)行效率等目標(biāo)。本文從領(lǐng)域編譯器的角色著眼,來(lái)討論領(lǐng)域編譯器發(fā)展的前世今生。

通用編譯器 vs. 領(lǐng)域編譯器

編譯器作為芯片配套的重要基礎(chǔ)軟件,它向上封裝高級(jí)語(yǔ)言從而提高應(yīng)用軟件的開(kāi)發(fā)效率和兼容性,向下適應(yīng)體系結(jié)構(gòu)而生成高效的可執(zhí)行代碼,是溝通軟硬件之間的橋梁。一方面,通用編譯器負(fù)責(zé)將某種編程語(yǔ)言映射到某種特定的芯片,例如Intel平臺(tái)的C語(yǔ)言編譯器負(fù)責(zé)將C語(yǔ)言的程序映射為Intel的X86指令集。通用編譯器在設(shè)計(jì)編譯優(yōu)化時(shí),會(huì)將通用性作為最重要的出發(fā)點(diǎn)之一。為了更便捷高效的支持更多語(yǔ)言(前端)以及更多目標(biāo)芯片(后端),GCC、LLVM等框架逐漸成為重要的編譯基礎(chǔ)設(shè)施,它們都集成了非常多的通用編譯優(yōu)化組件,如循環(huán)優(yōu)化、指令級(jí)優(yōu)化、存儲(chǔ)層次優(yōu)化等。另一方面,領(lǐng)域編譯器面向某些特定的領(lǐng)域應(yīng)用程序而設(shè)計(jì),旨在大幅提升該領(lǐng)域研發(fā)人員的編程效率或程序的運(yùn)行性能。因此領(lǐng)域編譯器在設(shè)計(jì)編譯優(yōu)化時(shí),會(huì)將該領(lǐng)域的應(yīng)用特征進(jìn)行一定的總結(jié)抽象,形成領(lǐng)域特定的一些計(jì)算模式,并根據(jù)這些模式來(lái)設(shè)計(jì)針對(duì)性的優(yōu)化,例如面向Stencil計(jì)算特征的優(yōu)化等。

結(jié)合領(lǐng)域編程語(yǔ)言的領(lǐng)域編譯器

早期的領(lǐng)域編譯技術(shù)伴隨領(lǐng)域編程語(yǔ)言(DSL)開(kāi)始發(fā)展,作為解決通用編譯技術(shù)難以在特定領(lǐng)域生成高性能代碼的解決方案出現(xiàn)。DSL會(huì)針對(duì)領(lǐng)域的特征設(shè)計(jì)易于描述領(lǐng)域問(wèn)題的編程語(yǔ)言(創(chuàng)建新語(yǔ)言或從現(xiàn)有語(yǔ)言擴(kuò)展),通常使用專(zhuān)用的IR中間表示(一層或多層)來(lái)對(duì)領(lǐng)域知識(shí)進(jìn)行表示,這些領(lǐng)域知識(shí)的引入可以極大的方便編譯器的分析和優(yōu)化。領(lǐng)域編程語(yǔ)言的提出有兩個(gè)目標(biāo):一是為了大大的簡(jiǎn)化領(lǐng)域開(kāi)發(fā)用戶(hù)的編程復(fù)雜性,這方面的代表性語(yǔ)言是數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言SQL[1],它通過(guò)對(duì)數(shù)據(jù)庫(kù)常用操作進(jìn)行抽象為用戶(hù)提供了非常便捷的編程接口,然后利用編譯器將其映射到底層數(shù)據(jù)庫(kù)引擎所提供的操作接口;二是為了大幅提升領(lǐng)域應(yīng)用的運(yùn)行性能,這方面的代表性語(yǔ)言是Halide[2],它為圖像處理領(lǐng)域提供了一種抽象層面的編程語(yǔ)言,基于這一語(yǔ)言編譯器以調(diào)度的形式來(lái)抽象底層優(yōu)化,從而避免了傳統(tǒng)編譯器中為了通用程序的正確性而引入的復(fù)雜的分析機(jī)制,使其可以非常便捷的在調(diào)度空間中通過(guò)搜索從而得到一個(gè)性能很高的目標(biāo)代碼。

領(lǐng)域編譯器相比較于通用編譯器,它仍然是一個(gè)解析高級(jí)語(yǔ)言,生成中間表示并優(yōu)化,最后代碼生成的系統(tǒng)。它在設(shè)計(jì)上會(huì)有更多的選擇理念,除去領(lǐng)域無(wú)關(guān)的通用優(yōu)化外,它還需要增加領(lǐng)域知識(shí)的專(zhuān)用表示,面向領(lǐng)域特定特征的專(zhuān)門(mén)優(yōu)化等等。在系統(tǒng)實(shí)現(xiàn)上,有的是將領(lǐng)域編譯實(shí)現(xiàn)在通用編譯器中,有的是在通用編譯器的前端增加一個(gè)高層次的領(lǐng)域編譯器。前者以LLDB[3]為例,LLDB是clang/llvm架構(gòu)的調(diào)試器,使用類(lèi)似GDB的調(diào)試語(yǔ)句來(lái)調(diào)試程序運(yùn)行,調(diào)試的需求主要在動(dòng)態(tài)調(diào)控程序運(yùn)行,獲得調(diào)試信息,而這些都是通用clang/llvm架構(gòu)中包含的,因而LLDB的實(shí)現(xiàn)上套用了clang/llvm的基礎(chǔ)設(shè)施。像LLDB這樣能夠緊密結(jié)合在通用編譯器基礎(chǔ)設(shè)施的領(lǐng)域編譯器還是比較少的,更多的DSL編譯器的做法則是采用了將高層次的領(lǐng)域編譯器作為前端插在通用編譯器,如LLVM之前。DSL程序通過(guò)領(lǐng)域編譯器的前端將DSL做詞法語(yǔ)法解析生成高層次IR(一層或多層),該IR包含領(lǐng)域知識(shí)的數(shù)據(jù)結(jié)構(gòu),在高層IR上可以做專(zhuān)用的領(lǐng)域知識(shí)優(yōu)化,也可以做通用的編譯優(yōu)化,然后生成通用編程語(yǔ)言的輸出,如C/CUDA/OpenCL/ LLVM IR等。之后交由通用編譯器完成匯編生成,鏈接最終生成可執(zhí)行程序。這一設(shè)計(jì)不需要關(guān)注編譯的后端部分,因而可以把重點(diǎn)放在利用領(lǐng)域?qū)S兄R(shí)對(duì)程序的優(yōu)化上,通用優(yōu)化則可以交給通用編譯器來(lái)完成。

在過(guò)去幾十年中,很多領(lǐng)域都提出了代表性的領(lǐng)域編程語(yǔ)言及編譯器,這里我們對(duì)幾個(gè)代表性的工作進(jìn)行簡(jiǎn)單的介紹。

01面向圖像處理領(lǐng)域的Halide

Halide是MIT計(jì)算機(jī)科學(xué)和人工智能實(shí)驗(yàn)室的研究人員開(kāi)發(fā)的一門(mén)新的編程語(yǔ)言,旨在改變圖像處理領(lǐng)域編程的現(xiàn)狀。Halide語(yǔ)言將算法描述與算法中數(shù)據(jù)存儲(chǔ)與計(jì)算執(zhí)行等調(diào)度方面的內(nèi)容解耦合。從而算法的描述和性能的優(yōu)化可以分開(kāi)進(jìn)行,可以在不改動(dòng)算法的情況下對(duì)算法進(jìn)行調(diào)優(yōu)。它將代碼分為Algorithm和Schedule兩個(gè)部分,Algorithm部分僅僅描述算法的功能,不進(jìn)行實(shí)際的實(shí)現(xiàn);Schedule部分指定算法在何時(shí)何處進(jìn)行計(jì)算。使得比起用傳統(tǒng)語(yǔ)言編寫(xiě)的代碼,用Halide編寫(xiě)的程序不僅更容易閱讀、編寫(xiě)和修改,而且 Halide能夠自動(dòng)優(yōu)化代碼,而人工對(duì)代碼進(jìn)行優(yōu)化加速,這個(gè)過(guò)程需要花費(fèi)數(shù)小時(shí)來(lái)完成。針對(duì)幾種常用的圖像處理算法,將Halide的版本與人工優(yōu)化的版本進(jìn)行比較,在不同平臺(tái)上的運(yùn)行結(jié)果如圖所示。可見(jiàn),在前3個(gè)算法中Halide版本的算法不僅簡(jiǎn)化了代碼量,同時(shí)性能有著極大的提升。

02面向Stencil計(jì)算的領(lǐng)域編程語(yǔ)言

Stencil計(jì)算是數(shù)值模擬程序中常見(jiàn)的循環(huán)運(yùn)算模式,其特點(diǎn)是遍歷計(jì)算區(qū)域,每個(gè)位置均執(zhí)行相同的計(jì)算操作指令模板(stencil),所以將這種計(jì)算稱(chēng)作stencil計(jì)算。stencil計(jì)算大量出現(xiàn)在科學(xué)計(jì)算領(lǐng)域,并且通常負(fù)載延時(shí)敏感應(yīng)用。因而使用者通常希望將其卸載到高性能設(shè)備如GPU上,以提升端到端性能,但在GPU上,片外內(nèi)存訪問(wèn)和GPU計(jì)算單元的調(diào)度是不同于CPU的,這是編譯stencil計(jì)算程序到GPU執(zhí)行不可忽略的問(wèn)題。俄亥俄州大的團(tuán)隊(duì)設(shè)計(jì)了一款面向stencil計(jì)算的DSL[5],用戶(hù)只需要簡(jiǎn)單的高層stencil操作描述,通過(guò)DSL編譯器分析stencil操作類(lèi)型,訪存模式,根據(jù)GPU編程模型,自動(dòng)生成tile size,shared memory優(yōu)化,block間同步等優(yōu)化。這些優(yōu)化減少了訪存帶寬瓶頸,增加了處理單元utility,最終生成了在GPU上運(yùn)行性能更高的stencil程序。

d4c10332-a356-11ed-bfe3-dac502259ad0.jpg

Stencil計(jì)算常見(jiàn)模板[6]

03面向矩陣計(jì)算的領(lǐng)域編程語(yǔ)言HTA

Tiling算法是挖掘并行性,優(yōu)化數(shù)據(jù)局部性重要的方法。HTA(HierarchicallyTiled Arrays)[7]是一個(gè)在現(xiàn)代OOP語(yǔ)言上擴(kuò)展的面向數(shù)組tiling描述的數(shù)據(jù)結(jié)構(gòu)。通過(guò)HTA,許多科學(xué)計(jì)算算法,如LU分解,分塊矩陣計(jì)算,stencil計(jì)算等,都容易通過(guò)tile來(lái)表示,而HTA的數(shù)據(jù)布局,tile管理都可以自動(dòng)進(jìn)行,而無(wú)需涉及到最底層每個(gè)元素的計(jì)算,從而大大減少了下標(biāo)計(jì)算的描述,簡(jiǎn)化了函數(shù)接口,極大地降低了描述并行程序的復(fù)雜性,同時(shí)仍然達(dá)到了庫(kù)級(jí)別的高性能。HTA還引入了dynamic partitioning和overlapped tiling的語(yǔ)言特性,進(jìn)一步增強(qiáng)了tiling描述的靈活性和普適性。

d4d83642-a356-11ed-bfe3-dac502259ad0.png

HTA的tiling描述[8]

04面向圖計(jì)算的領(lǐng)域編程語(yǔ)言GraphIt

GraphIt [9]是一種用于圖計(jì)算的新 DSL,它可以為在具有不同大小和結(jié)構(gòu)的圖上運(yùn)行的具有不同性能特征的算法生成快速實(shí)現(xiàn)。GraphIt 將計(jì)算的內(nèi)容(算法)與計(jì)算的方式(調(diào)度)分開(kāi)。程序員使用算法語(yǔ)言指定算法,而性能優(yōu)化使用單獨(dú)的調(diào)度語(yǔ)言指定。調(diào)度語(yǔ)言使程序員能夠通過(guò)將大量邊遍歷和頂點(diǎn)數(shù)據(jù)布局優(yōu)化組合在一起,輕松地搜索這個(gè)復(fù)雜的權(quán)衡空間。GraphIt 的性能比當(dāng)時(shí)最先進(jìn)的共享內(nèi)存框架(包括Ligra、Green-Marl、GraphMat、Galois、Gemini 和 Grazelle)快最多4.8 倍,同時(shí)代碼行數(shù)最多減少了一個(gè)數(shù)量級(jí)。

d4e40530-a356-11ed-bfe3-dac502259ad0.png

Graphlt與多種框架的圖計(jì)算性能比較[10]

05面向張量的領(lǐng)域編譯器TACO

張量代數(shù)編譯器 (Tensor Algebra COmpiler:TACO)[11] 是一個(gè)用于計(jì)算稀疏和密集張量上的張量代數(shù)表達(dá)式的代碼生成工具,特別針對(duì)稀疏張量做了大量?jī)?yōu)化。TACO通過(guò)簡(jiǎn)單的format描述做稀疏張量存儲(chǔ)的自動(dòng)生成,通過(guò)迭代圖中間表示描述復(fù)合張量表達(dá)式中稀疏操作數(shù)的多級(jí)索引數(shù)據(jù)結(jié)構(gòu),通過(guò)用戶(hù)指定循環(huán)生成的代碼可以直接做并行化,并且支持自動(dòng)算子融合。TACO在廣泛使用的稀疏張量代數(shù)和稀疏線性代數(shù)庫(kù)中獲得與手動(dòng)優(yōu)化內(nèi)核相當(dāng)?shù)男阅堋?/p>

d4f298f2-a356-11ed-bfe3-dac502259ad0.png

TACO的張量向量乘法示例與生成的C代碼[12]

06面向AI領(lǐng)域的編譯技術(shù)

隨著人工智能時(shí)代的來(lái)臨,AI領(lǐng)域應(yīng)用的大量出現(xiàn)也促進(jìn)著領(lǐng)域編譯的發(fā)展,最突出的表現(xiàn)就是多種AI編譯器的普及和應(yīng)用。AI領(lǐng)域有幾個(gè)重要的特征使得AI編譯器面臨很多新的機(jī)遇和挑戰(zhàn):一是AI領(lǐng)域中編程框架對(duì)計(jì)算圖與算子分離的設(shè)計(jì)機(jī)制為編譯優(yōu)化提供了更多的機(jī)會(huì)和更廣闊的空間;二是AI領(lǐng)域中對(duì)張量的抽象為編譯優(yōu)化提供了具有鮮明領(lǐng)域特征的語(yǔ)義信息;三是以Python為主的動(dòng)態(tài)解釋器語(yǔ)言前端為其與AI編譯器的銜接帶了挑戰(zhàn);四是面向AI的領(lǐng)域?qū)S眉軜?gòu)為應(yīng)用的可移植性帶來(lái)了挑戰(zhàn)。在這些因素的驅(qū)動(dòng)下,近年來(lái)學(xué)術(shù)界和工業(yè)界在AI編譯方面提出了一系列創(chuàng)新性的方法,也為編譯這一基礎(chǔ)學(xué)科的發(fā)展注入了新的活力。

本文下一篇將重點(diǎn)介紹面向AI領(lǐng)域的編譯技術(shù)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4912

    瀏覽量

    130661
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7630

    瀏覽量

    90191
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    34256

    瀏覽量

    275411
  • 編程語(yǔ)言
    +關(guān)注

    關(guān)注

    10

    文章

    1955

    瀏覽量

    36106
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1655

    瀏覽量

    49891

原文標(biāo)題:領(lǐng)域編譯器發(fā)展的前世今生 ? 綜述

文章出處:【微信號(hào):算力基建,微信公眾號(hào):算力基建】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    藍(lán)牙技術(shù)的前世今生

    藍(lán)牙是一種支持設(shè)備短距離通信的低功耗、低成本無(wú)線電技術(shù)。它利用短程無(wú)線鏈路取代專(zhuān)用電纜,便于人們?cè)谑覂?nèi)或戶(hù)外流動(dòng)操作。那么這種技術(shù)為什么叫藍(lán)牙?又歷經(jīng)了怎樣的發(fā)展?本文將帶你了解藍(lán)牙技術(shù)的前世今生
    的頭像 發(fā)表于 05-09 09:46 ?2785次閱讀
    藍(lán)牙技術(shù)的<b class='flag-5'>前世</b><b class='flag-5'>今生</b>

    芯片開(kāi)源架構(gòu)RISC-V的前世今生

    芯片春秋 開(kāi)源架構(gòu)RISC-V前世今生
    發(fā)表于 05-21 10:04

    芯片春秋——ARM前世今生

    芯片春秋 ARM前世今生
    發(fā)表于 05-25 15:05

    嵌入式ARM開(kāi)發(fā)的前世今生,看完你就懂了

    嵌入式ARM的開(kāi)發(fā)方向是什么?嵌入式ARM開(kāi)發(fā)的前世今生
    發(fā)表于 04-20 06:39

    關(guān)于汽車(chē)操作系統(tǒng)的前世今生看完你就懂了

    關(guān)于汽車(chē)操作系統(tǒng)的前世今生看完你就懂了
    發(fā)表于 09-26 06:40

    汽車(chē)總線前世今生

    汽車(chē)總線前世今生
    發(fā)表于 01-24 15:41 ?24次下載

    編譯器是如何工作的_編譯器的工作過(guò)程詳解

    隨著計(jì)算機(jī)的發(fā)展編譯器已經(jīng)發(fā)揮著十分重要的作用。本文主要介紹了編譯器的種類(lèi)、編譯器的工作原理以及編譯器工作的具體操作過(guò)程及步驟詳解。
    發(fā)表于 12-19 12:54 ?1.7w次閱讀

    Verilog HDL 編譯器指令說(shuō)明

    Verilog HDL 編譯器指令 復(fù)雜一點(diǎn)的系統(tǒng)在進(jìn)行設(shè)計(jì)或者驗(yàn)證時(shí),都會(huì)用到一些編譯器指令,那么什么是編譯器指令? ? Verilog HDL編譯器指令由重音符(‘)開(kāi)始。在Ver
    的頭像 發(fā)表于 11-03 09:31 ?4167次閱讀
    Verilog HDL <b class='flag-5'>編譯器</b>指令說(shuō)明

    交叉編譯器安裝教程

    交叉編譯器中“交叉”的意思就是在一個(gè)架構(gòu)上編譯另外一個(gè)架構(gòu)的代碼,相當(dāng)于兩種架構(gòu)“交叉”起來(lái)了。Ubuntu 自帶的 gcc 編譯器是針對(duì) X86 架構(gòu)的,而我們現(xiàn)在要編譯的是 ARM
    的頭像 發(fā)表于 09-29 09:12 ?3911次閱讀

    高壓電源創(chuàng)新:前世今生

    高壓電源創(chuàng)新:前世今生
    發(fā)表于 11-03 08:04 ?1次下載
    高壓電源創(chuàng)新:<b class='flag-5'>前世</b><b class='flag-5'>今生</b>

    電池管理技術(shù)的前世今生

    電池管理技術(shù)的前世今生
    發(fā)表于 11-04 09:51 ?5次下載
    電池管理技術(shù)的<b class='flag-5'>前世</b><b class='flag-5'>今生</b>

    全面解析AI編譯器面臨的機(jī)遇和挑戰(zhàn)

    隨著人工智能時(shí)代的來(lái)臨,AI領(lǐng)域應(yīng)用的大量出現(xiàn)也促進(jìn)著領(lǐng)域編譯發(fā)展,最突出的表現(xiàn)就是多種AI編譯器的普及和應(yīng)用。
    發(fā)表于 02-16 14:46 ?2714次閱讀

    二極管的前世今生

    二極管的前世今生
    的頭像 發(fā)表于 12-14 18:35 ?1623次閱讀
    二極管的<b class='flag-5'>前世</b><b class='flag-5'>今生</b>

    Triton編譯器功能介紹 Triton編譯器使用教程

    Triton 是一個(gè)開(kāi)源的編譯器前端,它支持多種編程語(yǔ)言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個(gè)可擴(kuò)展和可定制的編譯器框架,允許開(kāi)發(fā)者添加新的編程語(yǔ)言特性和優(yōu)化技術(shù)
    的頭像 發(fā)表于 12-24 17:23 ?1507次閱讀

    Triton編譯器與其他編譯器的比較

    Triton編譯器與其他編譯器的比較主要體現(xiàn)在以下幾個(gè)方面: 一、定位與目標(biāo) Triton編譯器 : 定位:專(zhuān)注于深度學(xué)習(xí)中最核心、最耗時(shí)的張量運(yùn)算的優(yōu)化。 目標(biāo):提供一個(gè)高度抽象、靈活、高效
    的頭像 發(fā)表于 12-24 17:25 ?890次閱讀
    主站蜘蛛池模板: 久久精品久 | 永久在线观看www免费视频 | 午夜色视频在线观看 | 亚1洲二区三区四区免费 | 狠狠色综合网站久久久久久久 | 一区二区三区四区在线免费观看 | 成人小视频在线 | 三级三级三级网站网址 | 欧美一级淫片免费播放口 | 又粗又长又色又爽视频 | 天天躁日日躁狠狠躁中文字幕老牛 | 亚洲欧美日韩另类精品一区二区三区 | 成人a毛片视频免费看 | 黄色毛片免费 | 一级做a爱片久久毛片 | 1024免费看片| 色老头·com| 手机看片1024精品日韩 | 夜夜爽天天干 | 一级毛片不卡 | 国产婷婷色一区二区三区 | 天天干天天爱天天射 | 天堂资源8中文最新版在线 天堂资源地址在线 | 6080国产午夜精品 | 欧美日韩国产一区 | 成年人在线网站 | 久操青青| 五月婷婷基地 | 天堂网2018 | 在线中文字幕一区 | 91精品国产免费久久久久久青草 | 免费看的一级毛片 | 国产黄视频在线观看 | 日本一本在线视频 | 天天射美女 | 黄色网一级片 | 最新国产你懂的在线网址 | 日本护士撒尿 | 中国特黄一级片 | 久久综合狠狠综合久久 | 天天草天天草 |