Ho bisogno di aiuto! Non riesco a risolvere il problema, sto incontrando delle limitazioni hardware - pagina 2

 
ALXIMIKS:

Mi sono ricordato di un sito dove si discuteva di un problema simile e di varianti della sua soluzione in C++.

Grazie, lo leggerò.

Ivan Ivanov:
Mi dispiace, cosa succede se provo a 64 bit o se mt gira solo a 32
Ho ingenuamente pensato che una cosa così altamente matematica dovesse ruotare su 64 bit
Prendete i software di calcolo aerodinamico, non funzionano su 32bit.
circa l'argomento principale che 32x rende il computer più veloce lo so, ma è un problema di hardware imho

Passare a x64 spinge solo il soffitto indietro, e non molto lontano. Non dovrò correre a comprare 16Gb di memoria. ;)

 
anonymous:

1. Naturalmente, usate un sistema x64.

2. affittare una macchina più potente nel cloud Amazon EC2 e fare i calcoli su di essa.

3. usare dati compressi, decomprimere in memoria al volo. I dati reali sono meglio compressi se li si divide in flussi (segno/mantissa/esponente); si possono usare float a 12 bit (a spese della precisione).

4: fare un calcolo fuori dagli schemi con qualcosa che può gestire grandi dati (Matlab/R/etc).

1,2: si tratta di spingere indietro il soffitto, e si vuole risolvere il problema senza essere legati a una cifra specifica.

3. Il problema non è la quantità di dati su disco, ma piuttosto la quantità in memoria. Posso comprimerlo di un altro 10-20%, ma di nuovo, questo non risolverà il problema.

4. Ho la speranza di rimanere nella sandbox per ora. In modo che i copiatori/sincronizzatori successivi non debbano scrivere...

Grazie per la vostra partecipazione!

 
komposter:
Passare a x64 spingerebbe solo indietro il tetto, e non molto lontano. Non devo correre a comprare altri 16 Gb di memoria, vero? ;)

Non lavorate sempre con questo tipo di dati, vero? Scrivere per x64 ed eseguirlo su amazon quando necessario. Si può anche fare il debug su una micro istanza.

Se, tuttavia, affrontate questo problema tutto il tempo - potete comprare 64 GB di memoria per circa $1k, ad es. Corsair Vengeance Pro CMY64GX3M8A2133C11.

O ripensare il design dell'algoritmo in modo che possa lavorare in un solo passaggio sui dati

p.s. Si possono anche immagazzinare dati compressi in memoria, e decomprimere quando necessario per un tempo sufficiente ad elaborarli

 
komposter:

Grazie, lo leggerò.

Passare a x64 spingerà solo il tetto indietro, e non molto lontano. Non posso correre a comprare altri 16GB di memoria, vero? ;)

Mi stai prendendo in giro :-)
Sono uno scemo con 8gig per giocare
 

Opzione 1: Tagliare il file in pezzi.

Opzione 2: Tagliare il file in pezzi, ma anche sistematizzarlo. Come una parola del dizionario. Inizia con "A" e cerca "A.txt". In questo modo è possibile organizzare i dati in forma di albero (simile al dizionario: cartelle A, B... nella cartella A cartelle AA, AB, ecc.), la ricerca sarà molto veloce.

 
komposter:

Quindi dovrete leggere un sacco di volte, e questo è:

  • molto, molto lentamente.
  • cancellerà un buco nell'unità.

disco RAM virtuale in soccorso ;)

e non avrai un buco, e ti piacerà la velocità.

e l'intero volume è disponibile subito.

non tagliare a pezzi, perché i pezzi non sono adatti al compito

 
Proverei a tagliare il file in pezzi e a caricare ogni pezzo come necessario (cioè come suggerisce Dima). È difficile da dire esattamente, perché dipende dal compito specifico. Ma il problema è interessante, tienimi aggiornato sulle tue scoperte.
 
komposter:

1. questa è la cache... O non capisco cosa intendi. La mia opzione di leggere costantemente i pezzi necessari?

Bene... leggere il file attraverso il suo wrapper, il wrapper manterrà una piccola parte del file in memoria e sostituirà senza leggere. Voglio dire che sapete come viene usato il file, quindi il wrapper dovrebbe risultare abbastanza efficiente.

komposter:

Oh, merda...

Stesse uova, solo di lato. La lettura potrebbe accelerare, ma non risolve il problema a livello globale.

Beh, stavo pensando ad azioni ripetitive su piccola scala.

L'uso della mappatura consiste nell'utilizzare la cache di Wind invece di scriverne una propria. Caricare il chunk, leggerlo, scaricarlo. Se il chunk è usato spesso, i venti lo terranno in memoria.

anonimo:

3. usare dati compressi, decomprimere al volo. I dati reali sono meglio compressi se li si divide in flussi (segno/mantissa/esponente); si possono usare float a 12 bit (a spese della precisione).

4. fare un calcolo fuori dall'advisor con qualcosa che può gestire grandi dati (Matlab/R/etc).

O così (c).
 
Senza conoscere le specifiche della struttura dei dati e le operazioni da eseguire, è possibile dare solo consigli generali. Una delle opzioni è quella di convertire i dati grezzi in metadati di dimensioni più piccole - gli stessi 4 Gb - in uno o più passaggi (ma senza cancellare il disco) e poi lavorare con i metadati (valori aggregati, tagli per qualche parametro, ecc.) Se questo non funziona, allora caricate i dati nel DBMS.
 
komposter:

C'è una grande quantità di informazioni (circa 20 GB in un file di testo).

...

E se questo file è compresso con un archiver, quanto è grande (perché il testo dovrebbe essere molto ben compresso)?

Motivazione: