现代 GPU 上制服的分支成本

2024-01-02

在现代 (GL3.3+) GPU 上使用 GLSL 时,在统一上进行分支的可能成本是多少?

在我的引擎中,我已经达到了拥有大量着色器的程度。我为其中的很多预设了几种不同的质量预设。就目前情况而言,我在着色器中使用带有 if() 的制服来选择不同的质量预设。然而,我担心通过重新编译着色器并使用#ifdef 可能会获得更好的性能。问题是当我重新编译着色器时需要担心跟踪和重置其他制服。

基本上我想知道的是我的恐惧是否没有根据。在现代 GPU 上统一分支是否便宜?我自己做了一些测试,发现两者的差别很小,但我只在 nVidia 680 上进行了测试。


我承认我不是专家,但也许我的猜测总比没有好。

我认为购买制服确实相当便宜。它显然与纹理或属性数据上的分支有很大不同,因为 SIMD 中的所有 ALU 将遵循来自着色器的相同代码路径,因此它是“真正的”分支而不是执行掩码。我不太确定着色器处理器如何遭受管道中的分支气泡的影响,但管道肯定比通用 CPU 更浅(特别是考虑到它们通常运行的时钟速度要低得多)。

我希望我能提供更多帮助,如果其他人能够更权威地回答,我也将不胜感激。然而,就我而言,我不会太担心制服的问题。但与往常一样,如果有可能,请分析您的着色器并看看它是否会产生任何明显的差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

现代 GPU 上制服的分支成本 的相关文章

  • 更改 GLUT 调用以与 MFC/C++ 一起使用

    我有一个使用 GLUT 进行 OpenGL 渲染的程序 现在我需要它位于 MFC 项目内部 以便它可以与另一个程序组件一起使用 我已经按照这个教程进行操作 http www codeguru com cpp g m opengl openf
  • GLSL - 测试片段值

    假设你有一个vec3 colourIn从一个vertex shader to a frag shader 有没有办法测试一个值并根据需要覆盖它 例如 将任何蓝色值大于0 5的片段设置为白色 In my Shader frag我实施了这个测试
  • OpenGL,如何独立旋转对象?

    到目前为止我的代码 void display void glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT Clear Screen And Depth Buffer glLoadIdentity
  • 纹理的内部格式

    看下面的OpenGL函数 void glTexImage2D GLenum target GLint level GLint internalFormat GLsizei width GLsizei height GLint border
  • wglCreateContextAttribsARB 函数崩溃

    我尝试写下代码 我有InitializeOGL 的代码 bool Ogl InitializeOGL bool vSync cout lt lt Init OpenGL lt
  • 纹理映射 C++ OpenGL

    我已经阅读了相关内容 包括 Nehe 和此处的解决方案 但我找不到具体的答案 我正在尝试加载一张名为stars jpg 的照片 我想通过使用 uv 坐标映射它来使其成为场景的背景 方法是 glBegin GL QUADS glTexCoor
  • glm 中矩阵值的顺序不正确?

    我开始使用GLM http glm g truc net通过 OpenGL 3 和 GLSL 进行数学运算的库 我需要正交投影来绘制 2D 图形 所以我编写了这个简单的代码 glm mat4 projection 1 0 projectio
  • 如何计算正切和副法线?

    谈谈OpenGL着色语言 GLSL 中的凹凸贴图 镜面高光之类的东西 I have 顶点数组 例如 0 2 0 5 0 1 0 2 0 4 0 5 法线数组 例如 0 0 0 0 1 0 0 0 1 0 0 0 世界空间中点光源的位置 例如
  • glDeleteTextures在Windows上似乎没有释放纹理内存,有没有解决办法?

    我的 openGL 应用程序内存不足 遇到一些问题 我正在尝试找出我的问题 为此 我创建了一个小型测试程序 它基本上只是从调用 glDeleteTextures 的文件中加载一个巨大的纹理 然后再次加载它 如果我在 OSX 上运行这个测试程
  • 渲染缓冲区大于窗口大小 - OpenGL

    我正在尝试绘制大于屏幕尺寸 即 320x480 的渲染缓冲区 512x512 执行 glReadPixels 后 图像看起来是正确的 除非图像的尺寸超过了屏幕尺寸 在本例中 超过了水平 320 和垂直 480 是什么原因导致这种异常现象呢
  • 按像素值偏移 gl_Position 或 gl_Vertex

    我的属性包含像素值 我想用这个属性值来偏移我的 gl vertex 问题是我的 gl vertex 以世界单位为单位 而 offset attribute 以像素为单位 如果我将屏幕尺寸作为统一发送 然后将像素转换为 1 到 1 值 并将其
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 如何在多采样纹理上渲染帧缓冲区对象?

    我目前有一个使用多个通道的渲染引擎 其中图像的各个部分在纹理上渲染 然后使用着色器进行组合 它有效 现在我想激活多重采样 我在这里读到 http www opengl org wiki Framebuffer Object Examples
  • 我可以在 WebGL 的 GLSL 中使用什么作为数组索引?

    是否只允许使用常量 或者我可以将其用于循环索引或任何其他动态值 In WebGL GLES2 是的 只允许使用常量 但是 如果您的代码可以展开 无论是由您自己还是由编译器 那么它就被视为一个常量 并且您有一个解决方法 例如 问题 unifo
  • Qt 5.5 QOpenGLWidget 链接错误未链接任何 openGL 调用

    我尝试使用 Qt 5 5 1 构建一个简单的 OpenGL 应用程序 一切都很好 直到我尝试使用 glClearColor 等 openGL 本机函数调用 该小部件实际上编译并产生黑屏 但在我尝试使用任何 openGL 本机函数后 它甚至不
  • WGL:没有双缓冲 + 多重采样 = 失败?

    我通常使用创建像素格式wglChoosePixelFormatARB 与这些论点 除其他外 WGL DOUBLE BUFFER ARB GL TRUE WGL SAMPLE BUFFERS ARB GL TRUE WGL SAMPLES A
  • 带有 std::vector 的 VBO

    我用 C 和 OpenGL 编写了一个模型加载器 我用过std vectors 来存储我的顶点数据 但现在我想将其传递给glBufferData 但是数据类型却截然不同 我想知道是否有办法可以相互转换std vector至已记录的const
  • 使用 gl_FragColor 与 vec4 颜色?

    似乎有很多不明确的地方gl FragColor被弃用 例如 它缺失在GLSL 4 40 规范 https www khronos org registry OpenGL specs gl GLSLangSpec 4 40 pdf 但它包含在
  • OpenGL纹理渲染与原始不匹配

    我正在尝试使用 OpenGL 渲染纹理 我用作测试的纹理是白色背景上的一堆黑色矩形 如下所示 然而 在渲染时 纹理似乎被复制并叠加在其自身之上多次 我使用以下方法设置场景 std string vertexSource ShaderLoad

随机推荐

  • Windows Media Player COM 自动化可以在 VBS 中运行,但不能在 Python 中运行

    我尝试使用 Windows Media Player 通过 COM 播放音频文件 下面的代码在VBS中运行良好 Set wmp CreateObject WMPlayer OCX wmp settings autoStart True wm
  • 使用 STG 调用约定将 `foreign import prim` 与 C 函数一起使用

    我有一个简单的 C 例程 它接受四个字并返回四个字 gcc 可以对其进行优化并发出一些 GHC 不支持的 primops 我正在尝试对调用此过程的各种方法进行基准测试 但在尝试适应该技术时遇到了困难此处描述 http breaks for
  • 使用单一表单创建多个记录(非嵌套属性)

    在我的应用程序中 我有一个具有内容和作者属性的思想模型 我想用新的形式同时创造出多种想法 但这不是嵌套表单的情况 因为我没有使用任何关联的模型 请提出一些解决方案 提前致谢 您可以尝试使用以下解决方案 在您的查看文件中 Content Au
  • MVC 4 - 如何有条件地禁用此按钮?

    我想有条件地禁用此按钮 或隐藏它 如果Model BicycleSellerListingId不大于 0 不知道该怎么做 div using Html BeginForm Delete null new id Model BicycleSe
  • 如何将文件放入 Django 的固定装置中?

    我可以轻松地使用文件名填充 Django 固定装置中的 FileField 或 ImageField 字段 但该文件不存在 当我尝试测试我的应用程序时 它会失败 因为该文件不存在 如何在 Django 固定装置中正确填充 FileField
  • 自动实现的属性必须定义 get 和 set 访问器

    SQLCLR Visual Studio 2015 我是编写 CLR 代码的新手 编译 SQL CLR 函数时出现以下错误 我正在使用 Net 坐标库 https www doogal co uk dotnetcoords php 有问题的
  • 从字符串动态导入文件中的方法

    我有一个字符串 说 abc def ghi jkl myfile mymethod 如何动态导入mymethod 以下是我的做法 def get method from file full path if len full path 1 r
  • 将handlebars变量传递给客户端js文件

    我正在使用 Node js Express Handbars 构建一个应用程序 并正在寻找一种可以将车把数据从服务器传递到客户端 JavaScript 文件的方法 例如 server js var person name George ag
  • C 语言有哪些 XML API?

    它们都这么复杂吗 http msdn microsoft com en us library ms766497 VS 85 aspx http msdn microsoft com en us library ms766497 VS 85
  • 计算机多久会犯一次错误?

    我指的不是编程错误 这些错误实际上是由人类以某种方式造成的 而是在执行像将两个数字相加这样简单的操作时出现的错误 1 x 中预期出现错误的 x 范围是多少 就 CPU 而言 存在三种可能的错误来源 这些错误似乎在您的问题范围内 浮点舍入错误
  • 如何管理 ASP.NET 中触发事件的顺序?

    这个问题看似微不足道 但我没有通过谷歌找到答案 如果我在网络表单中有多个独立的控件 例如DropDownLists 和网格 我需要在另一个事件处理程序中使用来自一个事件处理程序的回发信息 因此我需要让它一次又一次地正确触发 我看到很多间接的
  • 针对多个 Web 请求的最佳多线程方法

    我想创建一个程序来爬行并检查我的网站是否有 http 错误和其他内容 我想使用多个线程来执行此操作 这些线程应该接受要抓取的 url 等参数 虽然我希望 X 线程处于活动状态 但仍有 Y 任务正在等待执行 现在我想知道执行此操作的最佳策略是
  • 为什么使用存储库模式或者请向我解释一下?

    我正在学习存储库模式并正在阅读使用 Entity Framework 4 1 和 Code First 的存储库模式 http www codeproject com Tips 309753 Repository Pattern with
  • 我们声明结构体的两种方式有什么区别?

    作为 C 的初学者 我正在学习链表和其他数据结构 在网上查看了一些实现之后 我发现了他们定义结构的两种方式 两者有什么区别 在一种情况下 我们在下一个指针之前添加 struct 而在另一种情况下我们没有 Way 1 struct node
  • 如何使用Jquery检索wordpress的ajax搜索结果

    我需要设置 wordpress ajax 搜索结果 但我的方法在单击按钮时不会检索结果 而是将我重定向到另一个网站 myurl com s term 我正确调用了 admin ajax php 但设置不正确 有什么想法导致问题吗 Scrip
  • 无法使用 Cypress.io 测试页脚的背景颜色,它会抛出错误

    无法使用 Cypress io 测试背景颜色 在运行 cypress 测试时会抛出以下错误 CypressError 重试超时 actual equals 不是函数 通过安装的 chai colorsnpm install chai col
  • Frontpage 服务器扩展安装问题

    这是我的故事的前言 https stackoverflow com questions 5856880 vs unable to create website found 我的 VS 或 IIS 有问题 我不知道 在 Visual Stud
  • 文本区域占位符不起作用

    我编写了下面的文本区域代码 但占位符不起作用 我在文本区域框中看不到占位符
  • 有没有办法以编程方式确定 Apple 内置控件的正确尺寸?

    在编写 Cocoa 应用程序时 我以编程方式完成大部分用户界面布局 例如 NSRect popUpFrame NSMakeRect 10 10 100 kDefaultPopUpButtonHeight NSPopUpButton popU
  • 现代 GPU 上制服的分支成本

    在现代 GL3 3 GPU 上使用 GLSL 时 在统一上进行分支的可能成本是多少 在我的引擎中 我已经达到了拥有大量着色器的程度 我为其中的很多预设了几种不同的质量预设 就目前情况而言 我在着色器中使用带有 if 的制服来选择不同的质量预