OpenGL-OpenCL 互操作传输时间 + 位图纹理

2024-02-03

两部分问题:

我正在开展一个学校项目,使用生命游戏作为实验 gpgpu 的工具。我使用 OpenCL 和 OpenGL 进行实时可视化,目标是让这个东西尽可能大、更快。经过分析,我发现帧时间主要由 CL 获取和释放 GL 缓冲区决定,并且时间成本与缓冲区的实际大小成正比。

1)这正常吗?为什么会这样呢?据我所知,缓冲区永远不会离开设备内存,并且 CL 获取/释放就像互斥锁一样。 OpenCL 是否单独锁定/解锁每个字节或其他什么?

为了解决这个问题,我从 24 位 RGBA 颜色模式(据我所知,OpenGL 的首选颜色模式?)缩减为 8 位 RGB 颜色。这导致了显着的加速,但是在调整我的内核之后,传输时间再次占据主导地位。

由于没有任何关于如何完全消除传输时间的想法(除了将我的内核从 OpenCL 移植到 GLSL 之外,这将超出项目的原始范围),我现在认为我最好的选择是写入位图( (与我当前使用的 8 位像素图相反),然后使用该位图和颜色索引来对四边形进行纹理处理。

2)我可以直接使用位图对四边形进行纹理化吗?我考虑过使用 glBitmap 绘制到辅助缓冲区,然后使用该缓冲区来纹理我的四边形,但如果可用,我更愿意使用更直接的路线。


CL/GL 互操作获取和释放调用背后的设计意图是让它们只是所有权转移。然而,在许多早期的实现中,这些都是从 CL 到 GL 来回复制图像。

除非您使用 OpenCL 1.1 中的同步对象扩展,否则您需要在释放之前执行 clFinish,在获取之前执行 glFinish;你will看到这里花费了大量时间,因为所有排队的工作都必须在这些调用继续之前完成。有些平台您可以使用 clFlush 而不是 clFinish;检查供应商提供的 OpenCL 文档。

通过在或多或少最新的硬件上安装最新的 NVIDIA 和 AMD 驱动程序,我发现高清视频大小的图像的获取和释放调用速度非常快。

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

OpenGL-OpenCL 互操作传输时间 + 位图纹理 的相关文章

  • 在 open CL 中将结构数组传递给内核

    你好 我正在尝试在 open CL 中实现距离向量程序 基本上我在将结构数组作为参数传递到内核时遇到问题 我的结构定义是这样的 typedef struct int a nodes 4 node node srcA 为此分配内存后 我使用此
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • 渲染具有透明度的纹理时,OpenGL 不需要的像素

    我已经为这个问题苦苦挣扎了一段时间了 当我使用 OpenGL 渲染 2D 纹理 在无透明度和部分透明度之间的过渡上具有透明度值 时 我得到了一些烦人的灰色像素 我认为这是像素值插值的产物 关于如何改进这一点有什么想法吗 I m attach
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • OpenGL什么时候完成函数中指针的处理?

    OpenGL有多项功能 http www opengl org wiki GLAPI glTexSubImage2D直接获取指针 他们中有一些从这些指针读取数据 http www opengl org wiki GLAPI glBuffer
  • 延迟阴影映射 GLSL

    我目前正在实施延迟渲染管道 但我仍坚持使用阴影贴图 我已经成功地将其实施到前向管道中 我所做的步骤是 获取灯光视图中的位置 转换为光视图剪辑空间 使用 0 5 0 5 获取阴影纹理坐标 检查深度 编辑 使用新结果图像更新代码 float c
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • 具有交错缓冲区的 openGL glDrawElements

    到目前为止 我只使用了 glDrawArrays 并希望转向使用索引缓冲区和索引三角形 我正在绘制一个有点复杂的对象 其中包含纹理坐标 法线和顶点坐标 所有这些数据都收集到一个交错的顶点缓冲区中 并使用类似于以下的调用进行绘制 假设所有血清
  • 渲染到一个颜色通道而不影响其他通道

    使用 OpenGL 任何版本 如何通过一次仅影响一个颜色通道来渲染到帧缓冲区对象 例如 我的帧缓冲区对象具有 GL BGRA 布局 现在我想执行一些渲染命令 这些命令应该只改变红色通道 因此 如果片段用颜色 204 0 0 0 渲染并且像素
  • Qt 5.5 QOpenGLWidget 链接错误未链接任何 openGL 调用

    我尝试使用 Qt 5 5 1 构建一个简单的 OpenGL 应用程序 一切都很好 直到我尝试使用 glClearColor 等 openGL 本机函数调用 该小部件实际上编译并产生黑屏 但在我尝试使用任何 openGL 本机函数后 它甚至不
  • 为什么 cudaGLSetGLDevice 失败,即使它是在 main 函数的第一行中调用的

    我想使用 OpenGL 和 CUDA 之间的互操作性 我知道 正如一些教程所说 第一步是选择设备 但是 当我在主函数的第一行中调用 cudaGLSetGLDevice 0 时 程序退出并显示信息 cudaSafeCall 运行时 API 错
  • OpenGL纹理渲染与原始不匹配

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

    最近 我将 ATI 驱动程序 我使用的是 HD7970 更新为最新版本 但我的 OpenGL 项目的一些对象停止工作 更重要的是 他们适用于 nVidia 最新驱动程序 在 960m 上测试 ATI 和 nVidia 渲染管道之间有什么我应
  • 如何在 OpenGL 中绘制镜像某些东西的镜子?

    根据我的理解 要在 OpenGL 中进行镜像 您基本上需要绘制场景 然后将所有内容翻转并再次绘制 只是使其通过镜子可见 从而在镜子中创建完美翻转的图像 但我看到的问题是 执行此操作时 唯一可以看到其他镜子的镜子是在前一个镜子之后渲染的镜子
  • 编写openCL代码时,在没有GPU的单核机器上表现如何?

    大家好 我目前正在将光线追踪器从 FORTRAN 77 移植到 C 语言以进行研究项目 移植了要点之后 问题是我们如何进行并行化 在实验室中 我可以使用几台不同的 Opteron 机器 具有 2 到 8 个内核 但没有 GPU 目前 我们正
  • OpenGL 新手: glutMouseFunc

    我试图在单击鼠标后更改球体位置 但在使用 glutMouseFunc 中的 x 和 y 时它不起作用 以下是代码 include stdafx h include
  • 3D 图形批处理

    很多网站 文章都说 批量 批 批 有人可以解释一下着色器中的 批处理 代表什么吗 即 是否 改变纹理 更改任意着色器变量 意味着某些东西不能 批处理 最简单的总结方法就是尝试尽可能少地调用 API 来绘制您需要绘制的内容 使用顶点数组或 V
  • nvidia GPU 上的内核真的有超时吗?

    寻找为什么我的内核产生奇怪的错误消息或仅 0 结果的答案我发现了这个answer https stackoverflow com questions 3988645 cl out of resources for 2 millions fl
  • 光照不适用于 gluSphere

    这是一个简单的问题 我有点羞于寻求帮助 我正在对 gluSphere 进行简单调用来渲染球体 但是 即使我很确定我正确添加了法线和照明 它也无法正确照亮 但是 如果我添加纹理 模型会正常点亮 但它似乎总是平滑的 并且我无法将其更改为平面 这
  • 并排显示图像的一半 - OpenGL

    我为两个图像创建了两个纹理 现在我想在opengl中按图像2的左侧部分 完整的图像1 图像2的右侧部分的顺序显示该纹理 我已经做了如下 Image1 显示在 opengl 屏幕的中央 但屏幕的左右部分不正确 应分别显示 image2 的左侧

随机推荐

  • 如何创建一个可以点击其他应用程序的自动点击器应用程序?

    我见过很多提供自动点击功能的应用程序 但他们不提供一些特定的定制 所以我决定创建一个 我看过很多提供自动点击的教程 但它们应该在同一个应用程序中使用 但我想创建一个自动点击应用程序 可以单击其他应用程序的视图 我是一名中级java开发人员
  • Delphi 应用程序如何检测 Windows PC 的网络代理设置?

    我有一个 Delphi 应用程序 它使用以下命令与 Internet 上的 Web 服务器进行通信印地组件 http www indyproject org 该应用程序的大多数用户都具有直接的 Internet 连接 但有些用户位于本地网络
  • Lua 作为嵌入式语言的替代品?

    我正在开发一个在 DSP 上运行 Linux 的嵌入式系统 现在我们想让它的某些部分可以编写脚本 并且我们正在寻找一种很好的嵌入式脚本语言 这些脚本应该与我们现有的 C 代码库很好地集成 并且小而快 我知道 Lua 是解决此类问题的行业选择
  • 将 GCController 与 tvOS 模拟器结合使用

    我没有新的 Apple TV 但正在使用模拟器为其制作游戏原型 不幸的是 我似乎无法让 GCController 将 Siri 遥控器列为可用控制器 正如 tvOS 文档所示 我的控制器列表始终是 0 个元素长 即使我调用startWire
  • OS X 的 Boot2Docker 无法启动

    我是 docker 新手 我正在尝试在我的工作计算机上运行 boot2docker 我使用从办公室网络挂载主目录的用户帐户登录到运行 OS X 版本 10 10 1 Yosemite 的计算机 我安装了 Docker v1 4 1https
  • 禁用内联CSS样式[重复]

    这个问题在这里已经有答案了 当我使用 IE Developer 工具检查 html 时 我发现按钮有一种内联样式 我什么都不想要width此输入元素的属性 如何禁用或用空覆盖它width 如果您想覆盖内联样式 那么您需要在样式表中添加样式
  • Elasticsearch 的 406(不可接受)错误代码是什么意思?

    我正在尝试使用qwest http dreamysource io project qwest将一些数据发送到 Elasticsearch qwest post http elk example com 9200 incidents thi
  • 固定列标题宽度与正文列宽度不匹配

    标题与列宽不对齐 JsFiddle http jsfiddle net DyMSb 1 截屏 http s17 postimg org dybznay9b screen png 我在用着 ajax aspnetcdn com ajax jq
  • 以单下划线或双下划线开头的函数和变量

    我在各种编程语言 PHP 和 Python 中看到过以下划线开头的函数和变量 并且对其背后的含义感到困惑 假设 PHP 中使用正常约定 单下划线表示受保护的成员变量或方法 双下划线表示私有成员变量或方法 这源于当时 PHP 的 OOP 支持
  • 如何让Spring JMS从注释@JmsListener中选择目标队列名称

    任何帮助将不胜感激 我正在尝试使用 spring JMSListener 创建 MDB 的替代品 我希望将目的地名称作为注释传递 但我注意到org springframework jms listener DefaultMessageLis
  • 对象的 JVM 深度内存大小[重复]

    这个问题在这里已经有答案了 据我所知 众所周知的 Instrumentation Java 方法无法正确计算对象的深度大小 是否有可靠的方法在 JVM 上计算对象的正确深度大小 我正在考虑的用例是固定 或上限 内存大小的数据结构 即缓存 注
  • 如何显示多个 YouTube 视频而不重叠音频

    我有一个包含一些 YouTube 视频嵌入代码的页面 当用户在一个视频上单击 gt 播放 时 页面上的所有其他视频都需要暂停 否则它们的音频会与刚刚播放的新视频重叠 实现这一点最有效的方法是什么 好吧 这是我根据其他人的一些代码提出的解决方
  • postgreSQL中的@@Fetch_status

    我正在将数据库从 MS SQL Server 传输到 PostgreSQL 但此触发器有问题 CREATE TRIGGER added clients ON client FOR INSERT AS BEGIN DECLARE cursor
  • 如何强类型组合 mixin?

    我正在尝试使用函数组合通过 mixin 向对象添加行为 const pipe funcs args any gt any gt initial any gt funcs reduce object fn gt fn object initi
  • 快速,将文件发送到服务器

    我正在学习 swift 我使用下面的代码向服务器发送请求 它适用于简单的请求 我从服务器得到响应 我的问题是我无法将文件发送到服务器 code let parameters parameter let request NSMutableUR
  • 播放后重定向 html5 视频

    我有一个 html 5 视频 我删除了控制按钮并添加了 js 代码 以便用户在单击视频时播放视频 我需要做的是绑定一个额外的脚本 该脚本将在视频播放后重定向页面 而无需重新加载页面 下面是我的js代码 function play var v
  • 如何获取colspan的值

    我尝试过不同的 jQuery 方法 var num this attr colspan text var num this attr colspan val var num this td colspan val var num this
  • 在c#中将字符串转换为十进制

    我在使用decimal parse 将字符串转换为十进制值时遇到一些问题 这是我的代码行 fixPrice decimal Parse mItemParts Groups price Value Replace Replace Replac
  • 开发人员是否需要为在 Windows Azure Marketplace 上发布 SaaS 应用程序付费?

    目前我正在构建一个简单的 SaaS 驱动的 TMS 目的是在 Windows Azure Marketplace 中发布它 我无法找到任何定价 微软是否向开发者收取发布费用 是按月计算的吗 或者 Windows Azure 上托管的所有应用
  • OpenGL-OpenCL 互操作传输时间 + 位图纹理

    两部分问题 我正在开展一个学校项目 使用生命游戏作为实验 gpgpu 的工具 我使用 OpenCL 和 OpenGL 进行实时可视化 目标是让这个东西尽可能大 更快 经过分析 我发现帧时间主要由 CL 获取和释放 GL 缓冲区决定 并且时间