Sistemi a 32 bit contro 64 bit


224

Quali sono le differenze tra i sistemi a 32 e 64 bit?

Se li hai usati entrambi, che tipo di forti differenze hai riscontrato?

In alcuni casi sarebbe un problema utilizzare programmi a 32 bit su sistemi a 64 bit?


Ci sono molte confusioni qui, e altrove sul web, tra indirizzamento fisico (accesso al ram) PEA influisce su questo, scheda madre influenza questo e indirizzamento logico (memoria virtuale per processo). Su un sistema operativo a 32 bit, la memoria virtuale è limitata a 4 GB meno ciò che il kernel riserva. È indipendente dalla RAM che potresti avere 0,1 MB o 8 GB di RAM e avresti esattamente 4 GB di memoria virtuale (ma alcuni riservati dal kernel). PEA può essere usato per avere più RAM, ma non è una risposta perfetta poiché il kernel NON PU CAN accedere a tutto.
ctrl-alt-delor,

Risposte:


264

Nota: queste risposte si applicano alle CPU standard basate su x86 (Intel e AMD) e Windows (normalmente configurate per gli utenti finali). Altri chip a 32 o 64 bit, altri sistemi operativi e altre configurazioni del sistema operativo possono avere diversi compromessi.

Da un punto di vista tecnico, un sistema operativo a 64 bit offre:

  • Consente ai singoli processi di indirizzare più di 4 GB di RAM ciascuno (in pratica, la maggior parte ma non tutti i sistemi operativi a 32 bit limitano anche la RAM totale del sistema utilizzabile a meno di 4 GB, non solo il massimo per applicazione).

  • Tutti i puntatori richiedono 8 byte anziché 4 byte. L'effetto sull'utilizzo della RAM è minimo (perché è probabile che non si abbia un'applicazione riempita con gigabyte di puntatori), ma nel peggiore dei casi teorici, ciò può rendere la cache della CPU in grado di contenere 1/2 del numero di puntatori (rendendo è effettivamente 1/2 della dimensione). Per la maggior parte delle applicazioni, questo non è un grosso problema.

  • Esistono molti più registri CPU per scopi generici in modalità 64 bit. I registri sono la memoria più veloce dell'intero sistema. Esistono solo 8 in modalità 32 bit e 16 registri di uso generale in modalità 64 bit. Nelle applicazioni di informatica scientifica che ho scritto, ho visto un aumento delle prestazioni fino al 30% ricompilando in modalità a 64 bit (la mia applicazione potrebbe davvero utilizzare i registri extra).

  • La maggior parte dei sistemi operativi a 32 bit consente alle singole applicazioni di utilizzare solo 2 GB di RAM, anche se ne sono installati 4. Questo perché gli altri 2 GB di spazio degli indirizzi sono riservati per la condivisione di dati tra applicazioni, con il sistema operativo e per la comunicazione con i driver. Windows e Linux ti permetteranno di adattare questo compromesso a 3 GB per le applicazioni e 1 GB condivisi, ma ciò può causare problemi per alcune applicazioni che non prevedono il cambiamento. Suppongo anche che potrebbe paralizzare una scheda grafica con 1 GB di RAM (ma non ne sono sicuro). Un sistema operativo a 64 bit può avvicinare le singole applicazioni a 32 bit ai 4 GB completi con cui giocare.

Dal punto di vista di un utente:

  • La velocità dell'applicazione è in genere maggiore per un'applicazione a 64 bit in un sistema operativo a 64 bit rispetto alla versione a 32 bit dell'applicazione su un sistema operativo a 32 bit, ma la maggior parte degli utenti non vedrà questo accelerazione. La maggior parte delle applicazioni per utenti normali non sfrutta realmente i registri extra o i vantaggi sono bilanciati da puntatori più grandi che riempiono la cache.

  • Se disponi di applicazioni di memoria (come editor di foto, elaborazione video, elaborazione scientifica, ecc.), Se hai (o puoi acquistare) più di 3 GB di RAM e puoi ottenere una versione a 64 bit dell'applicazione, la scelta è semplice: utilizzare il sistema operativo a 64 bit.

  • Alcuni componenti hardware non dispongono di driver a 64 bit. Controlla la scheda madre, tutte le schede plug-in e tutti i dispositivi USB prima di effettuare il passaggio. Si noti che agli inizi di Windows Vista c'erano molti problemi con i driver. In questi giorni le cose sono generalmente migliori.

  • Se esegui così tante applicazioni alla volta che stai esaurendo la RAM (di solito puoi dirlo perché il tuo computer inizia a diventare molto lento e senti lo scricchiolio del disco rigido), allora vorrai un sistema operativo a 64 bit (e RAM sufficiente).

  • È possibile eseguire applicazioni a 32 bit (ma non driver) in Windows a 64 bit senza problemi. Il peggior rallentamento che ho misurato per un'applicazione a 32 bit in Windows a 64 bit è di circa il 5% (il che significa che se ci sono voluti 60 secondi per fare qualcosa in Windows a 32 bit, ci sarebbero voluti al massimo 60 * 1,05 = 65 secondi con la stessa applicazione a 32 bit in Windows a 64 bit).

Cosa non implica 32-bit vs. 64-bit :

Sui sistemi x86, 32 bit contro 64 bit si riferiscono direttamente alla dimensione dei puntatori. È tutto.

  • Non si riferisce alla dimensione del inttipo C. Questo è deciso dalla particolare implementazione del compilatore e la maggior parte dei compilatori popolari sceglie 32 bit intsu sistemi a 64 bit.

  • Non si riferisce direttamente alla dimensione dei normali registri senza puntatore. Tuttavia, l'utilizzo di registri aritmetici a 64 bit richiede che l'applicazione e il sistema operativo siano eseguiti anche in modalità puntatore a 64 bit.

  • Non si riferisce direttamente alla dimensione del bus dell'indirizzo fisico. Ad esempio, un sistema con linee di cache a 64 bit e un massimo di 512GiB di memoria necessita solo di 33 bit nel suo bus degli indirizzi (ad es log2(512*1024**3) - log2(64) = 33.).

  • Non si riferisce alla dimensione del bus di dati fisici: è più correlato ai costi di produzione (numero di pin nel socket della CPU) e alle dimensioni della linea della cache.


8
Ottima risposta Soprattutto perché hai notato che in realtà non esiste un limite di 4 GB di RAM, ma un limite di utilizzo della memoria di processo. Solo per tua informazione, penso che dovresti dare un'occhiata a questo link: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Breakthrough

8
Sono applicazioni che non funzionano su Windows a 64 bit: applicazioni a 16 bit / quelle che usano driver in modalità kernel a 32 bit o senza segno. È molto per un
drogato di

1
@flextendu, dati i requisiti prestazionali di quei vecchi programmi, potresti quasi certamente eseguirli in una macchina virtuale. Con VMware Player, Virtual PC e Virtual Box disponibili, non c'è motivo di non provarne uno, se si dispone di una licenza Windows a 32 bit. Se non vuoi fare confusione, probabilmente funzioneranno anche in "Modalità Windows XP".
Mark Booth,

6
A proposito, le applicazioni a 32 bit non useranno più di 2 GiB di RAM a meno che non sia abilitato un flag specifico nel loro manifest. Fonte: blogs.technet.com/b/markrussinovich/archive/2008/11/17/…
Hello71,

Sì, sono sicuro che Hello71 abbia colpito qualcosa di piuttosto importante che non è trattato qui: la maggior parte delle app a 32 bit non sfrutterà mai direttamente la RAM aggiuntiva. Penso che valga la pena menzionarlo, no?
Django Reinhardt,

107

Fondamentalmente puoi fare tutto su una scala più grande:

  1. RAM per sistema operativo: limite RAM di 4 GB su x86 per il sistema operativo (il più delle volte)
  2. RAM per processo: limite di RAM di 4 GB su x86 per i processi (sempre). Se ritieni che ciò non sia importante, prova a eseguire un'enorme applicazione intensiva di database MSSQL. Utilizzerà> 4 GB se ne hai a disposizione e funzionerà molto meglio.
  3. Indirizzi: gli indirizzi sono 64 bit anziché 32 bit, consentendo di avere programmi "più grandi" che utilizzano più memoria.
  4. Maniglie disponibili per i programmi: puoi creare più handle di file, processi, ... Esempio su Windows x64 puoi creare> 2000 thread per processo, ma su x86 più vicino a qualche centinaio.
  5. Programmi più ampi disponibili: da un x64 è possibile eseguire sia programmi x86 che x64. (Esempio windows: wow64, windows32 sull'emulazione windows64)
  6. Opzioni di emulazione: da un x64 è possibile eseguire macchine virtuali x86 e x64.
  7. Più veloce: alcuni calcoli sono più veloci su una CPU a 64 bit
  8. Divisione di più risorse di sistema: molta memoria RAM è molto importante quando si desidera eseguire almeno una macchina virtuale che divide le risorse di sistema.
  9. Programmi esclusivi disponibili: diversi nuovi programmi supportano solo x64. Esempio di scambio 2007.
  10. Futuro obsoleto x86 ?: Nel tempo verranno utilizzati sempre più 64 bit e sempre più x86 non verranno utilizzati. Quindi i fornitori supporteranno solo a 64 bit sempre di più.

I 2 grandi tipi di architetture a 64 bit sono architetture x64 e IA64. Ma x64 è di gran lunga il più popolare.

x64 può eseguire comandi x86 e comandi x64. Anche IA64 esegue i comandi x86, ma non le estensioni SSE. C'è hardware dedicato su Itanium per l'esecuzione delle istruzioni x86; è un emulatore, ma in hardware.

Come accennato da @Phil, puoi avere uno sguardo più approfondito su come funziona qui .


1
Um. IA64 esegue i comandi x86. Tuttavia, non esegue estensioni SSE. C'è hardware dedicato su Itanium per l'esecuzione delle istruzioni x86; è un emulatore, ma in hardware.
tzot

2
Qualche anno fa, Raymond Chen ha pubblicato sul thread "limite" del 2000, ed è più o meno una leggenda metropolitana
bk1e

Voto per Arstechnica per la loro spiegazione.
Avihu Turzion,

2
Il limite di RAM di 4 GB non è del tutto vero (è piuttosto un limite artificiale applicato ai sistemi Windows degli utenti domestici), controlla PAE . Con la maggior parte dell'hardware aggiornato, un kernel PAE Linux (che è quello che viene utilizzato per impostazione predefinita per 32 bit) può indirizzare ben oltre 4 GB. Lo stesso vale per FreeBSD e NetBSD.
Izzy,

I sistemi a 32 bit non possono utilizzare più di 4 GB (1o punto) a causa di questi "indirizzi" (3o punto). Perché il numero più alto a 32 bit è 4.294.967.296 (= 4 GB). Quindi il tuo 1 ° e 3 ° punto sono gli stessi. È possibile rimuovere il 3o puntino. :)
Jet

46

Il maggiore impatto che le persone noteranno al momento è che un PC a 32 bit può indirizzare solo un massimo di 4 GB di memoria. Quando togli la memoria allocata per altri usi dal sistema operativo, il tuo PC probabilmente mostrerà solo circa 3,25 GB di memoria utilizzabile. Passa a 64 bit e questo limite scompare.

Se stai facendo uno sviluppo serio, questo potrebbe essere molto importante. Prova a eseguire diverse macchine virtuali e presto esaurisci la memoria. È più probabile che i server necessitino di memoria aggiuntiva e quindi scoprirai che l'utilizzo a 64 bit è molto maggiore sui server rispetto ai desktop. La legge di Moore assicura che avremo sempre più memoria sulle macchine e quindi a un certo punto i desktop passeranno anche a 64 bit come standard.

Per una descrizione molto più dettagliata delle differenze del processore, consulta questo eccellente articolo di ArsTechnica .


7
La piattaforma a 32 bit e la limitazione di 4 GB è in qualche modo un termine improprio ed è (era) principalmente un limite di scelta / progettazione dell'architettura del sistema operativo. In realtà, i 4 GB da 32 bit sono davvero al limite in uno spazio VA di processo. L'indirizzo fisico supporta 36 bit su CPU Intel a 32 bit
Tall Jeff,

1
Fai un buon punto che è certamente vero. Ma l'impatto nel mondo reale degli utenti di PC è che la macchina non utilizzerà i 4 GB completi per i quali ha pagato. Mio padre ha avuto questo problema ed è ancora confuso che i 4GB che ha pagato non possano essere utilizzati completamente.

2
Apprezzo il tuo punto, ma sto solo cercando di guidare l'idea che la correzione non sia nel processore o andare a 64 bit, è solo una questione di un design del sistema operativo leggermente migliorato. Questo viene risolto, ad esempio, nelle versioni enterprise di Windows anche nelle versioni a 32 bit. Permette 64 GB di RAM.
Tall Jeff,

Tecnicamente, il limite non scompare. Si sposta oltre dove è impossibile / impossibile installare tanta RAM su una macchina in qualsiasi momento nel prossimo decennio o giù di lì.

Vedi la mia osservazione su PAE sopra: il limite di 4 GB non è vero per l'intero sistema - ma si applica solo a singoli processi (nessun processo può accedere a 4 GB e oltre se stesso) ma l'intero sistema, vale a dire tutti i processi insieme, può con PAE abilitato ). Quindi, a meno che non si disponga di applicazioni che traggono profitto dalla possibilità di accedere a 4 GB e oltre (come editor video / convertitori con file video di grandi dimensioni) e 8 GB + installati, non dovrebbe fare molta differenza se si utilizza 32 bit o 64 bit.
Izzy,

31

Niente è gratuito: sebbene le applicazioni a 64 bit possano accedere a più memoria rispetto alle applicazioni a 32 bit, il rovescio della medaglia è che hanno bisogno di più memoria. Tutti quei puntatori che prima necessitavano di 4 byte, ora ne hanno bisogno 8. Ad esempio, il requisito predefinito in Emacs è il 60% in più di memoria quando è costruito per un'architettura a 64 bit. Questo footprint aggiuntivo compromette le prestazioni a tutti i livelli della gerarchia di memoria: eseguibili più grandi impiegano più tempo a caricarsi dal disco, set di lavoro più grandi causano più paging e oggetti più grandi significano meno adattamenti nelle cache del processore. Se si pensa a una CPU con una cache L1 16K, un'applicazione a 32 bit può funzionare con 4096 puntatori prima di perdere e passare alla cache L2 ma un'applicazione a 64 bit deve raggiungere la cache L2 dopo soli 2048 puntatori.

Su x64 questo è mitigato dagli altri miglioramenti dell'architettura come altri registri, ma su PowerPC se la tua applicazione non può usare> 4G è probabile che funzioni più velocemente su "ppc" rispetto a "ppc64". Anche su Intel ci sono carichi di lavoro che funzionano più velocemente su x86 e pochi funzionano più del 5% più velocemente su x64 rispetto a x86.


2
Questa risposta suggerisce che PowerPC64 non è buono come x86-64. La verità è che powerpc64 non ha migliorato powerpc, in quanto powerpc non è stato interrotto.
ctrl-alt-delor,

3
Linux ora ha un ABI x32, con tutti i vantaggi di velocità di x86-64 (più registri, ABI ridisegnato), ma con puntatori a 32 bit. +1 per indicare che i vantaggi della modalità 64 bit non derivano dall'aumento della larghezza effettiva, ma dalla possibilità di rilasciare gran parte del bagaglio che tratteneva l'architettura. I reg a 64 bit hanno valore per alcune applicazioni, ma lo spazio del puntatore a 64 bit è meno frequente.
Peter Cordes,

19

Un sistema operativo a 64 bit può utilizzare più RAM. Questo è tutto, in pratica. 64 bit Vista / 7 utilizzano funzionalità di sicurezza più elaborate per il luogo in cui inseriscono componenti vitali nella RAM, ma ciò non è realmente "evidente" in quanto tale.

Da ChrisInEdmonton:

Un sistema operativo a 32 bit su un sistema ix86 con PAE può indirizzare fino a 64 GB di RAM. Un sistema operativo a 64 bit su x86-64 può accedere fino a 256 TB di spazio di indirizzi virtuali, sebbene ciò possa essere aumentato nei processori successivi, fino a 16 EB. Si noti che alcuni sistemi operativi limitano ulteriormente lo spazio degli indirizzi e la maggior parte delle schede madri avrà ulteriori restrizioni.


4
Per un sistema operativo, SOLO a 32 bit contro 64 bit si riferisce alla dimensione dei puntatori (di cui parla correttamente il primo paragrafo). -1: alcuni sistemi operativi scelgono di bloccare la dimensione intera predefinita alla dimensione del puntatore, ma né Windows né Linux lo fanno. La precisione matematica dell'intero è invariata. NESSUN sistema operativo ampiamente utilizzato modifica la precisione in virgola mobile (ciò che afferma il secondo paragrafo). "float" o "single" è a 32 bit, "double" è a 64 bit, indipendentemente dal fatto che il sistema operativo utilizzi puntatori a 32 o 64 bit.
Fooz,

Ah, mi sbagliavo chiaramente, grazie per
averlo chiarito

Nessun problema. -1 -> +1
Mr Fooz,

Potrebbe valere la pena modificare la risposta per indicare quanta RAM è possibile accedere. Un sistema operativo a 32 bit su un sistema ix86 con PAE può indirizzare fino a 64 GB di RAM. Un sistema operativo a 64 bit su x86-64 può accedere fino a 256 TB di spazio di indirizzi virtuali, sebbene ciò possa essere aumentato nei processori successivi, fino a 16 EB. Si noti che alcuni sistemi operativi limitano ulteriormente lo spazio degli indirizzi e la maggior parte delle schede madri avrà ulteriori restrizioni.
ChrisInEdmonton,

Volevo mantenerlo semplice, poiché i numeri sono per lo più abbastanza alti da essere irrilevanti al momento, ma non può far male attaccarli adesso.
Phoshi,

14

Non sono sicuro di poter rispondere a tutte le tue domande senza scrivere un intero saggio (c'è sempre Google ...), ma non è necessario progettare le tue app in modo diverso per 64 bit. Immagino che ciò a cui si fa riferimento sia che devi tenere conto di cose come le dimensioni del puntatore non hanno più le stesse dimensioni degli ints. E hai un sacco di potenziali problemi con ipotesi integrate su alcuni tipi di dati lunghi quattro byte che potrebbero non essere più veri.

Questo probabilmente farà scattare qualsiasi cosa nella tua applicazione - tutto, dal salvataggio / caricamento da file, iterazione attraverso i dati, allineamento dei dati, fino alle operazioni bit a bit sui dati. Se hai una base di codice esistente che stai tentando di eseguire il porting o lavori su entrambi, è probabile che avrai un sacco di piccoli problemi da superare.

Penso che questo sia un problema di implementazione, piuttosto che di progettazione. Cioè penso che il "design" di dire, un pacchetto di fotoritocco sarà lo stesso qualunque sia il formato delle parole. Scriviamo codice che viene compilato per entrambe le versioni a 32 e 64 bit, e il design certamente non differisce tra i due: è la stessa base di codice.

Il "grosso problema" fondamentale su 64 bit è che si ottiene l'accesso a uno spazio di indirizzi di memoria molto più grande di 32 bit. Ciò significa che puoi davvero scaricare più di 4 GB di memoria nel tuo computer e farlo davvero fare la differenza.

Sono sicuro che altre risposte andranno nei dettagli e benefici più di me.

In termini di rilevamento della differenza, quindi programmaticamente basta controllare la dimensione di un puntatore (es. Sizeof (void *)). La risposta di 4 indica i suoi 32 bit e 8 indica che si sta eseguendo in un ambiente a 64 bit.


4
Se scrivi programmi che presumono casualmente che determinati tipi di puntatori abbiano le stesse dimensioni di alcuni tipi integrali, lo farai in modo lungo. Questo è vero da molto tempo.
David Thornley,

@ David: hai assolutamente ragione. Sfortunatamente, c'è un sacco di codice là fuori che fa esattamente questo.

10

Un processo a 32 bit ha uno spazio di indirizzi virtuali di 4 GB; questo potrebbe essere troppo piccolo per alcune app. Un'app a 64 bit ha uno spazio di indirizzi praticamente illimitato (ovviamente è limitato, ma molto probabilmente non raggiungerai questo limite).

Su OSX ci sono altri vantaggi. Vedi l' articolo seguente , perché l'esecuzione del kernel nello spazio degli indirizzi a 64 bit (indipendentemente dal fatto che l'app esegua 64 o 32) o l'esecuzione dell'app nello spazio degli indirizzi a 64 bit (mentre il kernel è ancora a 32 bit) porta a prestazioni molto migliori. Riassumendo: se uno è 64 bit (kernel o app, o entrambi ovviamente), il TLB ("translation lookaside buffer") non deve essere svuotato ogni volta che si passa dal kernel per usare spazio e ritorno (che accelererà accesso RAM).

Inoltre si ottengono miglioramenti delle prestazioni quando si lavora con variabili "long long int" (variabili a 64 bit come uint64_t). Una CPU a 32 bit può aggiungere / dividere / sottrarre / moltiplicare due valori a 64 bit, ma non in una singola operazione hardware. Invece deve dividere questa operazione in due (o più) operazioni a 32 bit. Quindi un'app che funziona molto con numeri a 64 bit avrà un guadagno di velocità di poter fare matematica a 64 bit direttamente nell'hardware.

Infine, ma non meno importante, l'architettura x86-64 offre più registri rispetto alle architetture x86 classiche. Lavorare con i registri è molto più veloce di lavorare con la RAM e più registri ha la CPU, meno spesso è necessario scambiare i valori dei registri nella RAM e tornare ai registri.

Per scoprire se la tua CPU può funzionare in modalità 64 Bit, puoi guardare varie variabili sysctl. Ad esempio, aprire un terminale e digitare

sysctl machdep.cpu.extfeatures

Se elenca EM64T, la CPU supporta lo spazio degli indirizzi a 64 bit secondo lo standard x86-64. Puoi anche cercare

sysctl hw.optional.x86_64

Se dice 1 (vero / abilitato), la tua CPU supporta la modalità bit x86-64, se dice 0 (falso / disabilitato), non lo fa. Se l'impostazione non viene trovata affatto, considerarla falsa.

Nota: puoi anche recuperare variabili sysctl da un'app C nativa, non è necessario utilizzare lo strumento da riga di comando. Vedere

man 3 sysctl

errore: "machdep.cpu.extfeatures" è una chiave sconosciuta

Suppongo che non si chiami EM64T, inoltre, se non sei abbastanza sfortunato da avere informazioni.

9

Si noti che lo spazio degli indirizzi può essere utilizzato per più di (reale) memoria. Si può anche mappare in memoria file di grandi dimensioni, che possono migliorare le prestazioni in schemi di accesso più dispari perché entra in gioco la cache di livello VM a livello di blocco più potente ed efficiente. È anche più sicuro allocare blocchi di memoria di grandi dimensioni su 64 bit poiché l'heapmanager è inferiore probabilmente incontrerà la frammentazione dello spazio degli indirizzi che non gli permetterà di allocare un grande blocco.

Alcune delle cose dette in questo thread (come il raddoppio dei # registri) si applicano solo a x86-> x86_64, non a 64 bit in generale. Proprio come il fatto che in x86_64 uno garantito abbia SSE2, 686 codici operativi e un modo economico per fare PIC. Queste funzionalità non sono strettamente a 64 bit, ma riguardano il taglio dell'eredità e la correzione delle limitazioni note di x86

Inoltre abbastanza spesso le persone indicano il raddoppio dei registri come causa dell'accelerazione, mentre è più probabile l'uso predefinito di SSE2 che faccia il trucco (accelerando memcpy e funzioni simili). Se abiliti lo stesso set per x86 la differenza è molto più piccola. (*) (***)

Inoltre, tieni presente che spesso comporta una sanzione iniziale poiché la struttura media dei dati aumenterà semplicemente perché la dimensione di un puntatore è maggiore. Questo ha anche effetti cache, ma è più evidente nel fatto che il memcpy medio () (o qualunque sia l'equivalente per la copia di memoria nella tua lingua) richiederà più tempo. Questo è solo nell'ampiezza di qualche percento tra i due, ma anche gli speedups sopra citati sono di tale entità.

Di solito l'overhead di allineamento è anche maggiore sulle architetture a 64 bit (i record precedentemente a 32 bit diventano spesso solo un mix di valori a 32 e 64 bit), facendo esplodere ancora di più le strutture.

Nel complesso, i miei semplici test indicano che si annulleranno all'incirca l'un l'altro, se i driver e le librerie di runtime si sono completamente adattati, senza alcuna differenza di velocità significativa per l'app media. Tuttavia, alcune app possono improvvisamente diventare più veloci (ad esempio quando dipendono da AES) o più lente (la struttura di dati cruciale viene costantemente spostata / scansionata / percorsa e contiene molti puntatori). I test erano su Windows, quindi l'ottimizzazione dei PIC non è stata valutata.

Si noti che la maggior parte dei linguaggi JIT-VM (Java, .NET) utilizza in media un numero significativamente maggiore di puntatori (internamente) rispetto ad esempio al C ++. Probabilmente il loro uso della memoria aumenta più che per il programma medio, ma non oso associarlo direttamente agli effetti di rallentamento (dal momento che sono bestie davvero complesse e funky e spesso difficili da prevedere senza misurare)

Per impostazione predefinita, Windows a 64 bit utilizza SSE2 per virgola mobile, il che sembra velocizzare operazioni semplici e rallentare operazioni complesse (sin, cos ecc.).

(*) un fatto poco noto è che il numero di registri SSE raddoppia anche in modalità 64 bit

(**) Il dottor Dobbs ha pubblicato un bell'articolo a riguardo qualche anno fa.


8

Oltre alle ovvie problematiche relative al memoryspace che la maggior parte delle persone menziona qui, penso che valga la pena di guardare l'idea di "broadword computing" di cui Knuth (tra gli altri) ha parlato recentemente. Ci sono molte efficienze da ottenere attraverso la manipolazione dei bit e le operazioni bit a bit su una parola a 64 bit vanno molto oltre rispetto a una parola a 32 bit. In breve, puoi fare più operazioni nei registri senza dover colpire la memoria e, dal punto di vista delle prestazioni, è una vittoria piuttosto grande.

Dai un'occhiata al volume 4, pre-fascicolo 1A per alcuni esempi dei trucchi interessanti di cui sto parlando.


7

Oltre alla capacità di indirizzare più memoria, x86_64 ha anche più registri che consentono al compilatore di generare codice più efficiente. Il miglioramento delle prestazioni sarà generalmente piuttosto piccolo però.

L'architettura x86_64 è retrocompatibile con x86. È possibile eseguire sistemi operativi non modificati a 32 bit. È anche possibile eseguire software non modificato a 32 bit da un sistema operativo a 64 bit. Ciò richiederà però tutte le solite librerie a 32 bit. Potrebbe essere necessario installarli separatamente.


Più registri e un ABI ridisegnato (passando la funzione args in register) di solito è uno speedup dal 10 al 15%, il che è abbastanza decente. Ora c'è un ABI Linux x32 con puntatori a 32 bit, ma usando la modalità lunga amd64 e le convenzioni di chiamata args-in-register. Quindi hai tutti i vantaggi di velocità di amd64, ma senza il sovraccarico di aver bisogno di 64 bit per ogni puntatore. È buono per tutto ciò che non richiede> 4 GB di memoria (virtuale).
Peter Cordes,

6

Questo thread è già troppo lungo, ma ...

La maggior parte delle risposte si concentra sul fatto che hai uno spazio di indirizzi più grande, a 64 bit, in modo da poter indirizzare più memoria. Per circa il 99% di tutte le applicazioni, questo è totalmente irrilevante. Grande urlo.

La vera ragione per cui 64 bit è buono non è che i registri sono più grandi, ma ce ne sono il doppio! Ciò significa che il compilatore può tenere un maggior numero di valori nel registro invece di riversarli in memoria e caricarli di nuovo in alcune istruzioni in seguito. Se e quando un compilatore di ottimizzazione sta svolgendo i tuoi loop per te, può srotolarli all'incirca il doppio, il che può davvero aiutare le prestazioni.

Inoltre, sono state definite le convenzioni del chiamante / chiamata di subroutine per 64 bit per mantenere la maggior parte dei parametri passati nei registri anziché il chiamante che li spinge sullo stack e la chiamata che li fa saltare.

Quindi un'applicazione "tipica" C / C ++ otterrà un miglioramento delle prestazioni di circa il 10% o il 15% semplicemente ricompilando per 64 bit. (Supponendo che una parte dell'app sia stata calcolata. Naturalmente, questo non è garantito; tutti i computer attendono alla stessa velocità. Il tuo chilometraggio può variare.)


Mentre il set di istruzioni è migliore per x64 rispetto a x86, questo in genere non è importante. Il codice a 64 bit può essere più lento di 32 bit, anche perché le istruzioni possono diventare più grandi, quindi meno di esse si adattano alla cache. (Svolgere i loop, BTW, è una tecnica molto discutibile al giorno d'oggi, poiché aumenterà il numero di errori nella cache.) Dove lavoro, abbiamo bisogno di 64 bit per aumentare l'indirizzamento della memoria.
David Thornley,

David, I set di istruzioni x64 e x86 sono quasi identici, ad eccezione della dimensione dell'operando e di alcuni prefissi di registro. Con IA64, alias Itanium alias Itanic, i codici a 64 bit sarebbero in genere 3 volte i codici x86 e sottolineano la cache delle istruzioni esattamente come dici tu. Questo è stato un grande fattore nel perché quell'architettura fallì miseramente. Ma con x86 aka AMD64 aka EM64T, la crescita del codice è in genere solo del 10-20%.

Sebbene x64 renda indirizzabili più registri , non sono sicuro di quanto effettivamente aumenti il ​​numero di registri fisici disponibili - tutti i recenti processori x86 hanno molti (> 100) registri "ombra" e usano "rinomina registro" + esecuzione speculativa per consentire l'esecuzione di percorsi di codice indipendenti in parallelo fino a un certo punto. In effetti, se sono in esecuzione n percorsi di codice indipendenti, n volte il numero di registri disponibili (fino all'esaurimento di tutti i registri ombra).

@j_random_hacker. Hai perfettamente ragione sul fatto che quei trucchi stanno succedendo sotto l'architettura. Ma indipendentemente dal numero di registri ombra disponibili, se il programma deve funzionare con più di 8 voci di dati e solo 8 registri sono esposti nel set di istruzioni, il compilatore deve generare le istruzioni di archiviazione / ricarica. Quindi sì, X64 rende davvero il doppio dei registri "disponibili"

La mia esperienza è che questo è molto meno ed è compensato dal fatto che l'avg memblock da spostare è più grande.
Marco van de Voort,

6

Oltre ai vantaggi già menzionati, qui ci sono alcuni altri aspetti relativi alla sicurezza:

  • x86_64 cpus ha il bit di non esecuzione nelle tabelle delle pagine. Cioè questo può prevenire gli exploit di sicurezza causati da sovraccarichi del buffer. Cpus x86 a 32 bit supporta questa funzione solo in modalità PAE.
  • Lo spazio di indirizzi più grande consente una migliore randomizzazione del layout dello spazio di indirizzi (ASLR) che rende più difficile lo sfruttamento dei sovraccarichi del buffer.
  • x86_64 cpus ha un codice indipendente dalla posizione, ovvero l'accesso ai dati relativo al registro puntatore istruzioni (RIP).

Un altro vantaggio che viene in mente è che la quantità di memoria contigua virtuale allocata vmalloc()nel kernel Linux può essere maggiore in modalità 64 bit.


5

Con una macchina a 32 bit hai solo 4.294.967.295 byte di memoria da indirizzare. Con una macchina a 64 bit hai 1.84467441 × 10 ^ 19 byte di memoria.

Wikipedia dice questo

I processori a 64 bit calcolano attività particolari (come fattoriali di grandi dimensioni) due volte più velocemente che lavorare in ambienti a 32 bit (l'esempio dato deriva dal confronto tra il calcolatore di Windows a 32 e 64 bit; si nota per fattoriale di 100.000 ). Questo dà una sensazione generale di possibilità teoriche di applicazioni ottimizzate a 64 bit.

Mentre le architetture a 64 bit rendono indiscutibilmente il lavoro con grandi set di dati in applicazioni come video digitali, elaborazione scientifica e grandi database, c'è stato un considerevole dibattito sul fatto che loro o le loro modalità di compatibilità a 32 bit saranno più veloci di quelle a prezzi comparabili Sistemi a 32 bit per altre attività. Nell'architettura x86-64 (AMD64), la maggior parte dei sistemi operativi e delle applicazioni a 32 bit è in grado di funzionare senza problemi sull'hardware a 64 bit.

Le macchine virtuali Java a 64 bit di Sun sono più lente da avviare rispetto alle loro macchine virtuali a 32 bit poiché Sun ha implementato solo il compilatore JIT "server" (C2) per piattaforme a 64 bit. [9] Il compilatore JIT "client" (C1), che produce codice meno efficiente ma si compila molto più velocemente, non è disponibile su piattaforme a 64 bit.

Va notato che la velocità non è l'unico fattore da considerare in un confronto tra processori a 32 e 64 bit. Applicazioni come multi-tasking, stress test e clustering (per il calcolo ad alte prestazioni), HPC, possono essere più adatte a un'architettura a 64 bit, data la corretta distribuzione. I cluster a 64 bit sono stati ampiamente implementati in grandi organizzazioni come IBM, HP e Microsoft, per questo motivo.


2
La lunghezza del bus dell'indirizzo fisico è indipendente dal fatto che si tratti di un processore a 32 o 64 bit. Alcuni processori a 32 bit hanno bus di indirizzo maggiori di 32 bit e nessun processore a 64 bit ha un bus di indirizzo a 64 bit.

1
Concordato. In teoria, lo spazio degli indirizzi è 2 ^ 64. In pratica, i produttori di CPU utilizzano valori più piccoli ... come 2 ^ 40 o 2 ^ 48.
Stu Thompson,

5

Citazione da Microsoft.com:

Nella tabella seguente, le maggiori risorse massime di computer basate su versioni a 64 bit di Windows e il processore Intel a 64 bit vengono confrontate con i massimi esistenti di risorse a 32 bit.

MS-Table


2
Interessante, ma vale la pena notare che alcune versioni di Windows a 32 bit consentono una maggiore memoria FISICA. Vedi ad esempio, en.wikipedia.org/wiki/…
ChrisInEdmonton,

@ChrisInEdmonton il sistema supporta più di 4 GB o memoria, ma l'indirizzo per ciascun processo è ancora limitato a 2 GB (3 GB con indirizzo di grandi dimensioni a conoscenza). Quindi, anche se il tuo sistema ha molta memoria, non aiuta ancora i programmi con memoria estesa e le prestazioni sono ancora in ritardo rispetto alla versione a 64 bit. Inoltre, ha un intervallo di indirizzi molto più piccolo per ASLR e file mappati in memoria
phuclv,

4

Kristof e Poshi hanno dichiarato le principali differenze tecniche tra i sistemi operativi a 32 e 64 bit. L'esperienza dell'utente è generalmente molto diversa dalla teoria. Le versioni consumer a 64 bit di Windows fino ad oggi (XP e Vista) presentano ampi buchi nel supporto del driver. Ho avuto molte stampanti, scanner e altri dispositivi esterni completamente non funzionanti con le versioni a 64 bit che funzionano bene con le versioni a 32 bit. Questi sono dispositivi con driver a 64 bit e non funzionerebbero ancora. A questo punto, ti consiglio di stare lontano da qualsiasi cosa basata sul consumatore che sia a 64 bit da Microsoft fino a quando non senti parlare di come Windows 7 gestisce questo, dagli utenti finali reali, non solo dagli utenti esperti che attualmente hanno accesso ad esso. Dagli almeno 6 mesi e guarda cosa stanno vivendo le persone.


Potrebbero esserci meno driver, ma non è poi così male come sembra. Ho eseguito 64 bit dal 2007 e non ho mai avuto difficoltà. Detto questo, non ho dispositivi oscuri o antichi collegati.
Roman,

1
La mia più recente con Vista 64 bit è stata una nuovissima stampante multifunzione HP appena il mese scorso su un sistema Dell di 2 mesi. Sia Dell che HP hanno rinunciato e il mio cliente mi ha pagato per installare XP Pro e liberarmi di Vista. Nulla di oscuro in nessuna delle due unità.
Kevin K,

1
In genere, se acquisti un computer con un sistema operativo a 64 bit, tutto funzionerà. Starei attento prima di provare ad aggiornare un computer più vecchio, o se avessi una stampante più vecchia, o se mi piaceva aggiornare da solo.
David Thornley,

L'hardware che vuole brandizzare Works con Windows o certificato per l'uso con i loghi di Windows deve offrire driver a 64 bit. Forse la prossima volta cercheremo. Ma in effetti, a volte i fornitori non si preoccupano dell'hardware di consumo poiché la maggior parte dei consumatori sarà probabilmente a 32 bit.
Joey,

2

Alcuni programmi di gioco usano una rappresentazione bitboard . Gli scacchi, le pedine e l'altello, ad esempio, hanno una scheda 8x8, cioè 64 quadrati, quindi avere almeno 64 bit in una parola macchina aiuta significativamente le prestazioni.

Ricordo di aver letto di un programma di scacchi la cui build a 64 bit era quasi due volte più veloce della versione a 32 bit.


2

Il termine 32-bit e 64-bit si riferisce al modo in cui un processore del computer (chiamato anche CPU), gestisce le informazioni. Le versioni a 64 bit di Windows gestiscono grandi quantità di memoria ad accesso casuale (RAM) in modo più efficace rispetto ai sistemi a 32 bit.

la velocità potrebbe essere diversa secondo me


1

Un altro punto a riguardo di Microsoft Windows è che per molti anni esiste l'API Win32 che è progettata per sistemi operativi a 32 bit e non è ottimizzata per la compilazione a 64 bit. Quando scrivo alcune DLL per le mie applicazioni, generalmente compilo in Win32 che non è la versione a 64 bit delle cose. Prima di Vista, non ci sono state molte versioni a 64 bit di successo di Windows, credo che dove lavoro la mia nuova macchina abbia 4 GB di RAM, ma sto ancora usando Windows XP Pro a 32 bit in quanto è un noto O / stabile S rispetto a XP64 o Vista.

Penso che potresti voler guardare indietro anche quando c'è stato il passaggio da 16 bit a 32 bit per ulteriori dettagli sul perché il passaggio potrebbe essere un grosso problema per alcune persone. Le applicazioni mission-critical che un'azienda può eseguire su un desktop, ad esempio piccoli pacchetti di contabilità, potrebbero non funzionare su un sistema operativo a 64 bit e quindi è necessario mantenere una macchina legacy, virtuale o reale.

La modifica della dimensione di un indirizzo può avere conseguenze e ripercussioni importanti.


1

Ai fini più pratici probabilmente non noterai alcuna differenza.

È necessario disporre di una CPU a 64 bit (la maggior parte delle CPU negli ultimi anni) per installare un sistema operativo a 64 bit.

I vantaggi di un sistema operativo a 64 bit sono alcuni:

  • Ti consentirà di eseguire più di 4 GB di RAM (il numero massimo che puoi indirizzare in un sistema operativo a 32 bit è 2 ^ 32 = 4 GB)
  • È utile per lavorare con set di dati di grandi dimensioni (ad es. In Excel) e per alcune attività di elaborazione intensiva (ad es. Photoshop e file di grandi dimensioni)
  • Puoi eseguire solo un programma a 64 bit su un sistema operativo a 64 bit, ma puoi eseguire un programma a 32 bit su entrambi (tieni presente che molti programmi arrivano come entrambi, quindi non ce ne sono troppi solo a 64 bit programmi).

Nella maggior parte degli scenari, i programmi a 64 bit utilizzano un po 'più di memoria, ma in genere per un personal computer questo non viene notato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.