AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1543244
Accepted
Hearth
Hearth
Asked: 2020-04-19 11:26:42 +0800 CST2020-04-19 11:26:42 +0800 CST 2020-04-19 11:26:42 +0800 CST

VRAM 究竟是用来做什么的?

  • 772

我的笔记本电脑有一个不错的 GPU 和专用的视频 RAM。但是我在玩 Minecraft 时注意到计算机似乎没有将它用于任何事情。根据 Windows 任务管理器,只使用了大约 100 MB,而它占用了我常规 RAM 的大约一半。

我曾认为 VRAM 将用于存储模型和纹理等东西,这将减少对常规 RAM 的需求;如果这是真的,那么纹理和模型一定比我想象的要小得多。(请注意,这是一个经过大量修改的安装,具有比标准 Minecraft 更复杂的模型和纹理。)

如果不是这样, VRAM是用来做什么的?有什么办法可以让我的电脑更好地利用它吗?

memory graphics-card
  • 4 4 个回答
  • 9162 Views

4 个回答

  • Voted
  1. Best Answer
    Sam Forbis
    2020-04-19T11:36:06+08:002020-04-19T11:36:06+08:00

    视频 RAM 专门设计用于存储渲染一帧视频所需的任何内容。玩游戏时,这包括纹理、模型和其他特定于图形的数据,如着色器信息和光照贴图。通常,这些数据都不会像您提到的那样存储在主系统 RAM 中,尽管 VRAM 并不是专门为减少对常规 RAM 的需求而设计的。

    与大多数游戏相比,Minecraft 有点不同。我假设您正在玩 PC 的 Java 版本。与其他游戏通常使用的 C 或 C++ 等其他语言相比,Java 是一种(相对)高级编程语言。因此,Java 在内存使用要求方面天生就处于劣势。这就是为什么在运行 Minecraft(一个用 Java 编写的资源密集型程序)时,您的主系统内存会受到如此巨大的影响。

    不过,您的视频 RAM 使用率很低,我并不感到惊讶 - 事实上,您也不应该这样做。因为它只用于存储纹理和模型,而 Minecraft 是一款基于立方体和 16x16 纹理的游戏,我想你可以理解为什么你的 VRAM 使用率如此之低。

    • 36
  2. user1165206
    2020-04-19T12:43:22+08:002020-04-19T12:43:22+08:00

    Java Minecraft 的 CPU 很重,但 GPU 真的没什么可做的,图形方面非常简单,图形资源也非常少,相比之下……使命召唤。当我说小时,我的意思是非常小,100MB 听起来差不多。

    由于游戏的“块”设计,你可以用相对较少的资源填满屏幕。这就像使用“Duplo Lego”而不是“Lego Technics”。

    Java 是一种“解释型”语言,这意味着它不会被编译为本地指令。因此,当它运行时,它需要一个虚拟机将指令(或字节码)转换为处理器能够理解的东西。你的 CPU 比 GPU 做的工作更多。

    • 10
  3. user515655
    2020-04-20T16:57:38+08:002020-04-20T16:57:38+08:00

    Java 虚拟机,就像 Minecraft 中使用的那样,似乎会使用大量 RAM,因为它会在使用之前保留大量系统 RAM 。这对操作系统来说似乎是实际使用那么多 RAM 的应用程序。Java 使用自己的内存堆,它在某种程度上独立于运行它的操作系统。(它仍然会使用调用来增加堆)

    我的世界中的纹理加载相当低。也可能发生的是您的 OpenGL 驱动程序分配纹理的方式。例如,在 OpenGL 3.3 中,GPU 缓冲区可以映射到内存,以便对该内存部分的写入和后续刷新会导致它自动出现在 GPU 的 VRAM 中。棘手的部分是这个缓冲区是否真的只在 GPU 端,或者它实际上在 CPU 和 GPU 端,并且驱动程序只是将它从一个缓冲区复制到另一个缓冲区。OpenGL规范说驱动程序可以自行决定。结果是 CPU/Java 端为缓冲区分配了大量的地址空间,我们可能有两个缓冲区副本:一个在 CPU 端,一个在 GPU 端。

    也有可能 java 程序仍将图像存储在 RAM 中的自己的缓存中,然后根据需要将其加载到 GPU 或从 GPU 卸载。如果不大于 VRAM 使用量,这将要求 RAM 使用量始终至少相同。

    最新的视频驱动程序和 OpenGL 的迭代支持HSA 架构,这使得 VRAM 能够像缓存一样工作——程序甚至不会将纹理“上传”到 GPU——它只是将内存地址传递给已经加载的纹理,或者甚至从分配到虚拟内存的文件中引用纹理。这使得评估资源使用变得更加困难,因为现在不是简单地使用 RAM 或 VRAM,在某些情况下我们可能只使用内存地址范围,其中一些范围可以分配给 RAM,一些分配给磁盘,并且 VRAM 可能看起来是无限的或零使用,因为作为缓存,它仅存储最近使用的页面,这些页面可以任意更改!

    • 8
  4. Nathan Goings
    2020-04-21T20:06:00+08:002020-04-21T20:06:00+08:00

    这与糟糕的编码无关。

    我想指出一点。现代显卡可以在卡本身中处理大部分 Minecraft。像 PhysX 这样的系统试图做到这一点——CUDA、OpenCL 等。因此,这会增加 VRAM 的使用。

    以下是一些可以轻松(相对而言)卸载到图形驱动程序的东西:

    • 块更新(想想叶子块死亡,照明更新等)
    • 程序生成
    • 流体更新
    • 红石头
    • 物理

    但是,与 Java 等高级语言相比,着色器语言(GLSL、HLSL、SPIR-V)中的 GPU 处理要困难得多且容易出错。因此,所有这些事情都在 CPU 上执行。

    尽管之前有几款游戏已经在 GPU 中实现了其中的一些功能,但 Minecraft 并没有 AAA 级游戏所拥有的庞大而熟练的资源池。


    数学

    假设 Minecraft 使用 32 位配色方案。

    32 bits per color
    4 colors per pixel (red, green, blue, alpha)
    8 bits per byte
    (32 bits * 4 colors per pixel) / 8 bits per byte = 128 / 8 = 16 bytes per pixel.
    
    100MB / 16 bytes per pixel = 6,250,000 pixels
    sqrt(6250000) = 2500x2500 image resource in GPU (uncompressed)
    2500 pixels wide|tall / 16 pixels wide|tall = 156.25 tiles wide|tall (assuming 16x16 tile size)
    156.25 tiles wide * 156.25 tiles tall = ~24,414 16x16 tiles.
    

    总之,您可以在 VRAM 中未压缩的 32 位图像资源中存储约 24,414 个 16x16 切片。

    这个练习真的帮助我理解了为什么Factorio 的 sprite-sheets 有问题

    • 2

相关问题

  • 我可以同时使用多少台显示器?

  • 可以读取硬盘驱动器并专门写入 RAM 的系统?

  • 购买合适的笔记本电脑 RAM [关闭]

  • RAM 安装顺序。8GB 和 16GB。哪个应该在插槽 0 中?

  • CPU、内存还是主板?(PEBCAK!)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve