初识CUDAGPU和CPU的通讯

简介: 初识CUDAGPU和CPU的通讯

1.把数据加载到显存中
所有渲染需要的数据都需要从硬盘(Hard Disk Drive,HDD)中加载到系统内存(Random Access Memory ,RAM)中。然后,网格和纹理等数据有被加载到显卡上的存储空间——显存(VRAM)中。这就是因为,显卡对于显存的访问速度更快,而且大多数显卡对于RAM没有直接的访问权利。
渲染所需的数据(两张纹理以及3个网格)从硬盘最终加载到显存中。在渲染时,GPU可以快速访问这些数据
需要注意的是,真实渲染中需要加载到显存中的数据往往比上图所显示的情况要复杂许多。例如,顶点的位置信息、法线方向、顶点颜色、纹理坐标等。
当把数据加载到显存中后,RAM中的数据就可以移除了。但对于一些数据来说,CPU仍然需要访问它们(例如,我对这类数据开了读写),那么我们可以能不希望这些数据被移除,因为从硬盘加载到内存的过程是十分耗时的。
在这之后开发者还需要通过CPU来设置渲染状态,从而“指导”GPU如果进行渲染工作。

2.设置渲染状态
什么是渲染状态呢?一个通俗易懂的解释就是,这些状态定义了场景中的网格是怎么被渲染的。例如,使用哪个顶点着色器(Vertex Shader)、片元着色器(Fragment Shader)、光源属性和材质等。如果我们没有更改渲染状态,那么所有的网格都将使用同一种渲染状态。下图显示了当使用同一种渲染状态时,渲染3个不同网格的结果。
在同一状态下渲染3个网格。由于没有更改渲染状态,因此3个网格的外观看起来是同一种材质的物体
在准备好上述所有工作后,CPU就需要调用一个渲染命令来告诉GPU:“嘿!老兄,我都帮你把数据准备好啦,你可以按照我的设置来开始渲染啦!” 而这个命令就是Draw Call。

3.调用Draw Call
相信接触过渲染优化的读者应该都听过 Draw Call。实际上,Draw Call就是一跳命令,它的发起方是CPU,接收方是GPU。这个命令仅仅会指向一个需要被渲染的图元(primitives)列表,而不会在包含任何材质信息——这是因为我们已经在上一个阶段完成了这个过程。
当给定了一个Draw Call时,GPU就会根据渲染状态(例如材质、纹理、着色器等)和所有输入的顶点数据来进行计算,最终输出在屏幕上显示的那些漂亮的像素。而这个计算的过程就是GPU流水线。
CPU通过调用 Draw Call 来告诉 GPU开始进行一个渲染流程。一个Draw Call 会指向本次调用需要渲染的图元列表

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
5月前
|
消息中间件 存储 程序员
进程间的通信
进程间的通信
48 1
|
5月前
|
消息中间件 存储 Linux
【操作系统】进程的控制和通信
【操作系统】进程的控制和通信
255 0
|
5月前
|
消息中间件
进程间的通信方式有哪些
进程间的通信方式有哪些
|
12月前
|
消息中间件 Unix Linux
嵌入式 Linux进程之间的通信
嵌入式 Linux进程之间的通信
|
12月前
|
Linux
嵌入式 Linux进程间的通信--信号
嵌入式 Linux进程间的通信--信号
详解CAN总线:CAN总线通信优先级机制
在详解CAN总线:CAN总线报文格式—数据帧文章中,讲解到仲裁段。仲裁段用于写明需要发送到目的CAN节点的地址、确定发送的帧类型(当前发送的是数据帧还是遥控帧),并确定发送的帧格式是标准帧还是扩展帧。 本篇文章将讲解仲裁段的另一个重要功能:通信优先级。
|
消息中间件 缓存 网络协议
进程间的通讯方式(三)
进程间的通讯方式
106 0
|
缓存 关系型数据库 MySQL
进程间的通讯方式(一)
进程间的通讯方式
75 0
|
消息中间件 存储 大数据
进程间的通讯方式(二)
进程间的通讯方式
103 0
|
存储 芯片 块存储
3.5主存储器与CPU的连接
3.5主存储器与CPU的连接
424 1
3.5主存储器与CPU的连接