Armazene mais de 3 GB de quadros de vídeo na memória, em sistema operacional de 32 bits

StackOverflow https://stackoverflow.com/questions/41643

  •  09-06-2019
  •  | 
  •  

Pergunta

No trabalho, temos um aplicativo para reproduzir sequências de filmes OpenEXR em 2K (2048*1556px).Isso funciona bem..exceto quando sequências com mais de 3 GB (bastante comuns), é necessário descarregar quadros antigos da memória, apesar de todas as máquinas terem de 8 a 16 GB de memória (que é endereçável através do material Linux BIGMEM).

Os quadros devem ser armazenados em cache na memória para serem reproduzidos em tempo real.O sistema operacional é um Fedora Distro de 32 bits com vários anos de idade (não é possível atualizá-lo para 64 bits, no futuro próximo).A limitação por processo é de 3 GB por processo.

Basicamente, é possível armazenar em cache mais de 3 GB de dados na memória, de alguma forma?Minha ideia inicial era espalhar os dados entre vários processos, mas não tenho ideia se isso é possível.

Foi útil?

Solução

Que tal criar um drive RAM e carregar o arquivo nele...assumindo que a unidade RAM suporta o material BIGMEM para você.

Você pode usar vários processos:cada processo carrega uma visualização do arquivo como um segmento de memória compartilhada e o processo do reprodutor mapeia os segmentos conforme necessário.

Outras dicas

Uma possibilidade pode ser usar mmap.Você mapearia/desmapearia diferentes partes de seus dados na mesma região de memória virtual.Você só poderia ter um conjunto mapeado por vez, mas desde que houvesse memória física suficiente, os dados deveriam permanecer residentes.

Nossa, que problema interessante :)

(EDITAR:Ah, acabei de ler a postagem do ram drive de Rob... fiquei todo animado com o problema... mas tenho um pouco mais a sugerir, então não vou deletar)

Seria possível...

  1. configure um disco RAM de vários gigabytes e, em seguida,
  2. modificar o programa para fazer toda a leitura do "disco"?

Eu acho que a parte do disco RAM é onde estaria todo o problema, já que o tamanho do disco RAM dependeria do sistema operacional e do sistema de arquivos.Talvez seja necessário criar vários discos RAM e fazer com que seu código salte entre eles.Ou talvez você possa configurar uma faixa RAID-0 definida em vários discos RAM.Ou, se ainda houver limitações de sistema operacional e você puder gastar alguns mil dólares (4k?), Configure um conjunto de faixas RAID-0 de hardware com algumas dessas novas unidades de estado sólido extremamente rápidas.Ou...

Diversão diversão diversão.

Não deixe de acompanhar!

Presumo que você possa modificar o aplicativo.Nesse caso, a coisa mais fácil seria iniciar o aplicativo várias vezes (uma para cada pedaço de vídeo de 3 GB), fazer com que cada um retenha um pedaço de vídeo e usar outro programa para sincronizá-los para que cada um assuma o controle do framebuffer (ou outra saída de vídeo) por sua vez.

A sincronização será um pouco confusa, talvez, mas pode ser simplificada se cada aplicativo tiver seu próprio framebuffer e o programa de sincronização apontar o controlador de vídeo para o framebuffer correto entre os quadros ao mudar para o próximo aplicativo.

@dbr disse:

Existe uma máquina de revisão com um array RAID de canal de fibra absurdo que pode reproduzir facilmente arquivos de 2K diretamente do array.O problema está nas estações de trabalho dos artistas, então não seria um array RAID de US$ 4.000, seriam centenas.

Bem, se você pode aceitar um limite de aproximadamente 30 GB, talvez uma única unidade SSD de 36 GB seja suficiente?Acho que custam cerca de US$ 1 mil cada, e as taxas de dados podem ser suficientes.Isso pode muito bem ser mais barato do que uma abordagem de RAM pura.Existem tamanhos menores disponíveis também.Se ~ 60 GB forem suficientes, você provavelmente poderá usar um array JBOD de 2 pelo dobro do custo e ignorar o controlador RAID.Certifique-se de olhar apenas para as opções de SSD de última geração – a de baixo custo está repleta de cartões de memória glorificados.:P

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top