Precisa de ajuda! Não consigo resolver o problema, estou atingindo limitações de hardware - página 2

 
ALXIMIKS:

Lembrei-me de um site onde um problema semelhante e variantes de sua solução em C++ foram discutidos.

Obrigado, eu vou ler.

Ivan Ivanov:
Desculpe, e se eu tentar 64 bit ou mt só girará 32
Eu pensava ingenuamente que uma coisa tão altamente matemática deveria girar em 64 bits
Pegue o software de cálculo aerodinâmico, eles não funcionam com 32bit.
sobre o argumento principal de que 32x é mais rápido para executar um computador que conheço, mas é um problema de hardware imho

A mudança para x64 apenas empurra o teto para trás, e não muito longe. Não terei que me esgotar e comprar 16Gb de memória. ;)

 
anonymous:

1. Naturalmente, use um sistema x64.

2. alugar uma máquina mais potente na nuvem EC2 da Amazônia e fazer os cálculos sobre ela.

3. Usar dados comprimidos, descomprimir na memória em tempo real. Dados reais são melhor comprimidos se você os dividir em fluxos (sinal/mantissa/exponente); você pode usar flutuador de 12 bits (às custas da precisão).

4: fazer um cálculo fora do consultor com algo que possa lidar com grandes dados (Matlab/R/etc).

1,2: trata-se de empurrar o teto para trás, e você quer resolver o problema sem estar vinculado a uma figura específica.

3. O problema não é a quantidade de dados no disco, mas sim a quantidade na memória. Posso comprimir por mais 10-20%, mas novamente, isso não vai resolver o problema.

4. Estou mantendo a esperança de ficar na caixa de areia por enquanto. Para que eu não tenha que escrever copiadoras/sincronizadores mais tarde.

Obrigado por sua participação!

 
komposter:
Mudar para x64 apenas empurraria o teto para trás, e não muito longe. Eu não tenho que esgotar e comprar mais 16 Gb de memória, tenho? ;)

Você não trabalha com este tipo de dados o tempo todo, trabalha? Escreva para x64 e execute-o na amazon quando necessário. Você também pode depurar lá em micro instância.

Se, no entanto, você enfrentar este problema o tempo todo - você pode comprar 64 GB de memória por cerca de $1k, por exemplo Corsair Vengeance Pro CMY64GX3M8A2133C11.

Ou repensar o projeto do algoritmo para que ele possa funcionar em uma única passagem sobre os dados

p.s. Você também pode armazenar dados comprimidos na memória, e descompactar conforme necessário por tempo suficiente para processá-los

 
komposter:

Obrigado, vou lê-lo.

A mudança para x64 apenas empurrará o teto para trás, e não muito longe. Não posso esgotar e comprar mais 16GB de memória, posso? ;)

Você deve estar brincando comigo :-)
sou um boneco com 8gig para brincar
 

Opção 1: Cortar o arquivo em pedaços.

Opção 2: Cortar o arquivo em pedaços, mas também sistematizá-lo. Como uma palavra no dicionário. Começa com "A" e procura por "A.txt". Desta forma, você pode organizar os dados em forma de árvore (semelhante ao dicionário: pastas A, B... nas pastas A AA, AB, etc.), a busca será muito rápida.

 
komposter:

Portanto, você terá que ler muitas vezes, e isso é:

  • muito, muito lentamente.
  • limpará um buraco na unidade.

disco RAM virtual para o resgate ;)

e você não terá um buraco e vai gostar da velocidade.

e o volume total está disponível de uma só vez.

não cortar em pedaços, porque os pedaços não são adequados para a tarefa

 
Eu tentaria cortar o arquivo em pedaços e carregar cada pedaço conforme necessário (ou seja, como Dima sugere). É difícil dizer exatamente, pois isso depende da tarefa específica. Mas o problema é interessante, mantenha-me informado sobre suas descobertas.
 
komposter:

1. este é o cache... Ou eu não entendo o que você quer dizer. Minha opção de ler constantemente os pedaços necessários?

Bem... leia o arquivo através de seu invólucro, o invólucro irá manter uma pequena parte do arquivo na memória e substituí-lo sem ler. Você sabe como o arquivo é utilizado, portanto o invólucro deve se tornar bastante eficiente.

komposter:

Oh, merda...

Os mesmos ovos, somente de lado. A leitura pode ser acelerada, mas não resolve o problema globalmente.

Bem, eu estava pensando em ações repetitivas dentro de uma pequena escala.

O uso do mapeamento é usar o cache do vento em vez de escrever o seu próprio. Carregue o pedaço, leia-o, descarregue-o. Se o pedaço for usado com freqüência, os ventos o manterão na memória.

anônimo:

3. Usar dados comprimidos, descomprimir na mosca. Dados reais são melhor comprimidos se você os dividir em fluxos (sinal/mantissa/exponente); você pode usar flutuador de 12 bits (às custas da precisão).

4. fazer um cálculo fora do consultor com algo que possa lidar com grandes dados (Matlab/R/etc).

Ou assim (c).
 
Sem conhecer as especificidades da estrutura de dados e as operações a serem realizadas, só é possível dar conselhos gerais. Uma das opções é converter dados brutos em metadados de tamanho menor - os mesmos 4 Gb - em uma ou várias passagens (mas sem limpar o disco) e depois trabalhar com metadados (valores agregados, cortes por algum parâmetro, etc.). Se isto não funcionar, então carregue os dados no SGBD.
 
komposter:

Há uma grande quantidade de informações (cerca de 20 GB em um arquivo de texto).

...

E se este arquivo for comprimido com um arquivador, qual é o tamanho (porque o texto deve ser muito bem comprimido)?