GPU 上的相干内存是什么?

2024-01-25

我在记忆中不止一次遇到“非连贯”和“连贯”记忆这个术语。

科技论文 https://renderdoc.org/vulkan-in-30-minutes.html与图形编程相关。我一直在寻找简单明了的解释,但发现大部分是“硬核”论文this https://www.ece.ubc.ca/~aamodt/papers/isingh.hpca2013.pdf我很高兴收到外行风格的答案,了解 GPU 架构上的相干内存实际上是什么,以及它与其他(可能不相干)内存类型的比较。


记忆就是记忆。但不同的东西可以访问该内存。 GPU 可以访问内存,CPU 可以访问内存,也许还可以访问其他硬件位,等等。

如果其他人对该内存所做的更改是“一致”的,那么该特定事物就具有对内存的“一致”访问visible给读者。现在,您可能认为这是愚蠢的。毕竟,如果记忆被改变了,怎么可能有人possibly会看不到吗?

简单来说,就是缓存。

事实证明,更换内存的成本很高。所以我们尽一切可能avoid改变记忆,除非我们绝对必须这样做。当您将 CPU 中的单个字节写入内存中的指针时,CPU 尚未写入该字节。或者至少,记忆中没有。它将其写入该内存的本地副本,称为“缓存”。

其原因是,一般来说,应用程序不会写入(或读取)单个字节。他们更有可能以小块的形式写入(和读取)大量字节。因此,如果您要执行昂贵的操作(例如内存加载或存储),则应该加载或存储大块内存。因此,您将对内存块进行的所有更改存储在缓存中,然后在将来的某个时刻将该缓存块写入实际内存。

但是,如果您有两个使用相同内存的独立设备,则需要某种方法来确保一个设备的写入对其他设备可见。大多数 GPU 无法读取 CPU 缓存。大多数 CPU 语言都没有语言级支持来表示“嘿,我写到内存中的东西?我真的是说你现在就把它写到内存中。”因此,您通常需要一些东西来确保更改的可见性。

在 Vulkan 中,内存标记为VK_MEMORY_PROPERTY_HOST_COHERENT_BIT意味着,如果您读/写该内存(通过映射指针,因为这是 Vulkan 让您直接写入内存的唯一方式),您don't需要使用函数vkInvalidateMappedMemoryRanges/vkFlushMappedMemoryRanges以确保 CPU/GPU 可以看到这些更改。任何更改的可见性都得到双向保证。如果该标志在内存上不可用,则必须使用上述函数来确保要访问的特定数据区域的一致性。

对于相干内存,硬件方面会发生以下两件事之一。 CPU 对内存的访问不会缓存在任何 CPU 的缓存中,或者 GPU 可以直接访问 CPU 的缓存(可能是因为与 CPU 位于同一芯片上)。您通常可以看出后者正在发生,因为 Vulkan 的片上 GPU 实现并不费心提供非一致性内存选项。

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

GPU 上的相干内存是什么? 的相关文章

  • 带有矩形数组的 SDL_RenderCopy

    SDL RenderCopy 仅接受单个输入矩形和单个输出矩形 但是 如果我有很多想要填充的图像 我对 opengl 的了解告诉我 一次绘制所有图像的批量操作可能比每个精灵一次绘制调用要快得多 SDL FillRects 已经有一个计数参数
  • 标准化设备坐标

    我正在编写一个处理 2D 图形形状的库 I m just wondering why should my coordinate system range from 1 1 for both the x and y axis instead
  • 可选择的圆形图像视图,如 Google+

    如何创建一个可选择的循环ImageView就像当前用于个人资料图片的 Google 应用程序一样 这就是我所指的 上图未选中 下图已选中 我尝试一比一复制个人资料图片 到目前为止我的工作 loadedImage is the Bitmap显
  • iOS 上的 OpenCV - GPU 使用情况?

    我正在尝试开发一个 iOS 应用程序 可以对来自相机的视频执行实时效果 就像 iPad 上的 Photobooth 一样 我熟悉 OpenCV 的 API 但如果大多数处理是在 CPU 上完成而不是在 GPU 上完成 我担心 iOS 上的性
  • 检测矩形经过黄色像素

    我有一个关于检测移动和可能旋转的矩形何时经过面板背景图像的黄色像素的最佳方法的疑问 我有一个方法 它接受一个图像和一个点 如果该点是黄色像素的点 则返回 true 我需要这种颜色检测来实现我的游戏功能 如果汽车 玩家 驶过赛道的黄色边界 它
  • 为什么我的 FPS 相机一劳永逸地滚动?

    如果我忽略四元数代数的肮脏细节 我想我理解了旋转和平移变换背后的数学 但仍然不明白我做错了什么 为什么我的相机一劳永逸地滚动 更具体地说 我应该如何从相机的方向 旋转矩阵 计算相机视图矩阵 我正在用 Python 编写一个简约的 3d 引擎
  • 合并空间上接近的路径/线段的算法

    我正在寻找一种用于街道地图制图概括的几何算法 名称 在我的地图数据中 我有许多路径 点的有序列表 由线段连接 这些路径彼此靠近且几乎平行 我如何 1 识别这些 相邻路径 即如何找到比某个阈值更接近的路径 以及 2 将它们合并成一条路径 即如
  • 用于预乘 ARGB 的 SSE alpha 混合

    我正在尝试编写一个支持 SSE 的 alpha 合成器 这就是我想出的 首先 混合两个 4 像素向量的代码 alpha blend two 128 bit 16 byte SSE vectors containing 4 pre multi
  • 超出 CreateConstantBufferView 处虚拟地址的末尾

    我正在遵循 使用 DirectX12 进行游戏编程 ch 6 代码 但在 ID3DDevice CreateConstantBufferView 中 我发现 D3D12 错误 D3D12 错误 ID3D12Device CreateCons
  • PyQt - 如何检查 QDialog 是否可见?

    我有个问题 我有这个代码 balls Ball for i in range 1 10 因此 当我说 Ball 时 这将在 QDialog 上绘制一个球 然后当这完成后 我正在移动球QDialog无限循环中 我想说类似的话while QDi
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig
  • CUDA - 将 CPU 变量传输到 GPU __constant__ 变量

    与 CUDA 的任何事情一样 最基本的事情有时也是最难的 所以 我只想将变量从 CPU 复制到 GPUconstant变量 我很难过 这就是我所拥有的 constant int contadorlinhasx d int main int
  • 将四元数旋转转换为旋转矩阵?

    基本上 给定一个四元数 qx qy qz qw 我如何将其转换为OpenGL旋转矩阵 我也对哪个矩阵行是 向上 向右 向前 等感兴趣 我有一个四元数的相机旋转 我需要在向量中 以下代码基于四元数 qw qx qy qz 其中顺序基于 Boo
  • .NET 图形重影

    我正在为我们正在开发的新应用程序制作一个示例 GUI 我已经决定了语言 但我可以使用任何第 3 方 DLL 或插件或任何我需要的东西 以使 GUI 尽可能无缝地工作 他们希望它非常像 mac ubuntu vista Windows 7 所
  • 如何在 C++ 项目的 Cmake 文件上添加 Mac OS 框架

    我正在尝试将外部库 Vulkan 添加到我的项目中 这个库是预编译的并且有一个框架 我的项目树 build source Entry main cpp include ext vulkan macos include lib Framewo
  • 数学/算法使图像适合屏幕保留纵横比

    我需要数学 算法方面的帮助来拍摄已知尺寸的图像并适合两个屏幕尺寸之一 720 x 480 或 1280 x 1024 图像尺寸来自 XML 文件 但这些尺寸是 Web 尺寸 我还从 XML 中选择了一些图像 这些图像的分辨率可能比 Web
  • cudaDeviceScheduleBlockingSync 和 cudaDeviceScheduleYield 之间有什么区别?

    正如这里所说 如何减少 CUDA 同步延迟 延迟 https stackoverflow com questions 11953722 how to reduce cuda synchronize latency delay 等待设备结果有
  • 如何从横滚、俯仰和偏航获取相机向上矢量?

    我需要从滚动角 俯仰角和偏航角 以度为单位 获取相机的向上矢量 以获得正确的外观 我已经尝试了几个小时不同的事情 但没有运气 这里的任何帮助将不胜感激 横滚 俯仰和偏航定义 3 轴旋转 从这些角度 您可以构建一个 3x3 变换矩阵来表达该旋
  • 帧缓冲区/颜色缓冲区?

    有人可以指出我两者是否相同吗 我的意思是我一直在阅读有关它的信息 这里的红皮书说 颜色缓冲区本身可以由多个子缓冲区组成 系统上的帧缓冲区包含所有这些缓冲区 here http glprogramming com red chapter10
  • 在 vulkan 中同步顶点缓冲区?

    我有一个顶点缓冲区 存储在设备内存和缓冲区中 并且主机可见且主机一致 为了写入主机端的顶点缓冲区 我将其映射 memcpy 到它并取消映射设备内存 为了从中读取数据 我在记录渲染过程期间将顶点缓冲区绑定在命令缓冲区中 这些命令缓冲区在获取

随机推荐