Domanda

Al lavoro abbiamo un programma per giocare a 2K (2048*1556px) OpenEXR sequenze di film.Funziona bene..tranne quando le sequenze che sono più di 3GB (abbastanza comune), allora è per scaricare i vecchi telai da memoria, nonostante il fatto che tutte le macchine hanno 8-16GB di memoria indirizzabile tramite linux BIGMEM roba).

I telai hanno per lui nella cache in memoria per la riproduzione in tempo reale.Il sistema operativo è un diversi anni 32-bit di Fedora Distro (non possibile espandibile fino a 64bit, per il prossimo futuro).Per il processo di limitazione è di 3GB al processo.

Fondamentalmente, è possibile memorizzare nella cache più di 3GB di dati in memoria, in qualche modo?La mia idea iniziale era quella di diffondere i dati tra più processi, ma non ho idea se questo è possibile..

È stato utile?

Soluzione

Come circa la creazione di un'unità RAM e carico il file al suo interno ...supponendo che l'unità RAM supporta il BIGMEM roba per voi.

Si potrebbe utilizzare più processi:ogni processo di carica di un punto di vista del file come un segmento di memoria condivisa, e il giocatore processo di mappe segmenti di volta in volta necessari.

Altri suggerimenti

Una possibilità potrebbe essere quella di utilizzare mmap.Vuoi mappa/unmap diverse parti dei vostri dati nel virtuale stessa area di memoria.Si potrebbe avere un solo set di mappati in un momento, ma non c'era abbastanza memoria fisica, i dati devono rimanere residente.

Il mio, quello che un problema interessante :)

(MODIFICA:Oh, ho appena letto di Rob unità ram post...ho avuto tutto eccitato per il problema...ma sono un po ' di più per suggerire, in modo da non eliminare)

Sarebbe possibile...

  1. installazione di un multi-gigabyte di ram disco, e quindi
  2. modificare il programma a fare tutto quello che la lettura del "disco"?

Credo che il disco ram parte è quella in cui tutto il problema sarebbe, dal momento che la dimensione del disco ram sarebbe il sistema operativo e file system dipendente.È possibile creare più dischi ram e il codice di saltare tra di loro.O forse si potrebbe configurare un RAID 0 striping su più dischi ram.O, se ci sono ancora OS limiti e si può permettere di cadere un paio grand (4k?), installazione hardware RAID-0 striscia con alcuni di quei nuovi velocissimo unità a stato solido.O...

Divertimento, divertimento, divertimento.

Assicurati di seguire!

Presumo che è possibile modificare l'applicazione.Se è così, la cosa più semplice sarebbe quello di avviare l'applicazione più volte (una volta per ogni 3GB pezzo di video), ciascuno possesso di un pezzo di video, e utilizzare un altro programma per sincronizzare il loro modo ognuno di essi prendono il controllo del framebuffer (o altri video in uscita), a sua volta.

La sincronizzazione sta per essere un po ' disordinato, forse, ma può essere semplificato se ogni app ha il suo framebuffer e la sincronizzazione punti del programma del controllore video per la corretta framebuffer tra fotogrammi quando si passa alla successiva applicazione.

@dbr ha detto:

C'è una recensione della macchina con un assurdo fibre-channel-RAID-array che può riprodurre i file 2K diretto dalla matrice facilmente.Il problema è con l'artista-postazioni di lavoro, quindi non sarebbe uno $4000 array RAID, sarebbe centinaia..

Beh, se si può accettare un limite di ~30GB, poi magari un singolo 36GB SSD sarebbe sufficiente?Vada per ~US$1k ogni credo, e le velocità di trasmissione dati può essere sufficiente.Molto bene forse meno di un puro RAM approccio.Ci sono piccole taglie disponibili, anche.Se ~60GB è abbastanza si potrebbe probabilmente ottenere via con il JBOD di 2 per il doppio del costo, e saltare il controller RAID.Essere sicuri di guardare solo all'alto fine SSD opzioni--la fascia bassa è riempito con glorificato chiavette di memoria.:P

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top