2008-09-03 49 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

相關問題