GNU/Linux >> Linux Esercitazione >  >> Linux

Prestazioni aritmetiche a 32 bit rispetto a 64 bit

Dipende dalla CPU e dal funzionamento esatti. Sui Pentium IV a 64 bit, ad esempio, la moltiplicazione dei registri a 64 bit era un po' più lenta. Le CPU Core 2 e successive sono state progettate per il funzionamento a 64 bit da zero.

In genere, anche il codice scritto per una piattaforma a 64 bit utilizza variabili a 32 bit in cui i valori si adatteranno a esse. Ciò non è principalmente dovuto al fatto che l'aritmetica è più veloce (sulle CPU moderne, in genere non lo è), ma perché utilizza meno memoria e larghezza di banda della memoria.

Una struttura contenente una dozzina di numeri interi avrà la metà delle dimensioni se tali numeri interi sono a 32 bit rispetto a se sono a 64 bit. Ciò significa che ci vorranno la metà dei byte per l'archiviazione, la metà dello spazio nella cache e così via.

I registri nativi a 64 bit e l'aritmetica vengono utilizzati dove i valori potrebbero non rientrare in 32 bit. Ma i principali vantaggi in termini di prestazioni derivano dai registri extra per uso generale disponibili nel set di istruzioni x86_64. E, naturalmente, ci sono tutti i vantaggi che derivano dai puntatori a 64 bit.

Quindi la vera risposta è che non importa. Anche se usi la modalità x86_64, puoi (e generalmente lo fai) usare ancora l'aritmetica a 32 bit dove andrà bene, e ottieni i vantaggi di puntatori più grandi e registri più generici. Quando usi operazioni native a 64 bit, è perché hai bisogno di operazioni a 64 bit e sai che saranno più veloci che fingere con più operazioni a 32 bit:la tua unica altra scelta. Pertanto, le prestazioni relative dei registri a 32 bit rispetto a 64 bit non dovrebbero mai essere un fattore decisivo in qualsiasi decisione di implementazione.


Mi sono appena imbattuto in questa domanda, ma penso che qui manchi un aspetto molto importante:se osservi davvero il codice assembly usando il tipo 'int' per gli indici probabilmente rallenterà il codice generato dal tuo compilatore. Questo perché 'int' l'impostazione predefinita è un tipo a 32 bit su molti compilatori e piattaforme a 64 bit (Visual Studio, GCC) e l'esecuzione di calcoli di indirizzi con puntatori (che sono necessariamente a 64 bit su un sistema operativo a 64 bit) e 'int' farà sì che il compilatore emetta conversioni non necessarie tra registri a 32 e 64 bit .L'ho appena sperimentato in un ciclo interno molto critico per le prestazioni del mio codice. Il passaggio da "int" a "long long" come indice di loop ha migliorato il tempo di esecuzione del mio algoritmo di circa il 10%, il che è stato un vantaggio enorme considerando l'ampia vettorizzazione SSE/AVX2 che stavo già utilizzando a quel punto.


Linux
  1. MySQL – Ottimizzazione e ottimizzazione delle prestazioni

  2. Linux:dovrei installare 32 o 64 bit?

  3. Lvm influisce sulle prestazioni?

  4. Come determinare se un determinato Linux è a 32 o 64 bit?

  5. Posso eseguire Ubuntu a 64 bit sul mio PC (> 10 anni)

Ubuntu 21.04 Scarica

Come sapere se hai un computer a 32 bit o 64 bit in Linux e Windows

Il tuo Ubuntu è un sistema operativo a 32 o 64 bit? [GUI + Terminale]

Linux:diagramma del kernel Linux vs. Strumenti per le prestazioni?

Come sapere se la versione a 32 bit o 64 bit di Linux

Ottimizzazione delle prestazioni di Nginx