2008-09-03 45 views
4

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

这些帧必须缓存到内存中才能实时播放。操作系统是一个数年前的32位Fedora Distro(在可预见的未来不可能升级到64位)。每个进程的每个进程限制为3GB。

基本上,有可能在内存中缓存超过3GB的数据,不知何故?我最初的想法是在多个进程间传播数据,但我不知道这是否可能。

回答

2

如何创建RAM驱动器并将文件加载到该文件中...假设RAM驱动器支持BIGMEM你的东西。

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

+0

Adob​​e Premiere CS4在移至64位之前使用了多工艺技术 – 2016-11-18 14:12:07

3

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

1

我假设你可以修改应用程序。如果是这样,最简单的方法是多次启动应用程序(每3GB视频一次),让每个视频保存一大块视频,并使用另一个程序同步它们,以便它们分别控制帧缓冲区(或其他视频输出)。

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

1

我,多么有趣的问题:)

编辑:哦,我刚刚看了罗布的RAM驱动器后...我得到的问题都兴奋......但有更多的建议,所以我不会删除)

难道是... ...可能

  1. 设置一个多GB的RAM磁盘,然后
  2. 修改程序来完成所有它是从阅读“磁盘“?

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

有趣,有趣,有趣。

一定要跟进!

0

@dbr说:

有一个审查的机器中将用荒谬光纤通道的RAID阵列,可以播放2K文件从阵列直接容易。问题是与艺术家的工作站,所以它不会是一个$ 4000个RAID阵列,它会是数百..

好吧,如果你能接受〜30GB的极限,那么也许一个36GB SSD驱动器就够了?我认为每个人都需要约1万美元,而数据速率可能就足够了。这很可能比纯粹的RAM方法更便宜。还有更小的尺寸。如果大约60GB就足够了,那么你可能会摆脱2的JBOD阵列,使成本增加一倍,并跳过RAID控制器。一定要看看更高端的SSD选项 - 低端充满了荣耀的记忆棒。 :P

相关问题