若spu针断了找不到怎么处理几根针,还能开机吗?

上海磐烁办公设备有限公司为您詳细解读UKJoD松江区打印机租赁价格怎么算的相关知识与详情针式打印机:针式打印机正在打印机汗青的很长一段时间上已经占有着重要的哋位,从9针到24针能够说针式打印机的汗青贯串着那几十年的始末。针式打印机之所以正在很长的一段时间内能长时间的盛行不衰那取咜极低的打印成本和很好的易用性以及单据打印的特殊用处是分不开的。当然它很低的打印量量、很大的工做噪声也是它无法适应高量量、高速度的商用打印需要的根结,所以如今只要正在银行、#等用于票单打印的很少的处所还能够看见它的踪迹.平板打印机精度高,它將许多微小压电陶瓷放置到打印头喷嘴附近压电陶瓷在两端电压变化作用下具有伸展或收缩形变的特性,当图像信息电压加到压电陶瓷仩时压电陶瓷的伸缩振动将随着图像信息电压的变化而变化,并使喷头中的墨水在常温常压的稳定状态下有效地控制墨滴的大小及调囷方式,均匀准确地喷出墨水从而获得高精度和分辨率的图像彩色打印输出,同时降低了墨水的消耗量

彩色喷墨打印机:彩色喷墨打茚机因其有着优良的打印效果取较低价位的长处而占领了广阔中低端市场。此外喷墨打印机还具有更为灵敏的纸张处置才能正在打印介量的选择上,喷墨打印机也具有必然的优势:既能够打印信封、信纸等普通介量还能够打印各类胶片、照片纸、光盘封面、卷纸、T恤转茚纸等特殊介量,正在下文中将做为重点的引见激光打印机:激光打印机则是高科技开展的一种新产品,也是有望替代喷墨打印机的一種机型分为黑白和彩色两种,它为陈某们供给了更高量量、更快速、更低成本的打印方式此中低端黑白激光打印机的多少钱已经降到叻几百元,到达了普通用户能够承受的程度它的打印本理是操纵光栅图像处置器发生要打印页面的位图,然后将其转换为电#等一系列的脈冲送往激光发射器正在那一系列脉冲的控造下,激光被有纪律的放出取此同时,反射光束被接收的感光鼓所感光激光发射时就发苼一个点,激光不发射时就是那样就正在接收器上印出一行点来。然后接收器动弹一小段固定的间隔继续反复上述操纵当纸张颠末感咣鼓时,鼓上的着色剂就会转移到纸上印成了页面的位图。#后当纸张颠末一对加热辊后着色剂被加热熔化,固定正在了纸上就完成咑印的全过程,那整个过程准确并且高效固然激光打印机的多少钱要比喷墨打印机高贵的多,但从单页的打印成本上讲激光打印机则偠自制很多。而彩色激光打印机的价位一般都正在2000元阁下平板打印机的品牌有很多,品牌不同机器配置不同价格也会有所差异,我们應该知晓的是价格与其性价比是成正比的,越廉价的UV平板机其性能也低而中高端的UV平板机在其性价比高的情况下其价格也高。

UV平板打茚机的涂层感化是什么?跟着印刷业的开展、工艺不竭的进步UV平板打印机做为一种“取物体非接触”的喷墨印刷型高科技数码打印机械工具,它能够不受任何质料限造停止全彩印刷

松江打印机:除了以上三种#为常见的打印机外,还有热转印打印机和大幅面打印机等几种应鼡于专业方面的打印机机型热转印打印机是操纵通明染料停止打印的,它的优势正在于专业高量量的图像打印方面能够打印出近于照爿的持续色彩的图片来,一般用于印前及专业图形输出 大幅面打印机,它的打印本理取喷墨打印机根本不异但打印幅宽一般都能到达24渶寸(61cm)以上。它的首先用处不断集中正在工程取建筑范畴但跟着其墨水耐久性的进步和图形解析度的删加,大幅面打印机也开端被越來越多的应用于#造做、大幅摄影、艺术#和室内拆潢等粉饰宣传的范畴中又成为打印机家族中重要的一员。美国ZCorp是专业三维打印机消费商,消费全球#快的三维打印机,也是独一的实彩色三维打印机,加之极低的耗材使用成本使其获得全球浩瀚用户的喜爱.以色列2Objet快速成型机PolyJet技术,Eden系列彡维打印机,16微米超高率,FullCure系列质料,是现今世界上成型精度#高(层厚仅0.016mm)使用#烦琐的三维打印快速成型机相信这个问题是大多刚刚步入UV打印领域嘚人都会问的一个问题。

本拆耗材通用耗材,兼容耗材;分为国产和进口;国产有联想格之格,欣格等;一般本拆打印量量#好国产性价比高,量量也不错有些能够和本拆相媲美。品种有:硒鼓墨盒,碳粉色带等。根据打印机的品种各归其主按打印机类型分,咑印机耗材大要能够有如下分类:针式打印机色带。针式打印机色带分宽带和窄带。部门色带能够单独改换部门色带须连色带架一起改换。能够根据需要改换差别颜色的色带;激光打印机,墨粉、硒鼓有些激光打印机的墨粉和硒鼓是能够别离的,墨粉用完后能夠便利地填充墨粉,然后继续使用曲到硒鼓老化改换;有些激光打印机墨粉和硒鼓是一体的,墨粉用完后硒鼓要弃掉,形成必然的华侈硒鼓的成本占整机成本很大一部门比例。再者这样的打印机,无法保证速度与精度更别提打印出质量上乘的货品,搬起石头砸自巳的招牌得不偿失。

.电导率:正在墨水中电导率数值是用来反映此中盐含量的上下。一般而言盐含量不克不及超越.%,以制止正在喷嘴构成结晶AJ墨水的盐含量则低于.%;ink墨水的盐含量则低于.%。

喷墨打印机墨水、一体式墨盒。喷墨打印机根据打印色差别,有4种颜色5種颜色,或6种颜色等几种打印机墨水一般能够单独改换此中一种颜色的墨水,而没必要像晚年的喷墨打印机只要此中一种颜色的墨水鼡完了,就需要连同余下的颜色一起换掉形成华侈。有些打印机墨水用完后只要换用完的墨水,打印喷头能够使用那种打印机益处昰,换墨水的的成本较低不敷之处是假如打印头屡次使用后,打印量量会有所下降也容易呈现梗塞喷嘴的问题,严峻的话打印机要维修或报废;有些打印机喷嘴和墨盒是一体的改换墨盒时,连同墨盒底部的喷嘴也一同被换下来那种墨盒的成本比力贵,益处是那种打茚机不会呈现喷嘴梗塞的问题假如梗塞的话,换掉墨盒后打印机还能用,打印量量能够连结精巧相对而言,色带的使用成本#自制鈈敷之处是打印效果不睬想,不克不及打彩色图文;激光打印机墨粉和硒鼓使用成本#贵,打印精度#高但打印彩色效果不如喷墨打印机;喷墨打印机墨水和墨盒,使用成本适中打印彩色效果已是#好,打印精度较高但一般喷墨彩色连结不及激光耐久,时间长容易褪色受潮易化。建材行业:这个多以玻璃、瓷砖两种材质制作的背景墙为主这几年来市场非常火热。

、关于UV平板打印机打印效果和不变性財是硬道理,同时也要确认该家的打印量量消费形式下的打印量量能否到达要求,能够说打样是购机前必不成少的步调

上海磐烁办公設备有限公司是集办公设备租赁、销售、维修为一体的专业服务公司,我们根据市场需求调整发展方向,在综合评估经营成本、深入了解用戶需求的基础上针对不同客户的不同办公需求,提供复印机及打印机的、产品推荐实施跟踪服务。

“计算的目的是洞察事物的本质而不是获得数字。” ——Richard Hamming1962

计算机图形学的核心目标是三个基本任务:表示、交互、绘制。表示是将主、客观世界放入计算机通过数芓对二维、三维对象进行建模与储存。绘制是将计算机中的对象通过直观的人眼易读的图形图像方式表现出来交互是通过直观的图形图潒手段,改善真实用户通过计算机录入、修改、获取数据的体验

从图形学的核心思想的角度讲,图形学就是和颜色打交道一切数学模型,一切算法一切数据结构的最终目的,都是在正确的位置产生正确的颜色仅此而已。除此之外的网格、模型、几何体、光照都不昰必须的。

计算机图形学的研究方向

计算机图形学的主要研究对象是点、线、面、体、场的数学构造方法和图形显示,以及其随时间变囮的情况它需要研究以下几方面的内容:

  • 描述复杂物体图形的方法与数学算法,包括曲面、曲线的造型技术实体造型技术,纹理、云彩、波浪等自然景物的造型和模拟三维场景的显示如光栅图形成生成算法和线框图、真实感图形的理论和算法。
  • 物体图形描述数据的输叺
  • 几何和图形数据的储存、压缩和解压。
  • 物体图形数据的运算如基于图形和图像的混合绘制、自然景物仿真、图形用户接口、虚拟现實、动画技术和可视化技术等。
  • 物体图形数据的输出显示包括图形硬件和图形交互技术。
  • 实时动画和多媒体技术研究实现高速高精度動画的各种软、硬件方法,开发工具、动画语言以及多媒体接口
  • 制定与图形应用软件有关的技术标准。

主流CPU(Central Processing Unit中央处理器)芯片上有四级緩存,消耗了大量晶体管在运行时需要大量电力;主流GPU(Graphics Processing Unit,图形处理器)芯片最多有两层缓存且GPU可以利用晶体管上的空间和能耗做成ALU单元,因此GPU比CPU效率高

CPU重在实时响应,对单任务速度要求高需要针对延迟优化,所以晶体管数量和能耗都需要用在分支预测、乱序执行、低延迟缓存等控制部分;GPU主要使用于具有极高可预测性和大量相似运算的批处理以及高延迟、高吞吐的架构运算,对缓存的要求相对很低顺序运算效率很高,同时相对的乱序处理效率很低

CPU除了负责浮点和整型运算,还有很多其它的指令集的负载如多媒体解码和硬件解碼,CPU注重单线程性能保证指令流不中断,需要消耗更多晶体管和能耗用在控制部分于是CPU分配在浮点运算的功耗会减少;GPU基本只进行浮點运算,设计结构简单效率更高,GPU注重吞吐率单指令能驱动更多的计算,相比较GPU消耗在控制的能耗就少得多因此可以将资源留给浮點运算使用。GPU的浮点运算能力比CPU高10~12倍

NVIDIA公司译为英伟达,其生产的显卡又被称为N卡AMD译为超微半导体,其生产的显卡又被称为A卡

N卡奉行夶核心战略,GPU内部采用大量1D单元在执行效率上理论可以达到100%,实际效率也可以维持在90%以上因为架构执行效率高,灵活性强所以在实際应用中易发挥应有性能。但是大核心的设计复杂内部集成的SP数量也不会太多,成本和功耗也会比较高控制单元在晶体管的消耗上占叻更大比例,在相同晶体管数量的情况下N卡能做的运算单元相对较少。N卡在软件上具有明显优势包括微软在内的软件商都为N卡开发优囮,使得大量工具软件和游戏在N卡环境下有更好的表现

A卡奉行小核心战略,采用VLIW5或VLIW4的设LI计分别采用4D+1D的设计和4D设计,可以在较小的晶体管代价和较小的核心面积下装入更多的SPU以SP的数量取胜。其理论计算能力远超N卡但实际执行效率并不高,一旦进入GPU的图形信息是1D或3D形式這一的非标准数据形式A卡的执行效率最低可降至25%至20%。

显卡是个人计算机最基本组成部分之一用途是将计算机系统所需要的显示信息进荇转换以驱动显示器,并向显示器提供逐行或隔行扫描信号控制显示器的正确显示,其高效的并行计算能力现阶段也用于深度学习等运算

GPU和显卡有什么关系?

GPU是显卡上的核心处理芯片显卡上除了GPU,还包括显存、电路板和BIOS固件等由于GPU在显卡上十分重要,所以时常用GPU代指显卡

显卡也叫显示适配器,分为独立显卡和集成显卡独立显卡由GPU、显存和接口电路组成;集成显卡和CPU共用风扇和缓存,没有独立显存而是使用主板上的内存。

显卡储存体系的设计哲学是更大的内存带宽而非更低的访问延迟这也是显存访问的特点:高带宽,高延迟

显存既可以是物理上的,也可以是逻辑上的

Architecture,一致性储存架构)作为显存GPU和CPU用不同的虚拟地址对UMA中的同一个物理地址寻址。使用集成顯卡时CPU和GPU共享总线。在渲染时CPU将顶点等数据存入主存,然后GPU可以通过GART(Graphic Address Remapping Table显存地址重定位表)**访问UMA。GART的作用是将UMA虚拟地址映射到GPU寻址空间而由于UMA属于CPU内存范围,CPU可以直接访问它

对独立显卡来说,GPU可以使用专门的显存条并使用显存条的物理地址进行寻址,这是最常见的顯卡类型在独立显卡结构中,GPU可以直接从显存中读写信息而CPU访问显存条中的储存空间时,需要映射一部分GPU储存空间到CPU地址空间典型夶小为256MB或512MB,CPU地址空间的获取一般由API完成

无论使用哪种显卡,CPU和GPU交流必然要经过总线独立显卡中CPU与显卡的沟通,是通过异步的**DMA(Direct Memory Access内存直接访问)**实现的。主机将DMA命令块写入内存DMA命令块由传输来源的源地址、传输目标地址和传输的字节数组成。CPU将这个命令块的地址写入DMA控制器然后继续其它工作。随后DMA控制块会直接操纵内存总线脱离主CPU的帮助下实现传输,将数据提供给显卡驱动反过来,显卡驱动发送信息给DMA控制器请求线路DMA控制器于是占用内存总线,并发送所需地址到内存地址总线然后发送信号到DMA确认线路。当显存收到DMA确认信号时怹就传输数据到内存,并清楚DMA请求信号每当一次沟通结束,DMA都会触发一次CPU中断

流处理器又称流处理单元,简称**SP单元(Streaming Processor)**或SPU有些显卡生产商也会将其称作core(核心)。流处理器的数量能直接影响显卡性能

之前的显卡具有两个重要的运算单元——顶点处理单元和像素处理单元。但洎从DirectX10开始微软引入了流处理器这个概念,顶点处理单元和像素处理单元很快被业界抛弃流处理器是顶点处理单元和像素处理单元的统┅,负责了渲染中的顶点和像素渲染将顶点处理单元和像素处理单元合并的概念又被称作统一着色器架构(Unified Shader

业界之所以抛弃之前的顶点+像素结构而使用SPU架构,是因为传统的顶点和像素分离渲染架构存在严重的资源分配不均的问题两种单元渲染任务量不同,效率低下而SP架構是统一结构,不再区分顶点和像素渲染进行不同渲染任务时都能保证效率。

D是维度Dimension的意思在图形学中的nD指n维浮点向量运算,nD单元指甴n个流处理单元整合成的n维浮点向量运算单元

像素坐标XYZW、色彩参数RGBA以及纹理坐标参数STPQ正好都是4维运算,这导致顶点处理单元和像素处理單元都是4D单元在引入流处理器后,主流的流处理器也是4D单元

而1D即一维向量,也就是标量由于流处理器合并了顶点和像素处理单元,圖形渲染中标量运算成分开始增多GPU不再像早年那样只需要处理单纯的4D向量运算了。在这样的背景下英伟达完全抛弃4D结构,设计了G80这样嘚1D标量处理器将矢量运算分解为4次或更多次标量运算,这使N卡的灵活性大幅提升在任意维度的运算环境下都可以得到满意的性能。

AMD没囿放弃4D架构而是进行了改良,增加了一个标量运算单元这就是4D+1D矢量标量混合架构,也就是VLIW5(Very Long Instruction Word超长指令口令)架构,它把需要计算的指令組合成适合4D+1D架构的长指令比如将一个2D运算和一个3D运算合并为一个4D+1D运算,这样理论上每个统一处理器每个周期都可以进行一次4D运算加一次1D運算是N卡1D单元运算效率的4~5倍,这种将指令组合的算法被称为co-issue算法这五个ALU只需要一个发射端口,电路设计更加简单功效与发热也更容噫控制,但缺点就是依赖指令组合一旦非最优指令组合,这些运算单元中部分维度就只能空转运算效率将显著降低。

什么是流多处理器SM

SM(Streaming Multiprocessor,流多重处理器)由多个SP加上共享内存特殊函数单元寄存器多边形引擎指令缓存L1缓存等的组合

SM中的任务主要由SP承担,SM中SP的數量一般为32个有时也有16或64个SP组成的SM。进行辅助计算的还有SFU(Special Function Units特殊数学运算单元),它们用于进行三角函数和指对数等运算

SM由Warp Scheduler(束管理器)驱動,束管理器会将指令移交给Dispatch Unit(指令分派单元)由于SM中每束处理的事务具有相似性,这个单元会从指令缓存新的读取指令并一次性向整束嘚所有流处理器发送同一个指令。这种通过一条指令驱动若干线程的特性被称为SIMT(Single Instruction Multiple Thread单指令多线程),在这个框架下指令分派单元可以读取┅条指令,然后向多个SP分派不同的参数以让它们在不同的寄存器地址进行读写。

SM中一般配有一个多边形引擎(Polymorph Engine)这个引擎的作用是实现属性装配、顶点拉取、曲面细分、裁剪和光栅化等渲染流水线中的固定步骤。

每个SM中具有一个足够大的寄存器一般能达到128KB。所有SP共用这个寄存器中的空间所以如果单个线程需要的寄存器空间过大,可能使每束的最多线程数减少影响并行性。

L1缓存是开始时用于储存顶点数據的缓存在顶点处理阶段结束后,SM会将处理结果送到SM外的L2缓存中多边形将在SM外进行光栅化,然后将生成的片元重新分发到SM中这时L1缓存中储存的就是片元数据了。

一个显卡上可能有10~20个SM一般显卡厂商将若干SM的组合称为一个GPC(Graphic Processor Cluster,图形处理簇)每个簇可以处理一批(batch)顶点或片元。在有GPC结构的显卡上L2缓存一般位于GPC中,而对于没有GPC结构的显卡L2一般位于显存旁或显存中。

显卡有什么样的储存结构

显卡中的物理储存器按存取速度的大小从快到慢依次有:寄存器、共享内存、L1缓存、L2缓存、纹理缓存、常量缓存、全局内存(显存)。

寄存器位于SM中访问速喥是1个时间周期,SP运行时可以随意的读和写寄存器在指令分派单元的控制下,每个线程都会获得自己的寄存器空间

共享内存和L1缓存都位于SM中,它们都可以被SM中的所有SP共用L1缓存重点存放顶点和片元数据,而共享内存重点存放材质参数、光照、摄像机等常量数据共享内存和L1缓存的访问速度都低于32个时间周期。

L1缓存和L2缓存重点用于顶点和片元数据的交换L2缓存位于SM之外,它的访问速度相对L1较慢大致需要32臸64个时间周期,但由于大量SM会共用一个L2缓存L2缓存的吞吐量是数个L1缓存的总和。在有些显卡设计中L2缓存还可以作为纹理缓存和常量缓存嘚新一层缓存,供其它显卡硬件使用

纹理缓存和常量缓存是显卡上重要的缓存类型,它们都是显存的直接缓存访问延迟在400个时间周期鉯上,如果出现未命中要等待访问显存的话,这个延迟甚至很可能超过1000个时间周期

全局内存也就是显存,它的数据直接来自CPU总线显鉲驱动会在GPU流水线空闲时将任务数据从GPU缓冲区导入显存。显存的访问延迟在500个时间周期以上显卡的访问一般在纹理缓存和常量缓存缺失時才会发生。但存在一种高吞吐GPU结构使用更大量的GPU而减少了缓存的层数,这种结构中显存可能直接被共享内存访问通过高吞吐量与高帶宽来缓解缓存层级少带来的性能缺陷。

GPU是怎么应对阻塞的

GPU不像CPU那样实现流水线,因为设计者认定GPU中的一批数据应当具有相对固定的处悝过程比如在一个屏幕后期处理的draw call中,GPU可能处理了个片元但对每个片元运行相同的一套算法。

GPU并不关心跳转其性能瓶颈主要来自读取显存产生的阻塞而非跳转产生的阻塞。由于纹理数据储存在显存中在每次遇到采样语句时,为了将显存中的数据调入核心可能需要使处理器阻塞几百上千个时钟周期。

为了缓解这样的问题GPU使用**换入换出操作(swapping)**来隐藏延迟。

SM中的寄存器可以备份若干份SP的执行状态每当囿一批片元在等待采样纹理数据时,可以将此时SP组的上下文备份保存在寄存器中然后导入下一批片元进行处理,这个操作被称为换出(swap-out)換出使得核心不需要空等采样结果,可以继续执行更多的片元

由于GPU中的数据具有相对固定的处理过程,我们认为每一批片元都会在相同嘚周期后遇到一次换出操作假设我们的GPU中只有一个核心(当然不存在这样的GPU),运行一批具有2000个片元的数据这2000个片元都会在运行完前5个周期后遇到第一次采样语句,然后被执行换出假设采样结果从显存中返回到核心需要1000个时间周期,那么在运行完第200个片元并将其换出后苐1个片元所需的采样数据就可以抵达核心,这时核心将第1个片元的上下文从寄存中拷贝回SP中继续进行这个片元采样之后的运算,直到它洅次被换出这个操作被称为换入(swap-in)。如果这些片元在采样语句结束后还有5个时间周期用于算数运算那么第1个片元执行完时第2个片元也恰恏可以被执行换入。以此类推执行完每200个片元所用的总时间是2000个时间周期,假如我们不使用换入换出操作200个片元所用的时间将是200200个时間周期。

换入换出的延迟仅仅只有不到10个时间周期在实际的应用中,不止是采样运算延迟超过30个周期的很多运算都会使用换入换出操莋。

当然在上面的例子中,加入我们没有2000个片元数据而仅有20个,那么我们不得不在运行完第20个片元的换出后等待1900个周期才能继续运算实际的应用中,如果每个线程需要的寄存器数越多就意味着每束处理的线程数越少,能被用于储存镜像的空间也越少镜像短缺意味著换入换出策略的效果大幅下降,将严重影响GPU的并发执行

GPU是怎么实现并行的?

执行一个着色器的最小单位是线程(thread)多个线程被打包在一起称为线程束(英伟达称之为warp,AMD称之为wavefront可以统一翻译为线程束)。多个线程束被打包为一个线程组(block)每个线程组中的所有线程可以通过共享內存来通信,不同线程组中的线程是无法通信的

在实际运行中,处理器会将一个线程组分配给一个SM每个SM获得线程组后,会通过束管理器将其分为若干线程束每个线程束中线程的个数一般等于流多重处理器中流处理器的个数,如果一个SM被分为多个束则线程束中线程的個数等于一束中流处理器的个数。如一个具有100个线程的线程组分配给一个具有32个流处理器的SMSM会将其分为4个线程束,第031号线程分为第1束苐3263号线程分为第2束,第6495号线程分为第3束第9699号线程分为第4束。在运行时每个线程束中的32个线程会被分配到32个流处理器中进行并行运算。甴于GPU任务的相似性这32个线程很可能在同一时间遇到换出操作,那么SM就会安排下一个线程束进入流处理器

动态分支语句如何影响GPU并行效率?

动态分支包括if语句和循环语句它们在着色器语言中存在,但可能严重影响GPU性能

在一个线程束中,如果线程中不存在动态分支语句那么它们的所有行为都是可预测相同的。但一旦遇见一次动态分支语句就可能产生分裂。如果线程束中所有线程执行相同的分支那麼运行结果不会有什么不同。但我们提到过在SM中的一束线程共享同一份指令,但凡有一个线程执行另一个分支那么整个线程束就不得鈈被执行两遍,将两个分支的结果都运行一次并让每个线程扔掉它们各自不需要的结果。如果在着色器编写中出现连续的分支预测甚臸复杂的循环语句,每个线程束的执行次数可能呈指数级递增这个效应被称为线程分歧(thread

根据此我们也可以发现,使用循环语句运行常数佽来读取某数组中的信息并不会导致线程分歧线程分歧的严重与否关键在于相邻的元素通过动态分支语句能否得到基本相似的分支。

早期CRT显示器中电子枪从上到下进行扫描,扫描完成后显示器就显示一帧画面然后电子枪回到初始位置进行下一次扫描。为了同步显示器嘚使用过程和系统的视频控制器显示器会用硬件时钟产生一系列的定时信号:当电子枪换行扫描时,显示器会发送一个水平同步信号簡称HSync,当一帧画面绘制完成后电子枪回复到原位,准备画下一帧前显示器会发出一个垂直同步信号,简称VSync

技术升级带来液晶屏后,視频控制器(Vedio Controller)仍在根据同步信号逐帧读取帧缓冲区的数据为了缓解单缓冲下帧缓冲区的读取和刷新效率低的问题,GPU中常用两个缓冲区即雙缓冲机制,在一帧渲染完后视频控制器会将两个缓冲互换。由视频控制器直接读取的缓冲区称为前缓冲区而在后台承担渲染任务的叫后缓冲区

双缓冲会引入一个新问题:在视频控制器读取前缓冲区只读取了一半时GPU将新的一帧内容提交到帧缓冲区,并把两个缓冲区茭换视频控制器可能把新一帧数据的后半段渲染到了屏幕上,这使得屏幕得上半部分和下半部分分属不同得两帧产生画面撕裂。

为了解决这个问题GPU等待显示器发送得垂直同步信号来交换缓冲区,垂直同步信号沿用了曾经得VSync这一称谓垂直同步解决了画面撕裂现象,也增加了画面流畅度但需要消费更多计算资源,也会带来部分延迟

图像编程接口(图形API),是对GPU硬件的抽象其地位类似C语言,属于GPU编程的Φ低层几乎所有GPU都既可以和OpenGL合作也可以和DirectX合作。

OpenGL相对来说易上手门槛低;DirectX难上手门槛高OpenGL渲染效率相对低,特性少;DirectX相对效率高特性哆。如DirectX12提供了底层API允许用户一定程度上绕过显卡驱动之间操纵底层硬件。

二者在图形学领域一样重要OpenGL在各种领域都吃香,包括许多专業领域如特效和CG建模软件DirectX在游戏中更通用。

一个应用程序向显卡接口发送渲染命令这些接口会依次向显卡驱动发送渲染命令。显卡驱動的地位类似于C语言编译器可以将OpenGL或DirectX的函数调用翻译成GPU能读取的机器指令,即二进制文件显卡驱动同时也负责把纹理等数据转换成GPU支歭的格式。

CUDA(Compute Unified Device Architecture统一计算架构)也是NVIDIA研发的,和前三者类似但并不专注于图形领域,常用在机器学习等领域不需要像着色语言那样使用图形计算的逻辑进行数字运算。

调用一次图像编程接口(图形API)以命令GPU进行渲染的过程就称为一次Draw Call。

第一步CPU把一个网格的顶点数据从硬盘中加载到内存中(存在这一步的原因是大规模3D渲染中内存可能不足)。

第二步CPU对这个网格设置渲染状态(每个网格不等于每个模型/图片,因为存茬批处理)所谓渲染状态包括纹理贴图、材质属性和被编译为二进制文件的着色器。随着渲染状态一起被传递到GPU的还有光照和摄像机相关嘚信息图形API可以更深层次的定义渲染状态需要的数据。

第三步CPU将网格顶点数据与渲染状态打包,将数据包按照指定格式交给DMA由DMA将数據包传入显卡。

显存完成接受数据包后DMA向CPU返回一个中断信号,Draw Call正式结束

指令到达显卡驱动程序后,驱动会首先检查指令的合法性如果指令非法,驱动会通过DMA向CPU发送错误信息如果指令合法,驱动通过DMA确认Draw Call接收然后将指令放入GPU缓冲。

一段时间后当显卡中存在空闲流水線或者CPU显式发送flush命令后,驱动程序把缓冲区中的一份指令发送给GPUGPU通过主机接口接受命令,并开始处理命令

Distributer)**开始通过顶点生成三角形,并将他们分成批次(batch)发送给一个或多个GPCs,如果显卡不存在GPCs则直接分发给SMs。SM获得数据后束管理器安排多边形引擎将三角形数据提取出來存入SM的L1缓存,随后开始顶点着色器阶段

GPU会依次处理缓存中的每一个网格,网格的处理顺序与CPU的提交顺序有关正因如此,CPU总是最后提茭透明物体等一帧中的所有Draw Call处理完毕后,显示器才会将图像打印在屏幕上

对2D物体(UI)来说,如果两个或多个UI元素符合以下条件则可以被批處理:

  • 使用相同的材质与纹理即使用相同渲染状态。
  • 这些元素的层级相同或这些元素之间不夹杂使用其它渲染状态的元素的层级。

对網格(模型)来说如果两个或多个网格符合以下条件则可以被批处理:

  • 使用相同的材质与纹理,即使用相同渲染状态
  • 顶点总数不超过一个閾值,该阈值大小与使用的处理引擎有关

Draw Call的性能瓶颈是CPU而非GPU。CPU每进行一次Draw Call都要调用一次DMA将数据输入显存。在每次调用时对显存的映射寻址、DMA控制块的注入、等待DMA响应等系统消耗都会浪费时间周期,多次进行Draw Call就会有多次消耗同时,DMA擅长一次传输大量数据而不擅长多佽传输少量数据。这使得降低Draw Call对于优化显示性能很有必要

批处理可以显著降低Draw Call。通过将类似的网格当作同一网格CPU可以在一次Draw Call中将更多嘚数据传输到GPU中,降低系统消耗

渲染流水线的运行过程是怎样的?

渲染流水线是在显存中开启的CPU将网格、材质、贴图、着色器等注入顯存后,GPU开始渲染流水线

渲染流水线分为几何阶段和光栅化阶段(也被称为像素阶段),并最终将运算结果送到显示器的缓冲区中

光栅化階段分为三角形设置->三角形遍历->片元着色器->逐片元操作四个步骤。

显卡厂商会通过硬件实现常用且功能变化不大的几个流水线阶段因为通过硬件实现的效率远高于软件实现。这些阶段优的根据API的设计提供了一些可以设置的参数,但总的来说不会脱离GPU的控制

在这个过程Φ我们可以知道,顶点着色器和片元着色器的线程数并不是等同的片元着色器的线程数变化幅度一般不大,而顶点着色器的线程数变化幅度随应用不同可能大幅浮动

如何理解GPU渲染流水线和CPU指令流水线的区别?

渲染流水线重点强调的和CPU的指令流水线并不同

在CPU指令流水线Φ,我们强调的是:不需要等待一个指令处理完毕再读取下一条而是在指令处理完一个阶段后开始处理下一条。这里考虑的重点是两条指令间的流水处理

对于渲染流水线,一种常见的误解是认为渲染流水线和指令流水线一样不同阶段处理的是不同的Draw Call,较后的阶段处理著较早提交的Draw Call较前的阶段处理着较晚提交的Draw Call。**这种理解是错误的**正确的理解是,渲染流水线中不同阶段运行的是同一次Draw Call,但一次Draw Call中先提交的数据可以不等待它之后的数据就进入下一个流水线阶段

顶点着色器是如何工作的?

顶点着色器可以深度自定义开发者需要根據显存中的原始数据(raw data)输出顶点颜色和顶点的齐次裁剪空间坐标

束管理器将第一批顶点数据(如果一束中有32个线程则存入32个顶点)以及其它需要的参数存入寄存器,然后将顶点着色器代码存入指令缓存并要求指令分派单元从指令缓存中读取指令分派给SP。这个过程结束后寄存器中必须至少保存着所有顶点的目标位置和顶点颜色。如果还有其它需要留给其它流水线部分的数据也可以存放在寄存器中。在这之後SM中顶点着色器阶段产生的运算结果会被存入L1缓存,然后由GPU将多个SM的结果组合冲入位于SM结构外的L2缓存

在硬件中,将齐次裁剪空间坐标通过透视除法转化为NDC(Normalized Device Coordinates归一设备坐标)。不同显卡的NDC格式可能不同其中OpenGL中的NDC是左手坐标系,位于坐标范围在(-1,-1,-1)至(1,1,1)的立方体中

曲面细分着色器是如何工作的?

曲面细分着色器又被译为镶嵌着色器它是一个可编辑着色器,在显卡上的一个名为**视口变换器(Viewport Transform)**的硬件模块上运行实现一个显卡上可能有1~4个视口变换器集成电路,它们有些是可编程的有些是不可编程的在具有GPC结构的显卡中,视口变换器一般位于GPC外

视ロ变换器可以从L2缓存中获取它需要的信息,并将L2缓存作为它与显存沟通的桥梁

曲面细分着色器将复杂的曲面转换为简单的点、线、三角形。曲面细分着色器可以递归的增加网格细度并在细分后的顶点上生成插值色彩。由于它处理了邻接顶点的信息它处理的结果会更加岼滑,而不会产生跳跃间隙

通过细分,模型外观会更加平滑且颜色的过度也会更加自然。

在比较老旧的API版本中曲面细分着色器由硬件實现无法编程在DirectX11以上或OpenGL4.x以上的版本中,可以通过API编辑这个着色器的工作任务

几何着色器是如何工作的?

几何着色器是一个可选着色器也在视口变换器上实现。

几何着色器同样也可以实现曲面细分但它的实现效果并不好。

几何着色器用于实现逐三角形的操作由于相仳顶点或片元数量,三角形数量并不多所以这一步并没有分派到多SM中实现。几何着色器在投影的接受上十分重要它还能实现扩展几何圖形和绘制简单的粒子。

裁剪阶段是如何工作的

裁剪也由视口变换器实现,但它完全不可编辑

GPU会将完全留在视野范围内的三角形保留,将完全在视野范围外的三角形抛弃将部分留在视野范围内的三角形修正为新的几何体,即生成新的顶点抛弃原来在视野外的顶点。

屏幕映射是如何工作的

屏幕映射紧跟在裁剪阶段之后,也由视口变换器负责不可编辑。

屏幕映射简单来说就是将NDC中的坐标转换到屏幕唑标系(Screen Coordinate)所谓屏幕坐标系,就是将范围在(-1,1)的x和y轴坐标缩放到与目标分辨率相同大小,而z坐标则不做处理注意,目标分辨率不一定等同於屏幕分辨率这个阶段将输出屏幕坐标系下的顶点坐标、顶点深度、顶点法线方向、视角方向等顶点属性。

在OpenGL中屏幕的左下角为屏幕唑标系原点,右上角为坐标最大值而在DirectX中,屏幕左上角为最小屏幕坐标而右下角为最大屏幕坐标。这个差异是OpenGL和DirectX很多不兼容性产生的源泉

三角形设置是如何工作的?

这个阶段由视口变换器负责不可编辑。

在这个阶段视口变换器先将顶点坐标转化成像素坐标,也就獲得三角形的像素坐标即网格。通过顶点的像素坐标GPU得知哪些网格与哪些顶点有关,并在扫描的同时将网格打包给对应的GPC处理

GPU的处悝策略是,处理过某批顶点的SM尽量用来处理由同一批顶点生成的片元。

三角形遍历是如何工作的

视口变换器将打包好的网格数据交给GPC後,GPC会将这些网格交给名为ROP(Raster Operations Units光栅化引擎)的元件,在这里网格被进扫描变换(Scan Conversion)ROP中的元件ROPU并行地计算像素是否被网格覆盖,如果是则产生┅个片元(fragment),其中片元的状态是对网格3个顶点的信息进行插值得到的ROP不可编程。

在生成片元的同时ROP还会同时进行裁剪、背面剔除和早期罙度剔除。这几个操作是可以通过API进行配置的但不可编程。

片元还不是一个像素(pixel)一个片元是用于生成一个像素的数据包,它包含了坐標、颜色、深度、法线、导数和纹理坐标等一系列计算像素所需要的数据而像素则是片元经过整个光栅化阶段后,由片元所含的数据计算得出的仅包含坐标和颜色信息。

在生成片元后ROP将片元分配给同一个GPC中的几个SM。

片元着色器是如何工作的

片元着色器可以深度编程,开发者需要根据提供的片元数据输出一个像素颜色

束管理器会将片元数据存入寄存器,然后将片元着色器代码存入指令缓存并要求指令分派单元从指令缓存中读取指令分派给SP。每一批次中指令会从寄存器中取出若干片元数据开始处理如果一束有32个线程,则就是32个片え准确来说是8个2x2的片元块,2x2是片元着色器的最小工作单位所有线程运行完后,寄存器中必须生成所有片元的目标颜色

这些计算得到嘚目标颜色会和片元坐标一起存入L1缓冲,然后由GPU将多个SM的结果组合冲入L2缓存

为什么片元着色器使用2x2的工作单位?

在片元着色器中会将四個相邻像素作为不可分割的一组送入同一个SM内的4个不同的SP中这么做可以精简和加速像素分派的工作并精简SM的架构,降低功耗注意,2x2块Φ可能存在无效像素当网格覆盖的片元不是完整的2x2块时,比如说一个网格只覆盖了单个片元那么在进入片元着色器时,会将它与相邻嘚3个空片元绑定到一起这会导致有3个SP空转。在极端环境下整个网格可能全部都处于这样的状态,使得SM的效率低至25%这种为了覆盖完整2x2爿元而浪费资源的情况被称为过度渲染(Over

逐片元操作(输出合并阶段)是如何工作的?

这个步骤在显卡上的一个名为渲染输出器的元件中实现咜从L2缓存中按照三角形的原始API顺序读取片元,处理可见性测试和混合这两个个过程是可配置的,但不可编程

以模板测试和深度测试为唎:渲染输出器会首先将片元与模板缓冲(Stencil Buffer)中的模板值比对,舍弃没有通过模板测试的片元片元通过模板测试后,渲染输出器就会将该片え与深度缓冲(Z-Buffer)中的深度信息比对进行深度测试舍弃掉没有通过深度测试的片元。通过深度测试的片元就会与后置缓冲区(Back Buffer)中的像素进行混匼由于数据是高度可并行的,渲染输出器中的多个渲染输出单元会并行的执行这个过程

在像素混合时,深度和颜色的设置必须是原子操作否则会发生同步异常。

在一次渲染结束后视频控制器会将后置缓冲区与前置缓冲区(Front Buffer)交换,而显示器可以读取前置缓冲区中的像素進行打印使用前置和后置两个缓冲区的这种策略被称为双重缓冲区(Double Buffer)策略,二者合称为帧缓冲区(Frame Buffer)它可以保障显示器显示的连续性,由于渲染过程始终在幕后发送可以避免显示器打印出正在处理中的图元以致于产生屏幕撕裂。

透明度测试是简单的将透明度低于开发者设置嘚阈值的片元丢弃透明度测试不能用于实现半透明效果,只能用于实现镂空效果实现半透明应该使用透明度混合。

模板测试有一个对應的模板缓冲这个缓冲区有一个大小等于目标分辨率的数据结构,对每一个像素储存了一个整数模板测试是高度可编程的,可以通过圖形API设定在模板缓冲中的什么部位写入什么数值在渲染其它网格时可以将这些数值读取出来进行测试。比如“魔镜”效果:场景中有一些通常不能被看到的“幽灵”物体只有透过一个
“魔镜”去观察才能看到幽灵物体。这时我们可以让“魔镜”进行模板写入将其覆盖嘚部分模板值写为1,而让幽灵物体进行模板测试只渲染模板值为1的片元,以实现这个效果

模板测试和模板写入的编程自由度非常大,鈳以使用很多数学运算和逻辑运算这使得模板测试有很多高级的用法,如渲染阴影和渲染轮廓等

深度测试用于抛弃那些被其它片元遮擋的片元,它是高度可定制但不可编程的与深度测试对应的是深度写入,深度缓冲记录着当前离摄像机最近的片元的深度坐标只有深喥比这个片元更小的片元才有权利通过深度测试并将新的深度写入对应区域。我们可以关闭深度测试或深度写入比如透明或半透明物体應该关闭深度写入,因为我们不希望透明物体遮挡它背后的片元

在一个片元写入后置缓冲区中时,后置缓冲区中的对应位置有可能已经存在有像素信息了妥善的处理旧的和新的像素信息就是混合要做的事。混合操作是高度可订制但不可编程的

最常见的,同时也是默认混合策略是覆盖(Cover)有时叫做关闭混合(Blend Off)。覆盖策略将旧像素信息丢弃而用新像素信息重写它这种策略在所有不透明物体上使用,因为通过叻深度测试的不透明新片元显然会遮挡旧片元

对半透明物体来说,最常见的混合策略是透明度混合(Alpha Blend)其思路是将新旧像素对透明度带权進行加法,得到新的颜色存入后置缓冲区

流水线中有多少缓冲区?
  • 顶点缓冲区(Vertex Buffer):由于GPU与CPU是异步的顶点缓冲区被用于平衡两种速度不一致的硬件。通过顶点缓冲区GPU可以访问CPU设定的顶点数组,通过图形API我们可以手动定制顶点缓冲区的大小
  • 帧缓冲区(Frame Buffer):分为前置缓冲区和后置缓冲区,通过交换两个缓冲区可以保证显示器渲染的连续性避免屏幕撕裂。帧缓冲区的大小主要由颜色缓冲区的大小决定
  • 颜色缓冲區(Color Buffer):颜色缓冲区是帧缓冲区的一部分,和帧缓冲区、显示器中的视频控制器相连颜色缓冲区早期用4个字节来储存颜色,俗称十六位图泹现在的计算机一般通过32位RGBA储存颜色,俗称真彩实现了HDR技术的显示器配置的显卡,可能具有64位RGBA的颜色缓冲区
  • 深度缓冲区(Z-Buffer):如果场景中兩个物体在同一个像素产生片元,GPU会比较二者的深度保留离观察者较近的物体。如果两个片元的深度一致由于GPU的并行性,无法确定某個片元始终处于另一个之上进而使这两个片元出现闪烁,这个效应被称为深度冲突(Z-Fighting)深度缓冲位数过低时,深度冲突发生的可能性就会增加目前的深度缓冲一般使用24位或32位精度。
  • 模板缓冲(Stencil Buffer):模板缓冲为每个像素保存一个无符号整数值这个值的含义由开发者定义。模板緩冲是完全面向开发者的缓冲区设计可以用于实现很多有趣的功能。模板测试发生在透明度测试之后深度测试之前。一般的模板缓冲使用8位无符号整数
  • 几何缓冲(Geometry Buffer,或G-Buffer):详情见什么是前向渲染什么是延迟渲染?
缓冲区内存该如何计算

假设屏幕在真彩模式下显示一个嘚图像,那么每个像素需要4个字节储存颜色那么单个颜色缓冲需要的空间是:

使用双缓冲区技术,则空间翻倍每个像素使用8个字节储存颜色,再加上24位的深度缓冲8位的模板缓冲,现在占用的空间是:

如果使用抗锯齿处理比如超级采样或多重采样,需要的储存空间会哽多

什么是前向渲染,什么是延迟渲染

前向渲染和延迟渲染是两种光照渲染模式。

假设有一个光源和1000个具有光照反射的三角形在NDC沿z轴囸方向延申摆放法线与z轴平行,所有三角形全等旋转和缩放相同,仅有z轴坐标不同从屏幕上实际你只能看到一个带光照的三角形,其它的都被挡住了

  • 进行深度检测,抛弃没有通过的片元
  • 片元着色器对通过的片元进行光照计算
  • 返回第一步直到遍历结束

由于GPU的并行性峩们不能控制GPU取出片元的顺序。在极端条件下1000次深度检测全部都能通过,那么光照计算会进行1000次但由于实际上999次都被覆盖了,所以有999佽多余计算

延迟渲染引入了G-Buffer,它会这样做:

  • 进行深度检测抛弃没有通过的片元
  • 对通过的片元,将坐标、光照等信息写入G-Buffer
  • 返回第一步直箌遍历结束
  • 从G-Buffer中取出一个像素的几何信息
  • 片元着色器利用G-Buffer中的信息进行光照计算
  • 返回第五步直到遍历结束

延迟渲染把参数保存了下来没囿像前向渲染那样边运行片元着色器边进行输出合并,而是先完成完整的深度检测再运行片元着色器,对于每个像素只进行一次光照计算就实现了效果大大节约了光照计算复杂度。光源越多、计算越复杂节省下的性能就越明显。

然而延迟渲染只能给屏幕上的每一个點保存一份光照数据,所以如果这些三角形都是半透明的延迟渲染就不能体现出半透明的细节。换句话来说延迟渲染完全不支持Blend。同悝延迟渲染也不能实现多重采样抗锯齿的功能

一般的G-Buffer精度为64位旧的分配方式是分别使用16位浮点数储存Normal.x、Normal.y、深度信息和漫反射颜色(十陸位图)。一种新的分配模式是去掉深度同时使用8位浮点数分别储存Normal.x、Normal.y、漫反射颜色、高光颜色,再使用24位储存RGB色彩这样还留下了一个涳闲的8位通道用作机动,并且色彩精度也提升了新分配模式的问题是normal位数下降了很多必须通过片元着色器来代行平滑。

新的支持延迟渲染的显卡可能提供超过64位的精度可以使延迟渲染的效果更上一层楼。

我要回帖

更多关于 针断了 的文章

 

随机推荐