有了cpu为什么还需要gpu(一部关于显卡的战争史)

导读:本文带你回顾从CPU到GPU的历史,再展望从GPU到TPU的未来。

作者:钱纲

来源:华章科技

有了cpu为什么还需要gpu(一部关于显卡的战争史)(1)

01 第一代、第二代GPU

1998年英伟达宣布GPU的研发成功,是计算机显示的历史性突破。此后,20世纪70年代末到1998年被称为pre-GPU时代,即前GPU时代,1998年以后则被称为GPU时代。

在前GPU时代,一些图形处理器厂商,都研发了各自的GPU,这些GPU仍然在持续改进并被广泛使用,其价格也非常昂贵。

现代GPU中使用的晶体管数量已远超过CPU。2.4GHz的英特尔奔腾IV CPU用到了5500万个晶体管,英伟达在GeForce FX GPU上的晶体管数量超过了1.25亿个,而英伟达7800 GTX上的晶体管数量达到了3.2亿个。

1993年1月,由黄仁勋等三人发起成立的英伟达公司在硅谷中心的圣克拉拉市创建。它是一家为电脑和游戏机生产显卡与GPU的芯片设计公司。

黄仁勋于1963年出生于中国台湾,幼年时随父母移居美国。20岁时,黄仁勋结识了现在的妻子洛丽。他向洛丽承诺会在30岁时拥有一家自己的公司。1993年,30岁的黄仁勋创建了英伟达,兑现了这一诺言,也迎来了其人生的转折点。

英伟达的显卡产品线分为GeForce和Quadro两大系列。1999年,GeForce首次亮相,产品覆盖桌面与移动领域。

英伟达最初的产品NV1和NV2是基于二次曲面贴图(Quadratic TextureMaps)来实现三维效果的,它们在微软的Direct 3D多边形3D图形标准发布后,失去了市场。这一失败让英伟达走到了破产的边缘,若没有SEGA早期的700万美元订单,让英伟达还能研发NV3,英伟达可能早已不存在了。

因为NV1和NV2的失败,英伟达把命运押注在了NV3上,也是我们熟悉的Riva128显卡。英伟达吸取了教训,对Direct 3D和OpenGL提供了完整的支持。其三维性能在非Glide游戏里超过了Voodoo。

voodoo只是纯三维加速卡,而Riva128拥有完整的二维加速能力。Riva128很快成了OEM和零售商的宠儿。1998年,Riva128发布后不到一年,其出货量一举超越了voodoo,让英伟达起死回生。

1998年,英伟达发布了RivaTNT,但其硬件指标不属于voodoo2 SLI,当时的游戏基本还是以支持Glide为主,但Glide的很多超前特性在DX和OpenGL上根本没有。TNT的二维画质较差,很多二维用户对它提不起兴趣。相比之下,英特尔的第一款显卡i740则具有当时最优秀的二维显示能力并赢得了大量的市场。

1998年的晚些时候,英伟达发布了TNT2。这一款GPU对TNT的缺点进行了全面修正。TNT2给了3Dfx致命一击。最后,3Dfx的知识产权在2000年被英伟达买断。

英伟达的TNT2、ATI的Rage、3Dfx的Voodoo都属于第一代现代GPU。这一代GPU独立于CPU进行像素缓存区的更新,还能光栅化三角面片并进行纹理操作,但这一代的GPU不能进行三维顶点的空间坐标变换,它依赖CPU进行顶点坐标变换的计算。第一代GPU的功能有限,只能用于纹理组合的数学计算或者像素色值的计算。

1999年,英伟达发布了Geforce256(见图25-1),它的核心是NV10,采用0.22微米制程工艺,有四条渲染管线,每一条管线有四个像素单元,一个材质单元,并提供SDRAM和DDR SDRAM两种不同显存的配置,GeForce 256同时支持Direct3D 7.0、T&L以及OpenGL1.2先进的图形技术,以至其成为当时生命周期最长的产品。

有了cpu为什么还需要gpu(一部关于显卡的战争史)(2)

▲图25-1 英伟达的GPU:Geforce256

在发布Geforce256时,英伟达首创了图形处理器一词GPU(GrapgicProcess Unit)。在Geforce256之前,T&L由CPU或者另一个独立处理器处理。

把T&L整合到GPU中是一大进步,原因是GPU从CPU接管了大量工作。硬件T&L引擎带来的效果是,三维模型能用更多的多边形来描绘,这使得三维效果更加细腻。对于Lighting来说,CPU不必计算大量的光照数据,直接通过GPU就能获得更好的效能。

T&L是GPU的一个规格名称,即Transforming和Lighting的首字母缩写,含义为光影转换。在GPU中,T&L最大的功能是处理图形的整体角度旋转以及光源阴影等三维效果。

在Geforce256面前,3Dfx完全没有了反击的可能。这是一款出类拔萃的芯片,也是世界上第一款真正的GPU。它有对硬件T&L的完整支持,以及两倍于TNT2的性能指标。使用了DDR内存后,它的性能领先voodoo3一倍。Geforce256让英伟达称霸显卡和GPU市场。

02 第三代、第四代GPU

2000年,ATI发布了继Geforce256之后第二款真正的GPU——Radeon256。其性能较前者更优。即便与后来的Geforce2 GTS相比也丝毫不差。

2000年,英伟达发布了低端经典CPU——Geforce2 MX,它让英伟达牢牢把持住了低端市场,而3Dfx的境况则越来越凄惨。

2000年,是显卡厂商大洗牌的开始。S3、SIS等厂商无力与英伟达和ATI竞争,淡出了显卡市场。英伟达的产品细分策略也让ATI应对乏力。ATI并没有成功地挑战英伟达的霸主地位,但它选择了GPU之路,避免了和其他厂商相同的命运。

4核的voodoo56000也没有挽回3Dfx的命运,72瓦的高功耗让它成了第一款需要外置电源的显卡,AGP接口无法提供那么高的功率。但voodoo5 6000因其稀少,反而成了一款热门收藏的显卡。

2000年12月,3Dfx被英伟达收购。结束了一代神话,留给人们无尽的感叹。

2001年,首先出现的是DX版本升级到了8.0,GeForce3则成为第一款支持DX8.0的GPU。xbox的订单让英伟达如虎添翼,但ATI毫不示弱。2001年中,DX升级到8.1,而Radeon 8500则成为第一款完整支持DX8.1的GPU,其性能较Geforce3有了明显的提升。

这使ATI成为继3Dfx后唯一有实力和英伟达竞争的厂商。但Radeon8500的驱动是令人头痛的问题,瑕不掩瑜,Radeon 8500仍是一款优秀的产品。8500的前身Radeon7500以GeFroce2 MX的价格及超过GeForce2 Pro的性能成为低端GPU明星。

不久,制程更先进的GeFroce2Ti和pro因为它们更出色的性价比让英伟达重新赢得了低端市场。这一年,也是ATI成立后的16年来首次出现亏损。

2001年开启了第三代GPU时期,第三代GPU有顶点编程能力(Vertex Programmability),如GeForce 4Ti、(见图25-2)ATI的8500等。这些GPU允许应用程序指定一个序列的指令进行顶点操作,这是GPU编程的本质。

这是一个具有开创意义的时期,这一时期确立的GPU编程思路且一直延续至今,它不但深入到工程领域改善了人们的日常生活,而且开创了诸多计算机科学的新领域,如体绘制、光照模拟、人体动画、通用计算等。同时,Direct8和OpenGL也提供了对顶点编程能力的支持。

只是这一代GPU尚没有支持像素级的编程能力,即片段编程能力(Fragment Programmability)。

有了cpu为什么还需要gpu(一部关于显卡的战争史)(3)

▲图25-2 英伟达的GPU:GeForce 4Ti

所谓顶点(Vertex),即我们熟悉的三维图形的顶点,由于三维模型是基于坐标空间内部设计的,所以顶点信息包含了三维模型在空间内的坐标等信息。

顶点投影(Vertex Shader)就是顶点信息的运算编程器,可以通过赋予特定算法在工作中改变三维模型的外形,顶点投影的顶点运算单元可以直接检索显存中的材质数据。现代三维游戏的场景极为复杂。所涉及的材质和多边形数量非常惊人。游戏开发人员必须利用顶点投影的新特性,充分发挥想象,实现漂亮的特效。

2002年,微软为了对抗PS2,降价销售XBOX。这让英伟达很不满,微软选择了ATI作为其下一代主机的GPU供应商。英伟达毫不示弱,同年发布了GeForce4系列产品,其低端产品GeForce4 MX440在很长一段时间内都是低端显卡的性能标杆。

英伟达没料到的是,这一年ATI祭出了它的极品:R300(见图25-3)。它具有领先英伟达产品接近一倍的性能。ATI让英伟达措手不及。从此,ATI和英伟达开始平起平坐。

有了cpu为什么还需要gpu(一部关于显卡的战争史)(4)

▲图25-3 ATI R300的构架

R300的出现让英伟达措手不及。很快,英伟达就开发出了下一代产品:GeForce FX。

但英伟达太过性急,不成熟的0.13微米工艺及过高的频率葬送了FX5800Ultra。其性能只是勉强超过了9700pro,然而其发热和噪声成了硬伤。它在GPU史上第一次采用了涡轮散热。在性能只略高于9700pro的情况下,功耗居然比9700pro高两倍。这款GPU是英伟达最失败的产品。

2003年,ATI推出了支持DX9和DDR2的9800pro。9800XT再次胜过了FX5900。英伟达后来发布的FX5950在功耗远超9800XT的情况下,性能仍落后于9800XT。这一年,ATI在GPU领域里领先于英伟达。

2002年末到2003年,第四代GPU即GPGPU出现了。SIGGRAPH 2003大会上,与会人士探讨了利用GPU进行通用计算的设想和模型,这奠定了GPGPU的基础。其后3年,用统一的流处理器取代GPU中原有的不同着色单元的设计释放了GPU的计算能力,为今天的GPU编程计算打下了基础。

英伟达的GeForceFX和ATI Radeon 9700是第四代GPU的先驱,这两款GPU都具有顶点编程和片段编程能力。同时DirectX和OpenGL也都扩展了自身的API,用以支持顶点编程和片段编程。2003年以后,可编程的GPU正式诞生,在DirectX和OpenGL锲而不舍的改进下,基于图形硬件的编程技术,即GPU编程,宣告诞生。

可编程GPU也有其缺陷。因为在GPU内,任意一个元素的计算与其他同类型数据无关,这就导致了依赖数据间相关性的算法在GPU上很难实现,如射线与物体的求交运算。GPU中的控制器远少于CPU,其控制能力有限。

另外,GPU编程必须懂得计算机图形学知识,以及图形处理API,其门槛较高,学习周期长。早期的GPU编程使用汇编语言,开发难度高,效率低。不过,随着Advanced Shader Language的兴起,GPU编程已经容易多了。

可编程GPU的应用非常广泛。尤其是在科学可视化计算上,GPU的优势极大。由于人体CT、地质勘探、气象数据、流体力学等科学可视化计算处理的数据量极大,基于CPU的计算无法满足实时性要求,在GPU上进行计算则效率很高。

很多CPU上非常耗时的算法都能移植到GPU上。目前,基于GPU的科学可视化研究已成为主流。

可编程GPU的通用算法前景非常好。基于GPU进行通用计算的研究目前很热,被称为GPGPU(General-purpose Computing on GraphicsProcedding Units,也被称为GPGP或GP2),很多数值计算等通用算法都在GPU上实现了,且表现不俗。

目前,线性代数、物理仿真和光线跟踪算法都已经成功地移植到了GPU上。这一切都是因为在2003年后,GPU正式进入了可编程阶段。GPU的并行处理能力强于CPU,因此用户可以在同一时间内让GPU并行处理很多顶点数据。尽管GPU有很强的并行能力,但GPU无法取代CPU,这是因为GPU无法实现CPU强大的逻辑运算能力。

2004年,英伟达的GeFroce 6800Ultra让它夺回了GPU老大的地位(见图25-4)。ATI的X800在性能上不属于GeFroce 6800ultra,但是不支持最新的DX。而GeFroce 6800Ultra完整支持9.0c,X800只支持9.0b。这一次,ATI又败下阵来。

有了cpu为什么还需要gpu(一部关于显卡的战争史)(5)

▲图25-4 英伟达的GeFroce 6800Ultra

GeForce 6800Ultra作为面向高端市场的显卡,渲染管线增加到16条,采用GDDR3显存频率达到1.1GHz,内存带宽达到35.2GB/s,性能相对上代GPU有了巨大的提升。

2004年,ATI在中低端市场中创造了一个神话:Radeon9550。这款GPU是ATI史上最成功的产品,售价为500美元,它的Radeon 9550在性能上并不输于Radeon 9600。通过修改BIOS,它能直接具有Radeon 9600的性能,通过修改驱动能使其成为专业GPU。

此时,英伟达在低端市场中只有FX5200,正是英伟达在低端市场中的不作为成就了Radeon9550(见图25-5)。

有了cpu为什么还需要gpu(一部关于显卡的战争史)(6)

▲图25-5 ATI的Radeon9550

2005年,英伟达发布了第二代9.0c显卡,Geforce 7800GTX,相对于6800Ultra其性能提高了40%。ATI因为制程的原因,在第四季度才推出了以R520为核的Radeon X1800,其在性能上稍胜7800GTX。这一年,GPU市场稍显平淡。

2006年,英伟达在把显存翻倍的同时,把7800GTX的核心频率也拉高了25%,带来了20%以上的性能提升,×1800的优势瞬间消失。一代经典R580直追而上,×1900则将7800GTX 512MB击败,即便面对后来的7900GTX,×1900也毫不逊色。

7950GX2则作为英伟达的第一款双PCB双芯卡出现了。紧随其后的ATI使用了GDDR4显存,推出了RadeonX1950 XTX,这款DX9时代最强的单芯GPU成就了ATI最后的辉煌。2006年7月,AMD收购了ATI。

2006年年底,真正的显存变革到来了。DX10统一了渲染架构,顶点着色引擎,此举结束了像素渲染与引擎的分置。英伟达的8800GTX也因视窗Vista没有发布,在没有任何DX10游戏支持的情况下,实现了对1950XTX接近50%的性能领先。8800GTX赢得了当时媒体的种种溢美之词。

03 GPU的新发展

2007年,AMD在8800GTX上市半年后推出了以R600为内核的2900XT,512比特的环形显存总线让它成了高功耗、高发热的GPU,其性能却没有超过8800GTS。R600的失败让G80成了史上最长寿的内核,它的后代G92持续了三代显卡。

2007年,相对2900XT的失败,AMD推出的以RV670为核的HD3870/3850则是一款具有优秀性价比的核心,舍弃了环形总线,位宽降到了256比特。其极低的成本让它具有了极高的杀价资本。AMD甚至制造了一款双芯卡——HD3870X2。由于RV670的成功,AMD放弃了大核心的策略。

因为AMD的乏力,所以英伟达减慢了升级速度。2008年7月,英伟达发布了以G92为核心的9800GTX,它相对于G80没有实质性的提升,这给了AMD机会。同年,以800SP为核的RV770成了AMD的撒手锏。HD4850迫使9800GTX一夜之间降价千元。

这一年AMD的HD4870胜过了英伟达的全新GPU:GTX260,其高端的GTX280也被AMD的4870X2击败。英伟达不得不临时升级GTX260并推出了GTX260 ,这才挽回一点市场,9800GTX升级为9800GTX 之后又以GTS250的身份继续服役。G92核心极为长寿。

尽管主流市场被AMD击败,但GTX280和GTX295保住了英伟达GPU性能之王的地位。

GeForce GTX 280,采用65纳米工艺制程,拥有240个流处理器,支持双精度浮点运算,内存带宽高达142GB/s,它强大的规格在高端市场中稳住了英伟达的地位。

2009年9月,AMD发布了支持Direct×11的Radeon HD 5800系列GPU,Radeon HD 5800系列带着全新的对Direct×11的支持和过硬的规格冲击着GeForce GTX 200系列的地位。

2010年,英伟达发布了它的全新的GPU构架,但它犯了与FX5800同样的错误。以Fermi构架为核的GTX480以其巨大的功耗和发热量闻名于世,据说发生过有人用480来煮鸡蛋的事情,可见480有多热。

相比之下,HD5870则优秀得太多了。它的双芯版本HD5970坐稳了长达一年以上的GPU性能之王的宝座。Fermi在升级最新制程之后,改善了发热量高的问题,也把流处理器发展到了512个。同年,英伟达在这一年收获了新外号:核弹。因为某媒体在评测GTX580时GPU爆炸了。

2011年,英伟达重组了Fermi核心,推出了GeForce GTX 580。上一代GTX 480因为良品率低没有采用完整的Fermi核心,原设计中的512个流处理器因此被削减。

在以GF110为核心的GeForce GTX 580中,流处理器是完整的512个,GF110在纹理采样与算法上做了进一步优化。相对GF100核心,GeForce GTX 580在工作频率更高的情况下,功耗和温度也达到了均衡,在性能上超越了AMD的Radeon 6970。

2011年,英伟达为了弥补中高端GPU的空缺,正式推出了GeForce GTX560 Ti,它采用的是全新的GF114架构,GF114不在旗舰核心上进行削减,而是优化CUDA核心和SM单元,使其更贴合市场定位,这使它在中高端GPU市场中获得了不错的反响。

2012年,在经历了Radeon HD 6970的低迷后,AMD重振旗鼓发布全新的基于CGN架构的Radeon HD 7970 GPU,它采用了台积电最新的28纳米工艺制程,不再使用投影分频模式,在增加了CUDA数量的同时,使同频运行的模式带来的功耗相对比投影模式要低。

在AMD推出Radeon HD 7970后的三个月,英伟达在全新的Kepler架构基础上,推出了GeForce GTX 680 GPU。无论是游戏性能、功耗以及价格方面,它都要比Radeon HD 7970强大。

从GeForce GTX 680开始,GPU Boost动态加速被引入了GPU,GPUBoost根据TDP(Thermal Design Power)范围值提高核心频率或者降至标准频率,同时适用于超频状态。

在Kepler架构上,英伟达推出了新的TXAA抗锯齿,相比多重采样抗锯齿(MSAA),画面更出色,效能也更高,同时为了解决在帧数过低时打开垂直同步造成的帧数暴降,英伟达在新的TXAA抗锯齿中加入自适应垂直同步(Apdative VSync)技术。

2013年,英伟达在第二代Kepler架构的基础上推出了GeForce GTXTitan和780Ti。

第一代Kepler架构的GeForce GTX 680作为旗舰GPU在各方面表现得都不错。在此基础上,英伟达推出了大核心GK110,并命名为GeForceGTX Titan,首次没有采用数字编号的命名方式,Titan的意思是代表着最高性能的GeForce显卡。

最早使用GK110架构的GPU是英伟达的Tesla/K20/K20X。它们的单/双精度的浮点性能在当时达到了史上最佳。

GeForce GTX Titan的整体规格和英伟达的Tesla K20X相似,拥有2688CUDA核心,优化了SMX单元,工作频率更高,在当时性能是单卡中最强的。在当时的GPU市场上,GeForce GTX Titan的性能无与伦比,但其定价为7999元则令很多消费者望而却步。

英伟达很快又推出了GK110完整核心架构,它拥有核心全部15组SMX单元,同时核心与显存频率也有所提升,GK110核心改进了功耗和温度,以此为基础的GeForce GTX 780Ti GPU使英伟达重新登上了GPU的王者之位。

2014~2015年,英伟达又推出了高效的Maxwell架构及在此基础上的GPU:GeForce GTX 980和GeForce GTX 970。

从Fermi到Kepler架构,英伟达在追求性能极致的同时,努力降低GPU功耗。第一代Maxwell架构是定位稍低的GM107核心,它改进了SMX单元,提高了每瓦性能。

而第二代Maxwell架构的核心是GM204,GM204在合理控制核心面积的同时,增加了SMX的数量,提高了效率。使用Maxwell架构,即使使用28纳米工艺制程,性能也能大幅度提升并降低了功耗。

英伟达推出GeForce GTX 980和GeForce GXT 970不仅是为了革新自己的核心架构,也是为了在市场上继续打压AMD的R9 Radeon 290X/290GPU。

英伟达在领先了九个月的情况下,AMD推出了R9 Radeon390/390X GPU,在Hawaii构架的基础上降低了功耗,提高了频率和显存容量,同时经过CGN通用架构的驱动不断优化,AMD终于挽回了一局。

在从GeForce 600系列到GeForce 900系列的GPU中,英伟达一直采用台积电28纳米制程工艺,2016年5月,英伟达推出了采用新一代16纳米FinFET制程工艺的Pascal架构,晶体管数量多达72亿个,核心频率大幅度提升,用户轻松超频就能突破2GHz。

Pascal架构采用的是GP104核心,并非是GP100大核心,但还是带来了GDDR5X显存升级、异步运算改进、新的VR技术等方面的提升。

目前,英伟达采用Pascal架构的GPU有GeForce GTX 1080(见图25-6)、GeForce GTX 1070和GeForce GTX 1060,三款GPU代表旗舰、高端、中高端三个级别。

有了cpu为什么还需要gpu(一部关于显卡的战争史)(7)

▲图25-6 英伟达的GeForce GTX 1080

目前,AMD只有唯一的新款——采用了Polaris架构的Radeon RX480,定位与GeForce GTX 1060相符,但是从各方面的表现来看,Radeon RX 480不如GeForce GTX 1060。

在GeForce系列前,英伟达只是在GPU厂商百花齐放的时代翻滚打拼,生存并逐步壮大,而今天风靡全球的GeForce系列GPU则把它推到了GPU的王者之位。

英伟达的GeForce产品线从诞生至今,已经走过了17个年头。它为我们提供了很多经典产品。三维游戏因其卓越的性能给用户带来了超级震撼的使用体验。

04 未来的GPU发展方向

今天,我们面临的芯片制程工艺已经达到了7纳米。半导体芯片的制程工艺眼看就要达到物理极限,而我们面临的需要处理的信息和应用却不减反增。大数据和人工智能的时代已经来临。

为了应对这些新局面,人们开始从传统的以CPU为主GPU为辅的英特尔处理器构架转变为以GPU为主CPU为辅的新构架,尽管当前的计算系统仍是“CPU 协处理器”的混合架构。

随着机器学习算法等AI在各应用领域中表现出优越性能后,对机器学习算法硬件上的支持就成了处理器设计的重要考量。

目前,很多机器学习算法都在GPU上运行,但GPU仍是一种通用芯片,其效能与功耗还没有在机器学习算法上优化。这时,谷歌出手了,它要做一款专用于机器学习算法的芯片,于是便有了TPU(Tensor Processing Unit)。

简单地说,CPU是完全通用的处理架构;GPU是通用的图像处理构架,是准通用处理架构;而TPU则有明确的目标和处理逻辑,它彻底牺牲了通用性,得到了特定应用的极端效率。

谷歌在它的数据中心使用了几年的TPU(见图25-7),性能指标非常好,将硬件性能提前了7年,为摩尔定律的3倍。TPU的高性能来源于三个方面:控制发热量、容忍低精度运算、数据本地化。

有了cpu为什么还需要gpu(一部关于显卡的战争史)(8)

▲图25-7 在谷歌数据中心应用的TPU


有了cpu为什么还需要gpu(一部关于显卡的战争史)(9)

▲图25-8 TPU的构架

从CPU到GPU再到TPU,处理器经过了从通用构架到准通用架构再到专用构架的道路。未来的处理器将是为了各种不同应用专门设计的,谁都不知道GPU会在AI和比特币上有如此之大的应用,也没有人知道GPU的前景会如此好。

那么TPU呢?目前我们只看到它的早期应用就有了如此光辉的前景,我们无法预知TPU未来的应用,更无法预知未来的处理器会是什么样子的。

关于作者:钱纲,现就职于美国德州仪器公司,从事半导体工艺及半导体器件的开发与研究工作。科学网人气作者,其作品在线获得超过千万人次的浏览量。钱纲的作品以涉及历史、科技的杂文、随笔为主。主要作品有美国历史及人物纪事《美国往事》,硅谷历史《硅谷简史》等。

本文摘编自《芯片改变世界》,经出版方授权发布。

有了cpu为什么还需要gpu(一部关于显卡的战争史)(10)

延伸阅读《芯片改变世界》

推荐语:本书是芯片技术发展的科普图书,重点讲述了电子工业的产生,早期电子器件、半导体器件、及芯片的产生与发展的历史。把芯片技术与其发展史结合起来,描绘芯片产业与第三、第四次工业革命的兴起及发展过程。本书的主角是芯片技术的历史沿革、发明家、创业家、风险投资家及企业家。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页