Questions tagged «gpu»

2
改变国家的代价是什么?
程序员应该对某些操作的成本有一个很好的了解:例如,CPU上指令的成本,L1,L2或L3高速缓存未命中的成本,LHS的成本。 当涉及到图形时,我意识到我几乎不知道它们是什么。我要记住,如果我们按成本订购它们,状态更改将类似于: 着色器均匀变化。 活动顶点缓冲区更改。 活动纹理单位更改。 活动着色器程序更改。 活动帧缓冲区更改。 但这是一个很粗略的经验法则,甚至可能不正确,我不知道数量级是多少。如果我们尝试放置单位,ns,时钟周期或指令数量,那么我们在谈论多少?

3
当游戏可以直接绘制像素时,为什么我们拥有诸如OpenGL和DirectX之类的图形框架?
游戏和其他图形密集型应用程序使用诸如OpenGL和DirectX之类的框架。此外,它们还需要像素着色器和DX12等功能。 但是,当我们可以逐像素绘制所有内容时,为什么需要所有这些框架和GPU功能? 首先,游戏必须以某种方式进行编译,以便逐像素绘制游戏。这可能会使游戏的可执行文件更大,但是会更快并且可以在任何32位彩色GPU(甚至旧的)上运行吗? 我知道最初的3D游戏是逐像素绘制的,但是为什么现在不这样做呢?

1
为什么GPU仍具有光栅器?
尽管有进步,现代GPU仍具有固定的光栅化器。高度可定制的,带有可编程的着色器,但是仍然不是完全可编程的。 这是为什么? 为什么GPU不能简单地是具有通用计算单元的大规模并行设备,而光栅化器只是用户提供的用于该设备的软件? 具有固定功能的硬件是否在性能上如此有益,以致于这种方法不可行?
14 gpu  rasterizer 

2
现代GPU通常如何实现各向异性过滤?
各向异性过滤 “保留了通常由MIP贴图的纹理避免锯齿所损失的纹理的清晰度”。Wikipedia文章提供了有关如何实现的提示(“在各向异性的任何方向上探测纹理(...)”),但对我而言,它并不十分清楚。 正如演示文稿“ 基于物理的渲染的近似模型 ” 注释中所说明的测试所建议的那样,似乎有多种实现方式: 当使用各向异性过滤时,(现代)GPU进行哪些计算以选择正确的MIP级别?

1
查找纹理是否仍用于任何用途?
我知道不久前(5-10年?),将数据烘焙到纹理中然后从纹理中读取数据是很流行的/有效的方法,通常使用内置的纹理插值来获得烘焙的线性插值输出数据。 现在,与纹理查找时间相比,计算时间更便宜,因此,即使不是全部消失,这种做法也肯定会减少。 我的问题是,烘烤出的纹理是否仍用于任何用途?在现代体系结构中,有人对他们有用例吗?他们似乎有可能再次回来吗?(例如,如果内存技术或基本GPU架构发生了变化)
14 texture  gpu  hardware 

1
为什么在GPU编程中需要工作效率?
我一直在阅读以下有关如何在CUDA中进行并行扫描的文章: https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch39.html 在这篇文章中,重点是使扫描“高效工作”。换句话说,GPU算法执行的加法运算应不超过CPU算法O(n)。作者提出了两种算法,一种是“天真的”算法,可以进行O(nlogn)加法运算,另一种则认为“工作效率高”。但是,高效工作的算法执行的循环迭代次数是原来的两倍。 据我了解,GPU只是巨型SIMD处理器,应该同步运行。在“高效工作”算法中执行两倍的循环似乎意味着从长远来看,许多线程将处于空闲状态并降低性能。我想念什么?

1
为什么相邻的三角形在栅格化时永远不会重叠?
对于以下菜鸟问题表示歉意,只是我在任何地方都找不到令人满意的答案... 当我绘制一个由两个三角形组成的简单的与轴对齐的四边形时,我不明白为什么在这些三角形相交的对角线边缘上从来没有可见的伪像。其中一些像素必须同时位于两个三角形中,对吗?因此,如果我的碎片着色器总是发出部分透明的颜色(比如说50%黑色),那么在生成的四边形中是否应该没有可见的深色对角线? 显然,这不是必须解决的实际问题,这很好,我只是不明白为什么不是这样。是什么使它始终有效?
11 opengl  gpu  rasterizer 


1
现代硬件在保持实时性的同时,一个场景中可以到达多少个多边形,以及如何到达那里?
在某些方面,这是一个相当基本的问题,但很多人(包括我自己)并不真正知道答案。GPU制造商通常会引用非常高的数字,各种游戏引擎声称支持的多边形数量之间的差异通常跨越多个数量级,然后仍然严重依赖于许多变量。 我知道这是一个广泛的,几乎是开放性的问题,对此我深表歉意,我只是认为这仍然是一个有价值的问题。
11 gpu  optimisation 

1
为什么AMD在GPU板上放置SSD会大大减少延迟?
AMD最近发布了一个有趣的Radeon Pro主板,上面装有几个M2 SSD。 正如一些更详细的故事(例如,此处或此处)所指出的那样,好处可能主要不是来自高带宽(M2仅在4个PCIe通道上,因此板子自己的16通道连接器应该有更多),但是低延迟。 这个故事包括声称“这将使内存访问延迟降低10倍”。 我的问题基本上是:为什么GPU板上连接PCIe的SSD的延迟要比访问系统PCIe总线上的主系统RAM或存储设备的GPU的延迟显着减少?“阻碍”的主系统有什么用,意味着板载SSD可以以更快的速度访问?

2
在现代GPU上组织顶点数据的最高效方式
说我有顶点组成的模型,每一个position,normal,tangent,和texcoord属性,其中三角形由指数三元规定。 如果我们只关注顶点属性,那么我知道两种广泛的策略:数组的结构和结构的数组。我还听说结构数组是首选的,因为它会增加给定顶点的属性的内存局部性(并因此增加高速缓存局部性)。 确实可以提高性能吗?我能想到的主要方式是通过顶点索引,该索引要求光栅化器获取早已从缓存中逐出的顶点数据。如果像这样的顶点数据访问是随机的,那么将顶点的所有属性都保留在同一缓存行上肯定会使事情变得更快,但这不是可以通过优化三角形规格的顺序来最大程度缓解的问题吗? 此外,据我了解,现代GPU在解压缩相同类型的长矢量上可能比许多类型的结构的矢量更好。如果优化了索引顺序,那么数组结构布局是否可以始终胜过相同顶点数据的结构数组布局?

1
在GPU上创建共享的顶点法线
我已经成功地将Marching Cubes的实现从CPU移植到了OpenGL计算着色器中,但是我还没有解决法线问题,并且想知道最好的解决方法。 我的实现专门处理二进制值字段(我正在尝试为尚没有距离估计器的3D分形函数建模),因此渐变和前向差分方法将不起作用。我有共享的顶点在工作,并且我的CPU实现使用此处描述的Quilez方法将面法线累积到每个相邻顶点上。 我可以将该实现移植到另一个着色器上,但是我看到的问题是需要大量的原子。由于我们只能在标量整数类型上使用原子,并且我无法想到一种以可加方式将3个有符号的int打包为1的方法,这意味着每个着色器调用3个轴* 3个顶点= 9个原子加法。它们当然会散布在整个内存中,所以这不像是击中单个原子计数器9次,但它看起来仍然像是个地狱。 另一种选择是针对每个多边形运行一个着色器调用,并构建人脸法线列表(我可能会以此方式打包到x10y10z10),然后每个顶点的着色器来累积所有相邻人脸的法线。但是,这将是一个巨大的内存消耗,面部索引的存储空间每个顶点需要12 int才能处理最坏的情况。还有一个问题,如何在不再次使用原子的情况下写入该存储,以计算出已将多少张面写入特定顶点。 任何人对此有更好的主意吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.