Domanda

mi chiedevo che Integer o Float tipi sono i più veloci ..
stavo pensando di byte è più veloce di numero intero, perché ha una gamma più ridotta.
Alcune persone mi hanno detto .. che in alcuni casi interi è più veloce di un byte.

seconda domanda:
La GPU è il suo modo di World Domination ..
così ho chiesto io: Può un doppio "essere più veloce" di un intero .. a causa della FPU
Allora, dove sono gli esperti? :)

È stato utile?

Soluzione

Si deve pensare più che i cicli di clock per effettuare l'aritmetica. Si potrebbe dire che l'aggiunta di due interi prende questo molti cicli, l'aggiunta di due doppie prende questo molti cicli, ecc, ma che potrebbe non essere relativo. Se tutti i dati si inserisce nella cache, allo stesso tempo, poi temporizzazione singole operazioni ha un senso. Ma se non, il tempo in più necessario a causa di una cache miss domina la differenza di singole operazioni. A volte si lavora con i tipi di dati più piccoli è più veloce perché fa la differenza tra l'avere a tirare fuori qualcosa dalla cache o no, o di dover andare in disco o meno.

Questi computer giorni passano la maggior parte del loro tempo lo spostamento dei dati in giro, non fare l'aritmetica, anche in applicazioni macinare numeri. E il rapporto tra il primo al secondo è in aumento. Non si può semplicemente confrontare, ad esempio, il tempo necessario per moltiplicare pantaloncini contro doppie. Si potrebbe scoprire che dati due versioni del programma, una versione corre più veloce su un piccolo problema e l'altra versione è più veloce su un programma più ampio, tutto a causa della relativa efficienza dei tipi di memoria.

Altri suggerimenti

  

stavo pensando di byte è più veloce di numero intero, perché ha una gamma più ridotta.

Una cosa che ho sperimentato: utilizzando un short mi ha dato un calo di prestazioni, mentre utilizzando un int era proprio bene. Questo perché, bicchierini genere non esistono sull'architettura. Sono tipi di convenienza. Il processore effettivamente funziona con la sua parola dimensioni. Nel mio caso, la dimensione della parola è stata quella di un int. Così, quando si accede a una breve, ha dovuto confezionare il valore in un int prima, lavorare con lui e poi spacchettare e mi ottenere il risultato in un breve. Tutto ciò ha determinato un calo di prestazioni. Quindi, più corta non è necessariamente migliore.

Dipende di nessuna di bit di dati in architettura. Il processore in virgola mobile tratterà galleggiante e raddoppiare identicamente fare calcoli. Entrambi sono valutati con precisione di 80 bit e pertanto assumere la stessa quantità di tempo. Caricamento e il salvataggio dei valori nei registri FPU potrebbe fare la differenza. Doppio prende il doppio dello spazio nella RAM e potrebbe quindi essere più lento a causa di cache miss. Evidente se si dispone di grandi array che si tende a indice in modo casuale.

A livello CPU, non ci sono byte, solo parole, che sono 32bit o 64bit oggigiorno. unità aritmetiche vengono solitamente cablati per manipolare numeri parola di dimensioni (o maggiore, in caso di virgola mobile).

Quindi, non v'è alcun vantaggio di velocità nell'utilizzo di tipi più piccoli di una parola in materia di operazioni aritmetiche, e ci può essere una pena di velocità perché si deve fare il lavoro supplementare per simulare i tipi che la CPU non ha modo nativo, per esempio scrittura di un singolo byte di memoria richiede di leggere prima la parola è parte di, modificarlo e poi scrivere di nuovo. Per evitare questo, la maggior parte dei compilatori effettivamente usare una parola piena di memoria per tutte le variabili più piccoli, quindi, anche una variabile booleana prende 32 o 64 bit.

Tuttavia, se si dispone di una grande quantità di dati, come ad esempio un grande array, quindi utilizzando i tipi più piccoli di solito produrrà la migliore prestazione perché avrete un minor numero di cache miss.

La lunghezza in byte di tipi numerici dipende dalla lingua e, talvolta, anche la piattaforma che si sta utilizzando. Ad esempio in java sia int e float uso 4 byte, quindi il tempo di lavorazione deve essere uguale. E mi sorprenderebbe però che i tipi più ottenere elaborati più velocemente. Se v'è evidenza di che mi piacerebbe leggere su di esso.

A proposito di cui uno è più veloce, intero o di byte, a patto che entrambi inseriscono nel registro lavorano lo stesso, o almeno senza differenza misurabile.

A proposito di numeri interi vs.double: Può essere GPU fa più veloce aritmetica con doppie poi cpu regolare, ma dubito che fa il doppio aritmetica più veloce intero, dal momento che l'aritmetica intero è solo registra aritmetica

.

Il più grande ottimizzazione sta passando dall'uso di calcoli scalari in loop, per usare i calcoli vettoriali. Poi approfittare della GPU o SSE CPU.

Bene, finché non si fa alcuna ottimizzazione vettoriale è possibile utilizzare gli interi grandi come i vostri registri (32/64 bit), senza alcun successo reale delle prestazioni.

numeri a virgola mobile sono un po 'diverso: mentre le CPU sono ottimizzati per i doppi, le GPU di solito lavorano con i galleggianti

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