分享

从苹果M1 Max回顾史上巨无霸处理器:GPU篇

 金刚光 2022-11-29 发布于辽宁

 

前一篇文章欣赏了近代高性能泛用处理器的“巨大存在感”,但在时下一大票人为了“挖矿”疯狂的世界,一说到本应“着毋庸议”的巨无霸芯片,大概也没有比GPU更有“亲切感”的产品了。

更何况苹果M1 Max的“空照图”最值得让人多看几眼的特色,莫过于“占地甚广”的32核心GPU功能单元,现在将眼光看向晶粒面积一向大到“理所当然”的高端GPU,顺便也让各位思索一下苹果M1 Max的GPU,大致属于怎样的“档次”。

苹果M1 Max(面积432平方毫米,台积电5纳米制程,570亿晶体管)。

但在进入主题之前,先回到1990年代中后期,个人计算机3D游戏应用刚崛起的古老年代,也请各位先复习一下以往半个多世纪以来的绘图硬件发展史,替后面的故事做好事前功课。

从这张洋洋洒洒的重大里程碑,可清楚看到推动GPU肥大化的主要推手:GPU通用运算(General Purpose GPU,GPGPU)。GPU通用运算大致可分为几个时期:

  • 1999~2006年“酝酿期”:微软DirectX 8制定的著色器架构模型(Shader Model),让GPU具备最基础的可程序化能力。

  • 2006~2009年“开创期”:微软DirectX 10的统一着色器架构(Unified Shader)强化GPU使用弹性,并以Nvidia G80(Tesla 1.0微架构)为起点,GPU走向兼具SIMD与MIMD部分优点的SIMT(Single Instruction, Multiple Threads)运算架构,如纺纱机千丝万缕的线程“灌入”拆散后的庞大运算单元。

  • 2009~2010年“熟成期”:以微软DirectX 11为起点,GPU支持IEEE 754-2008浮点格式,无论单倍还是双倍精度的浮点乘积和,都成为标准配备,而内存ECC等纠错机制,改善GPU的可靠性,让GPU更接近CPU,也更适合高性能计算(HPC)。
  • 2010~2016年“实用期”:GPU双雄Nvidia与AMD一同“黏死”台积电28纳米制程很多年,但这段期间CUDA、OpenCL、OpenMP与OpenACC等应用程序接口也逐渐成熟,克服GPU内存容量限制的共享虚拟内存,也在这时萌芽。
  • 2016年开始“迈向人工智能”:为了强化GPU较弱的“推论”与节约内存容量开销,支持FP16 Int8等低精度资料格式,“学习”部分也引进Google BF16(Bfloat16)与Nvidia TF32(TensorFlow 32)等特化资料格式,并扩展专属功能单元与添加专用指令。此外,高端GPU普遍导入带来巨量带宽的HBM2内存,并引进新型总线以便连接多颗GPU,如Nvidia的NVLink和AMD的Infinity Fabric。

但万丈高楼平地起,各位读者也能从本系列首篇了解“原来这些芯片一开始也不是这么巨大,甚至还要好几颗才能组成”道理。让我们再次跳上时光机,回到1995年“还没有GPU”的年代,重温3dfx的崛起与陨落,回首Nvidia的机运与缘起。

在大家只需狂冲像素材质填充率的美好年代

请大家稍微复习一下绘图管线简图。集成几何转换硬件单元GPU之前,仍以游戏为主的消费型3D绘图芯片,规格竞争的重点指标,只有在光栅输出阶段(Rasterization)的像素填充率(Pixel Fillrate)与材质填充率(Texel Fillrate),“将像素/材质处理管线的数量×时脉(或加入会影响实际填充率的内存规格)”就成为唯一的“赛猪公”比较基准。

曾以Voodoo系列在1990年代中后期独领风骚的3dfx,初代产品Voodoo加速卡(SST1),分别由一颗Frame Buffer处理器(FBI)和一颗材质映射单元(TMU)组成。第二代Voodoo 2(SST2)追加第二颗TMU,一个时脉周期可同时搭建两个材质像素(Texel)。除了插件Alliance Semiconductor AT25/AT3D 2D芯片的Voodoo Rush,单芯片方案Voodoo Banshee之前,Voodoo系列产品都不具2D绘图能力,需搭配一张独立显卡。

从这里也可了解,因多芯片架构,每颗又都有自己的内存,3dfx产品成本结构极为高昂(各位可以回想一下IBM初代Power和Power2),并不利争取主流市场,也自己搞自家Glide 3D API,留给Nvidia增长空间,蓄意并购Nvidia最大客户STB断其后路、让自己做显卡导致“球员兼裁判”的错误商业决策,变成压死3dfx的最后一根稻草。

即使到了公司快破产前的末代产品Rampage,也还是坚持多芯片方案,要插件另一颗Sage几何转换处理器。3dfx如意算盘如下:

从下表即可瞬间了解Rampage与Sage的组合,对上Nvidia GeForce 256恐怕还是凶多吉少,制程比人好,但晶体管多那么多。况且2018年底,也是3dfx宣布开发Rampage的20年后,《The Legacy of 3dfx》一书作者Oscar Barea,测试手上Rampage显卡工程样品,证实性能对上GeForce 256也占不到任何便宜。

再来瞧瞧这时的Nvidia,在人类第一颗GPU GeForce 256之前,不知故意还是巧合,所有绘图芯片晶粒面积都统一为90平方毫米(天知道是不是师法追求“简单、迅速、便宜”的Centaur),这也替Nvidia带来很大的成本优势,姑且不论性能如何,一颗小芯片即可取代3dfx的多芯片巨兽,光凭这点就足以保证Nvidia迟早会取代3dfx的龙头地位。

当然被Nvidia并购后,3dfx遗产都默默消失在世界尽头。如同外界盛传的“Sage成为GeForce 4(NV25)几何引擎、Rampage转生GeForce 6800(NV40)的Pixel Shader技术基础”,究竟3dfx有多少“法宝”融入nVidia产品,就只有Nvidia自己知道了。

但3dfx垮台并不代表Nvidia背后就没有追兵:日后被AMD并购的ATi,Radeon家族前身Rage,以Rage 128系列最具代表性(89平方毫米,800万晶体管,250纳米制程)。ATi当时普遍定位成“性能比nVidia弱一些,但拿来放视频却是响当当的极品”。ATi摇身一变能与Nvidia分庭抗礼、并值得被AMD巨资买下的最强竞争对手,就是GPU时代初期的故事了。

GPU时代的来临与ATi发动的逆袭

奠定ATi成为GPU巨强基础的关键战役,发生在2002~2003年间ATi R300全面击溃Nvidia NV30,后者历经多次延误,结果还是打不过半年前就登场的R300,还闹出Nvidia为了让NV30的性能“好看一点”,弄出“仅限于GeForce FX系列”的Demo程序,还在驱动程序动手脚,引爆3DMark03作弊疑云,也差点毁掉Nvidia驱动程序稳定度的好口碑。

这场属于ATi的胜利,也确立与Nvidia长期对抗的态势,直到2006年7月24日,以54亿美元价格被AMD并购为止。

Nvidia会在寄以厚望的NV30重重摔了一跤,原因甚多,但可总结以下几点:

但Nvidia很快亡羊补牢,迅速推出强化版GeForce FX 5900(NV35)和GeForce FX5950(NV38),设法拉利近与ATi的差距,且2004年5月4日GeForce 6800 Ultra(NV40),反过来痛打ATi Radeon X800 XT(R420),夺回领先优势。

然后GPU双雄的高端产品,晶粒面积也稳定增肥,使动辄超过300平方毫米成为习以为常的常态,一路到2006年11月8日的GeForce GTX 8800(G80)以484平方毫米的惊人尺寸,告诉世人GPGPU即将吹响GPU恐龙化的号角。

同场加映另一间错过3D浪潮、试图振衰起蔽的显卡厂商:以MGA Milliennium和Mystique闻名于世的加拿大Matrox,充满传奇色彩的2D王者。

2002年发布Parhelia系列,账面有极度暴力的规格,采用联电150纳米制程,晶体管多达8,000万,晶粒面积也是巨大的174平方毫米,原引发热烈期待,但性能表现却远远不如预期,不仅明显不如更老旧的Nvidia GeForce 4 Ti 4600(NV25),只勉强达到ATi Radeon 8500(R200)和Nvidia GeForce 3(NV20)水准,还不幸直接一头撞上极度强势的ATi Radeon 9700 Pro(R300)。

造成Matrox Parhelia失败的可能原因,大体不外乎驱动程序不够成熟(除GPU双雄外所有厂商的共同弱点)、每个像素管线配置四个材质单元适得其反(大部分游戏都用不到)、运行时脉太低(250MHz,远不如R300的325MHz)、欠缺内存带宽节约技术(反观ATi的第三代Hyper-Z与nVidia第二代的Lightning Memory Architecture)、DirectX只支持到8.1版等等,都断绝Matrox重返荣耀的一切可能,最终只能靠着多重显示输出等特殊功能,站稳一小块利基市场。

Matrox Parhelia AGP 128 MB。

打开GPGPU时代的Nvidia

2006年11月8日,nVidia号称耗费“近5亿美元研发经费”与“4年开发进程”,世界首款对应DirectX 10(DirectCompute 4.x)统一着色器(Unified Shader)架构,支持32位元单浮点精确度的GeForce 8系列(以G80为首的Tesla 1.0微架构),为初代CUDA(Compute Unified Device Architecture,统一计算架构)的载体,堪称是GPU发展史上最大突破,也是Nvidia正式迈入GPGPU的起点。G80还有一个值得大书特书的里程碑:Nvidia GPU的总线纯原生PCI Express化,甩开AGP过渡期的桥接器,对GPGPU应用也有潜在帮助。

Nvidia并购AEGIA而来的PhysX物理引擎,也顺势成功移植到CUDA,代表G80之后的Nvidia GPU均可让坐在计算机前的人有机会“亲自体验如强烈的爆炸、有交互反应的碎片、逼真的流水,以及栩栩如生的角色等动态”(笔者才疏学浅,实在想不出更生动的描述,就只能原文复制粘贴了)。

Nvidia G80问世之后,GPU定义也调整为“由数个兼备SIMD简易性与MIMD高弹性的单指令多线程(SIMT)”核心,组成的单芯片多处理器,利于密集处理大量先天有高平行度且高度同质性的运算工作。 ”

SIMT的初衷,不外乎希望程序开发模型维持现有的形式,让SIMD享有接近MIMD的自由度,企图兼具两者优点。以上这段“有字天书”看不懂也没关系,反正只要知道GPU将“捞过界”主宰高性能浮点运算应用需求就够了。

Nvidia GeForce GTX8800(面积484平方毫米,台积电90纳米制程,6亿8,100万晶体管)。

颠覆ATi GPU技术发展方向的AMD并购案

2006年夏天,AMD以54亿美元价格并购ATi,震动业界,融合CPU与GPU的“Fusion大战略”,也彻底改变绘图技术的长期发展方向,更偏向“运算”而非“游戏”,这到了2018年才渐渐改变。

2007年5月14日,AMD初次对应DirectX 10与统一着色器架构的Radeon HD 2900(R600,初代VLIW5的TeraScale微架构)首度支持64位元双倍浮点精确度,但性能仅单精确度五分之一。走上“超大+超热+超贵=超生”之路的R600家族,也暂时中断AMD“恐龙化”GPU、转向“两颗打一颗”的另类路线,如同1999年10月,用两颗Rage 128 Pro组成的Rage Fury MAXX。GPU双雄从此分道扬镳。

无独有偶的,此时AMD也是打算在服务器CPU市场,用“双馅水饺”对抗英特尔以排山倒海之势扑来的钟摆巨轮,接着AMD就慢慢沉沦,不管CPU还是GPU,两颗还是打不赢人家一颗,还出现高端产品赢不了对方中端的惨况,陷入超过十年的黑暗期。

AMD(ATi)Radeon HD 2900(面积420平方毫米,台积电80纳米制程,7亿2千万晶体管)。

DirectX 10战争2008年还有第二回合,也充分展现GPU双雄的路线差距。开始支持OpenCL 1.1的AMD Radeon HD 4800系列(R700)创下单芯片32位元单浮点精确度理论性能达1TFlops的里程碑。R700家族中继承RV670、率先对应GDDR5内存的RV770,因兼备性能与价格竞争力,公认是AMD显示芯片发展史上罕见的巨大成功。

Nvidia GT200的55纳米制程微缩版GT200B(晶粒面积470平方毫米)“总算”带来落后AMD将近一年的双倍浮点精确度,但因“某种因素”,AMD并没有因此得到什么好处,就让我们继续看下去。

在这里提醒一件有趣小事,Nvidia自从RivaTNT,就持续致敬知名物理学家(或计算机科学家)姓名,命名不同时代的GPU微架构,但却无法从芯片名称看出端倪。Tesla 2.0微架构的GT200将两者合而为一(旧命名方式则变成芯片代码,但后来就没什么“逻辑性”了),也可从数字清楚看出同个GPU微架构的不同阶段,像是“小改动”还是“大翻修”等。

笔者整理如下表:

说到AMD嘛……进入TeraScale后的“群岛”命名只会让人整理到吐血,到“星座”出现后才稍微好转,只能寄望RDNA和CDNA分立后,能更简单明了。

让GPU名正言顺接任高性能计算的IEEE 754-2008浮点数规范

截至为止,这些高端GPU看似具越来越强的可程序化能力,但取代CPU的“泛用性”,特别是高性能浮点运算,横竖眼前仍有巨大的障碍物:完整支持IEEE 754浮点数规范,这也是微软DirectX 11(DirectCompute 5.0)的重头戏,过去缺乏游戏规则(怎么偷工减料谁也管不着)、由IEEE 754-2008版拍板定案的浮点乘积和(FMA),更是让GPU从此有个可依循的公定标准,至于浮点运算单元的肥大化,就是GPU双雄不得不硬扛的甜蜜负担了。

当代两位RISC大师合着的计算机结构教科书《计量方法》第五版“引领GPU更大幅接近主流泛用CPU”的重大革新,就即将成为现实,虽然那位赢家(从那时到现在也还没输过)踏出这步时,也是出师不利,导入台积电40纳米制程不顺,Nvidia的Fermi微架构等于先后出了两版,Nvidia旗舰GPU晶粒面积超过500平方毫米也成为约定俗成的常识。

AMD仍继续推动Fusion大战略,新一代x86处理器微架构Bulldozer(推土机)的双整数运算核心共享一个浮点运算单元,摆明就是假以时日用GPU取代后者。

2010年12月15日的Radeon HD 6970(Cayman XT,389平方毫米)引进VLIW4格式的第三代TeraScale微架构,将“四个简单的矢量运算单元(4D)加上一个专属复杂特殊运算的单元”(T Unit)的VLIW5,改造为“四个可处理所有工作的运算单元”(4D T Unit),改善指令调度与执行单元的使用效率,为AMD真正迈向GPGPU的GCN(Graphic Core Next)微架构预作准备。2012年1月9日的28纳米制程Radeon HD 7970(Tahiti XT,352平方毫米)导入第一时代GCN,对AMD来说,这时GPU才正式进入GPGPU的世界。

不过,AMD的GPU发展策略偏“运算”,长期来看对游戏本业不利,可是毕竟资源有限,依旧只能单一微架构两边通吃,当Nvidia开始有余力分别针对高性能计算和游戏市场,研发“系出同源的微架构却分而治之,善尽在本分保持卓越的责任”产品线时,AMD就要倒大楣了。如出一辙的场景,也重现英特尔那时的CPU钟摆(Tick-Tock)节奏,看过本巨无霸处理器连载第一篇的读者,都应该很清楚这是什么意思。

2012年春天,Bulldozer微架构的AMD Opteron(3月20日)和Nvidia的GeForce GTX 680(3月22日)相隔两天问世,也成为AMD一长串噩梦的开端──CPU和GPU战线一起崩盘。

nVidia统治高性能计算的起点

今日超级计算机“赛猪公”指标Top500的清单里,满满Nvidia旗舰GPU,早在2012到2014年,就被横空出世的Kepler微架构奠定了难以撼动的基础。不论游戏还是运算,AMD GCN才刚面世没多久就被Nvidia Kepler一击K.O.,2015年独显市场占有率跌到历史新低的“18趴”,一蹶不振到2018年,至今都尚未完全挽回颓势。

事实上,Nvidia从Tesla到Fermi的GPU微架构,也和并购ATi的AMD一样,偏“运算”而非“游戏”,但俗语说的好:鱼与熊掌难以兼得,加上Nvidia在40纳米制程的Fermi“烫到”(在尚未熟悉的先进制程打造巨大芯片),索性一改先推出顶配芯片、再一路往下砍规格变出中低端产品线的作风,Kepler微架构先抢滩中端市场,也完全让运算专用的GPU独立出来。

另外,Nvidia放弃“高时脉极致效益”的两倍时脉Shader,转向激增执行单元规模,正面挑战AMD实行有些年头的“低时脉人海战术”(前面都这么多张规格比较表了,各位看过一定都会很有感)。受制于有效内存带宽,因自从Nvidia NV40就缺乏更好的内存压缩传输机制而不如对手,就算AMD再怎么“堆高”执行单元,实际反应在性能表现的“效益”还是一直输给Nvidia一大截,到了2012年,依然不得不业力引爆。添加运算指令和扩张执行单元看似简单,但能否提供足够的内存带宽,使之充分发挥,那又是另一回事。历史已经证明,要完成相近的性能表现,AMD总是需要比Nvidia更充沛的内存带宽。

然后AMD GCN微架构的初代“高端”产品Radeon HD 7970(Tahiti XT)就这样被Nvidia设置为“中端”的GTX 680(GK104)整个打爆了,这“对Nvidia是惊喜,对AMD是惊吓”的结果(这段叙述好像也同样适用于今年的中华职棒总冠军战),恐怕连Nvidia自己也深感意外。

2012年11月12日才姗姗来迟的高端GTX 780(GK110,但没有完全激活所有功能单元)一举扩大领先优势,2014年11月17日的Tesla K80(GK210)更确立Nvidia在高性能计算(HPC)的领先地位,AMD专业运算卡FirePro产品线(以及后继者Radeon Instinct)就这样被硬生生打垮。

从2012年初到2016年中旬,Nvidia和AMD均志同道合“黏死”在台积电28纳米制程好几年(这记录日后才被英特尔14纳米牙膏打破),要在进步极度有限的制程挤出更多性能,最暴力也最稳当的手段莫过于让“游戏”和“运算”的微架构“兄弟登山,各自努力”。

所以Kepler后继者Maxwell,被nVidia彻底精炼成成专攻消费市场的过渡时期微架构,以牺牲64位元双倍浮点精确度的性能为代价,换取1.35倍的单一SP性能和“两倍”能耗比。前面的Kepler是以中端市场当起点还不打紧,2014年3月22日,Maxwell竟然以售价149美元的GeForce GTX 750 Ti(GM107-400,148平方毫米)在低端市场踏出第一步。

等一下,前面不是才扯一堆“GPU只会越来越肥”,怎么现在体重又仿佛回光返照到GPU刚诞生的婴儿期了?别担心,晶体管如同生命会自己找出路,Maxwell 2.0的顶配GM200让nVidia GPU的晶粒面积首度突破600平方毫米大关,中端GM204也逼近400平方毫米。

既然此时此刻的AMD已被Nvidia打到毫无还手之力,也就没有必要好好比较双方规格细节的必要性了。

在此也“附赠”AMD六个GCN时代的旗舰芯片,也堪称是AMD“GPU黑暗期”的象征。在28纳米制程“加持”下,AMD也将旗舰GPU的面积增加到逼近600平方毫米

但AMD2018年“突然”发布的Vega 20,与背后暗藏的“双轨战略”,却替AMD即将发动的大反击,埋下充满悬疑的伏笔。

GPU终极增肥大法:人工智能

“人工智能”是今日随处可见、人人朗朗上口、一没它就什么都不对的关键名词,人工智能的深度学习与推论所需的各式各样资料格式,结合高性能计算必须的64位元双倍浮点精确度,催生更复杂的执行单元,也成为让高端GPU更肥胖的催化剂。

我们先来回顾一下2013年的nVidia GPU产品进程表,原本Maxwell要直接演进到Volta。

但2014年Volta前就冒出Pascal了。摆脱28纳米制程纠缠后,16纳米制程Pascal吹响了众多GPU重大革新的号角,例如独立64位元浮点运算单元、支持8位元短整数与16位元短浮点、导入HBM2内存、号称有PCI Express 3.0“5~12倍”性能的NVLink(用来连接IBM Power8处理器)、统合CPU GPU内存寻址空间并提供需求分页的Unified Virtual Memory、初代DGX-1深度学习系统等。

讲白了,当仔细查看Pascal后面那个彻头彻尾为人工智能量身订做、兼顾学习和推测、甚至连消费型衍生型号都没有的Volta,就不难理解Nvidia想小步快跑、降低风险的企图。

我们就来瞧瞧Volta的执行单元长的什么样子,包含五种截然不同的独立运算功能单元,一个次核心就有16个32位元浮点(FP32,CUDA Core的同义词)、4个特殊运算(MUFU)、8个64位元浮点(FP64)、16个整数运算(INT)、与2个为人工智能而生的张量运算核心(Tensor Core)。12纳米制程、晶体管210亿、晶粒面积多达815平方毫米的GV100,拥有多达5,120个CUDA Core(SP),是Fermi完全体GF110的“十倍”,由此不难想见GPU进步幅度之快。

言归正传,本文主题专注GPU“体重”,如需了解技术演化的细节,像那票烦死人的不同浮点精确度的性能打折比例等,可参阅发布于2017年9月的旧文。让我们回头查看Nvidia历代旗舰级通用运算GPU的规格,算一算晶体管密度,当成判断苹果M1 Max的GPU等级的重要依据。

同样走上双轨之路的AMD

不过看在AMD近年企图重振旗鼓、逐步重返荣耀的份上,也不得不提一下AMD的近况。AMD分别在2018年11月18日和2020年10月28日发布产品定位完全迥异的Vega 20(Radeon Instinct MI60)和Navi 21(Radeon RX 6900 XT)旗舰级GPU,也在2020年财务分析师大会宣示也将“运算”和“游戏”分成两个独立体系:“运算导向的CDNA”与“游戏优化的RDNA”。

我们再度升起搜索巨无霸GPU的雷达。嗯,应当起自于128MB第三阶Infinity Cache的贡献,RDNA体系的旗舰Navi 21重回520平方毫米以上水准,真是可喜可贺。

但更让人感到讶异的是:等了这么多年,CDNA体系终于展现能与Nvidia旗舰GPU分庭抗礼的潜力。前阵子才发布的Radeon MI200系列,让AMD首次拥有账面硬件规格足以压制Nvidia的武器,未来能否抢走Nvidia A100的生意,就端赖AMD能否有本事突破“CUDA生态系统统封锁网”了。

在此也再次好好比一比旗舰级运算用GPU的规格,让我们继续期待明年Top500榜单会有多少Nvidia A100被x86双雄产品取而代之。

苹果M1 Max的GPU大概属于哪个等级?

行文至此,看了这么多历史巨无霸GPU,看到眼花缭乱,也该推测苹果M1 Max GPU,大致上属于那个“等级”。

我们先假定苹果的GPU技术水准与微架构设计和AMD Nvidia相去不远,我们再以晶体管密度粗估M1 Max的GPU换到老旧制程的面积。

M1 Max的5纳米制程晶体管密度约每平方毫米1.32亿,略低于相同制程的M1,大致上是GPU双雄7纳米(台积电)或8纳米(三星)制程产品的2~3倍。

GPU、64MB系统缓存内存和512位元宽内存控制器区块,大约占M1 Max五成面积(216平方毫米),如此一来,对应的是432~648平方毫米范围,拿来跟时下旗舰级消费型显卡比对,和Nvidia GeForce GTX 3090(GA102,628平方毫米,密度每平方毫米4,510万)和AMD Radeon RX6900 XTX(Navi 21,520平方毫米,密度每平方毫米5,150万)实属相近等级,就算考虑到时脉的巨大差距(这也会影响到晶体管密度),再差最起码也该有中端显卡水准。目前随处可见的“M1 Max足以匹敌高端显卡”的评论,就这个角度看,也看似所言不虚,尤其是同样极度依赖大型化缓存内存的AMD RDNA 2.0可为适当的对照组。

也请别忘记,根据传言,苹果将有包两颗M1 Max的Duo版和包四颗的Quadro版,届时性能将很可能超越GPU双雄的所有产品,即使比较的立足点并不公平。

假若那天苹果想不开,想打造自家数据中心的人工智能加速器,搞不好才是世界最大无霸的GPU也说不定,虽然如果美梦成真,世人很可能也无从知晓。

(首图来源:苹果)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多