4

在工作中,我们有一个应用程序可以播放 2K (2048*1556px) OpenEXR 电影序列。它运行良好.. 除了超过 3GB 的序列(很常见)之外,它必须从内存中卸载旧帧,尽管事实上所有机器都有 8-16GB 内存(可通过 linux BIGMEM 东西寻址)。

这些帧必须缓存到内存中才能实时播放。该操作系统是使用了几年的 32 位 Fedora Distro(在可预见的未来无法升级到 64 位)。每个进程的限制是每个进程 3GB。

基本上,是否有可能以某种方式在内存中缓存超过 3GB 的数据?我最初的想法是在多个进程之间传播数据,但我不知道这是否可能......

4

5 回答 5

3

一种可能是使用 mmap。您可以将数据的不同部分映射/取消映射到同一虚拟内存区域。您一次只能映射一组,但只要有足够的物理内存,数据就应该保持常驻。

于 2008-09-03T15:43:10.083 回答
2

如何创建一个 RAM 驱动器并将文件加载到其中...假设 RAM 驱动器为您支持 BIGMEM 东西。

您可以使用多个进程:每个进程将文件视图加载为共享内存段,然后播放器进程根据需要依次映射这些段。

于 2008-09-03T13:27:57.913 回答
1

我假设您可以修改应用程序。如果是这样,最简单的方法是多次启动应用程序(每 3GB 视频块启动一次),让每个人都拥有一个视频块,然后使用另一个程序同步它们,以便它们各自控制帧缓冲区(或其他视频输出)依次。

同步可能会有点混乱,但如果每个应用程序都有自己的帧缓冲区,并且同步程序在切换到下一个应用程序时将视频控制器指向帧之间的正确帧缓冲区,则可以简化同步。

于 2008-09-03T16:03:07.993 回答
1

我的,多么有趣的问题:)

编辑:哦,我刚刚阅读了 Rob 的 ram drive 帖子……我对这个问题感到非常兴奋……但还有更多建议,所以我不会删除)

有没有可能...

  1. 设置一个多千兆字节的 ram 磁盘,然后
  2. 修改程序以完成从“磁盘”读取的所有操作?

我猜 ram 磁盘部分是所有问题所在,因为 ram 磁盘的大小将取决于操作系统和文件系统。您可能必须创建多个 ram 磁盘并让您的代码在它们之间跳转。或者,也许您可​​以在多个 ram 磁盘上设置 RAID-0 条带集。或者,如果仍然存在操作系统限制,并且您可以负担得起几个大(4k?),请使用一些新的超快固态驱动器设置一个硬件 RAID-0 条带集。或者...

好玩,好玩,好玩。

一定要跟进!

于 2008-09-03T16:47:39.837 回答
0

@dbr 说:

有一台带有荒谬光纤通道RAID阵列的评论机,可以轻松地直接从阵列播放2K文件。问题在于艺术家工作站,所以它不会是一个 4000 美元的 RAID 阵列,而是数百个......

好吧,如果您可以接受约 30GB 的限制,那么单个 36GB SSD 驱动器可能就足够了?我认为这些价格约为 1000 美元,数据速率可能就足够了。这可能比纯 RAM 方法便宜。也有更小的尺寸可供选择。如果 ~60GB 就足够了,您可能会以双倍的成本购买 2 个 JBOD 阵列,并跳过 RAID 控制器。确保只查看高端 SSD 选项 - 低端充满了美化的记忆棒。:P

于 2008-09-05T19:13:08.033 回答