1999年,nvidia推出了首款图形处理器(gpu),它是迄今为止使用最广的并行处理器。源于对逼真及实时图像的渴求,gpu已成为既可以浮点运算又可以编程的处理器;如今的gpu在计算吞吐量和内存带宽上远优于cpu,使其成为加速数据并行应用程序的理想处理器。
2003年起,nvidia开始对gpu进行非图形应用程序方面的探索。通过使用高级图形语言如directx、opengl和cg,将各种数据并行算法移植于gpu。像蛋白质折叠、股票期权定价、sql查询及mri重建等问题都能通过gpu获得非凡的加速表现。这些早期将图形api用于通用计算的尝试被我们称为gpgpu程序。
虽然gpgpu模型显示出不俗的加速性能,但依旧面临诸多问题。首先,它要求程序员具备有关图形api以及gpu架构的相关知识。其次,问题必须按照顶点坐标、纹理及着色程序的方式表达出来,极大地增加了程序的复杂性。第三,不支持诸如随机读写内存等基础的编程特性,大大限制了编程模型。最后,缺少对双精度运算的支持(直到最近)意味著有些科学应用程序不能运行在gpu上。
为解决这些问题,nvidia采用了两项关键技术——g80统一图形与计算架构(最先采用于geforce 8800、quadro fx 5600与tesla c870 gpu)和cuda。cuda作为一种软硬件架构,可采用多种高级编程语言对gpu进行编程。同时,这两种技术也代表着一种新的gpu应用方式。相比以前通过编程将专业图形单元与图形api结合不同,程序员可通过cuda扩展来编写c语言程序,针对通用的大规模并行处理器。我们把这种新型gpu编程模式称之为“gpu计算”,它意味着更广泛的应用程序支持,更多编程语言的支持,是与初期gpgpu编程模型的本质分离。
g80架构
nvidia旗下geforce 8800是被赋予了新型gpu计算模型的产品。2006年11月推出,基于geforce 8800的g80为gpu计算所带来了的是一些关键性的创新:
g80是首款支持c语言的gpu,允许程序员使用gpu所带来的计算力,而又无须再学习一门新的编程语言。
g80是首款以单个、统一处理器取代顶点与像素管线的gpu,这种处理器可以执行顶点、几何、像素及计算程序。
g80是首款利用标量线程处理器的gpu,从而消除了程序员手动管理向量寄存器。
g80采用了单指令、多线程(simt)的执行模型,多个相互独立的线程可并行执行单条指令。
g80对内部线程通讯采用了共享内存和栅障同步。
2008年6月,nvidia对g80架构进行了重大改进。第二代统一架构——gt200(首次采用是在geforce gtx 280,quadro fx5800 和tesla t10 gpu上)——将流处理器的核心数量(以下称其为 cuda核心)从128增加至240。每个处理器的寄存器组都扩大了一倍,允许更多的线程任何时候在芯片上执行。增加硬件内存的联合存取以改善内存访问效率。另外,还添加了对双精度浮点运算的支持,以处理科学和高性能计算(hpc)应用。
在设计每款新一代gpu时,nvidia都以改善现有应用性能与gpu可编程性为宗旨;更快速的应用性将能带来直接的效益,gpu在可编程性上的不断进步,使得它发展成为我们当下最通用的并行处理器。正是基于这样的理念,促使我们又着手研发gt200架构的继任者。
nvidia的下一代cuda计算与图形框架fermi
从最初的g80起,fermi架构在gpu架构上做出了最重大的飞跃。g80是统一图形与计算并行处理器的雏形,而gt200是对g80在性能及功能性方面的延伸。对于fermi,我们融入了上两款处理器以及为它们编写应用程序中所获得的经验,应用了一种全新的方法,设计和创造出世界上第一款计算型gpu。在fermi的研发准备过程中,我们收集了自推出g80和gt200以来广泛使用gpu计算的用户的反馈,并将以下关键领域作为改进重点:
改善双精度浮点运算的性能——单精度的性能大约是台式cpu的10倍,而有些gpu计算应用程序还需要更高的双精度浮点运算性能。
ecc支持——ecc允许gpu计算用户在数据中心的安装中安全地部署大规模的gpu,并确保数据敏感型应用程序,如医学影像及财务期权定价等不出现内存错误。
真正的缓存层次——有些并行算法无法使用gpu的共享内存,用户需要一个真正的缓存架构来辅助他们。
更大的共享内存——许多cuda程序员需要超过16kb的sm共享内存来加速他们的应用程序。
更快速的上下文转换——用户需要在应用程序之间实现更快速的上下文切换,和图形与计算应用之间更快速的相互操作。
更快速的原子操作——用户需要为他们的并行算法实现更快速的“读-修改-写”原子操作。
针对这些需求,fermi工作小组设计了一款处理器,原始计算力得到了极大的提升,通过架构上的创新还大大增加了可编程性以及计算效率。fermi在架构上的闪光点体现在:
第三代流式多处理器(sm)
每个sm有32个cuda核心,是gt200的4倍
双精度浮点运算的峰值性能是gt200的8倍
双warp调度器同时调度和分配来自两个不同warp的指令
64 kb的ram,可配置为共享存储器和l1缓存
第二代并行线程执行isa
统一寻址空间,提供完整的c++支持
优化opencl和directcompute
完整的ieee 754-2008 32-bit和64-bit精度支持
完整的32-bit整数路径,以及64-bit扩展
内存存取指令支持向64-bit寻址的转换
通过predication提升性能
改进的内存子系统
nvidia parallel datacachetm层次,拥有可配置的l1和统一的l2缓存
首款提供ecc内存支持的gpu
显著改善原子内存操作性能
nvidia gigathreadtm engine
相比早先产品10倍以上的应用程序上下文切换
同步执行多核心程序
线程块乱序执行
双重叠式内存传输引擎
人类目前只赢了40场比赛,OpenAI Five的胜率高达99%!
极米Z6无屏电视评测 横扫3000元以下投影设备
LDMOS和VDMOS
燃烧箱灼热丝、针焰、漏电起痕、水平垂直四大阻燃箱
基于3D ToF传感器的DMS,增强头部和视线追踪的可靠性
NVIDIA GPU计算的关键技术解析
WiFi驱动移植过程命令交叉编译
lm311引脚及功能
Allegro电机驱动器芯片出货量迎来突破
京雄城际铁路今天正式全线开通:时速 350 公里,全程 50 分钟
触摸屏的机械性能测试以及弹片微针模组的应用
华为助力瑞士运营商Sunrise推出了瑞士首批5G智能终端
电源管理芯片供应商价格合理因素
英特尔如何助力京东进行智能零售的创新
小动物下肢运动机能实验系统
浅谈英国ARM公司的IP授权模式
骨传导蓝牙耳机哪款性价比高、骨传导蓝牙耳机排行榜
工业互联网系列访谈 | 中国移动肖青:主动标识载体赋能万物互联,引领工业数字化转型
智慧地下停车场车位占用监测模块钡铼BL200
DIC Forum 2020中国(上海)国际显示产业高峰论坛在上海隆重举行!