Attenzione: questa è una domanda un po 'più complessa di quanto tu possa aver capito, e sicuramente più di quanto la maggior parte delle risposte abbia rappresentato. Per provare a coprire almeno un po 'di più la storia, questo post è piuttosto lungo ...
Prima di tutto, la situazione con la memoria video. L'intera memoria della scheda video non è (almeno normalmente) direttamente visibile nello spazio degli indirizzi della CPU. Di solito hai una "finestra" di circa 128-256 megabyte di memoria video visibile alla CPU. La GPU può mappare diverse parti della sua memoria su quella finestra, quindi in genere è possibile scrivere sulla maggior parte della memoria GPU dalla CPU, ma è necessario comunicare in anticipo alla GPU su cosa si intende scrivere prima di poterlo fare. Solo per esempio, quando usi DirectX e vuoi scrivere direttamente nella memoria grafica, puoi farlo - ma per farlo, inizi chiamando chiamando LockRect
la GPU per mappare la memoria giusta nella finestra (e come appena hai finito, chiamiUnlockRect
in modo che possa mappare altra memoria secondo necessità). Almeno nel caso tipico, è possibile regolare le dimensioni della finestra video nella configurazione del BIOS.
In secondo luogo, anche nella modalità a 32 bit i processori x86 supportano ciò che viene chiamato Physical Address Extensions (PAE), che consente alla CPU di gestire più di 4 Gig. di memoria. Microsoft supporta PAE in alcune versioni di Windows, ma solo la relativamente costosa Enterprise Edition di Windows Server. Inoltre, il programma deve essere scritto appositamente per utilizzare AWE. Esistono solo pochi programmi (ad esempio SQL Server Enterprise Edition) che lo hanno mai fatto. In conclusione: è possibile, ma abbastanza raro.
Per quanto riguarda la lettura a 64 bit alla volta: l'ultimo processore a leggere i dati a soli 32 bit alla volta era il 486. A partire dal Pentium, tutti i processori avevano bus dati a 64 bit. Si noti che il bus degli indirizzi non è lo stesso del bus dati, quindi l'espansione su un bus dati a 64 bit non ha permesso al processore di lavorare con più memoria (anche se, come accade, PAE è stato aggiunto in Pentium Pro, quindi era quasi in concomitanza con l'espansione su un bus dati a 64 bit).
Anche se il Pentium poteva leggere 64 bit di dati in un singolo ciclo di clock, internamente (principalmente) elaborava i dati a 32 bit alla volta. Il bus più ampio ha contribuito principalmente a compensare la differenza di velocità tra CPU e memoria principale. Le istruzioni MMX di Pentium MMX supportavano l'elaborazione dei dati in blocchi a 64 bit, ma era piuttosto maldestro da usare e (in particolare) la maggior parte dei compilatori non generava il codice MMX, quindi praticamente dovevi scrivere in linguaggio assembly per usarlo . Il Pentium supportava anche operazioni a 64 bit (e 80 bit) per i numeri in virgola mobile, ma viene utilizzato solo per una minoranza abbastanza piccola della maggior parte della programmazione (ed era generalmente più lento rispetto al lavorare con numeri interi).
Il design x86-64 ha il doppio dei registri di uso generale rispetto al design x86 a 32 bit e ciascuno di questi registri ha una larghezza di 64 bit. Quando la CPU funziona in modalità a 32 bit, tuttavia, è utilizzabile solo il sottoinsieme dei registri esistenti nelle CPU a 32 bit.
Tornando per un momento in virgola mobile, in modalità a 32 bit, la matematica in virgola mobile viene eseguita utilizzando il set di istruzioni originariamente progettato per il coprocessore matematico Intel 8087. Questo utilizza un modello che rende abbastanza difficile sfruttare appieno le sue capacità. Intel (e AMD) hanno recentemente aggiunto "Streaming SIMD Extensions" o SSE. La maggior parte dei compilatori a 64 bit genera codice che può / utilizza SSE invece di virgola mobile compatibile con 8087. "SIMD" in SSE sta per "istruzione singola, dati multipli". Ciò significa che uno SSE può effettuare due operazioni in virgola mobile su due pezzi separati di dati. Sebbene questo non necessariamente raddoppi la velocità, di solito migliora la velocità almeno un po '.
Infine, dovrei probabilmente sottolineare che c'è una parte del confronto che è generalmente un po 'ingiusto. Quando installi un nuovo sistema operativo, è quasi sempre un po 'più veloce di un sistema operativo in uso da un po' di tempo. I programmi memorizzano i dati nel registro, sul disco rigido, ecc. Più dati aggiungi, più lavoro tende a essere coinvolto nella ricerca dei dati desiderati in un determinato momento. Mentre le aziende che vendono "pulitori di registro" e che spesso esagerano questo effetto, è comunque vero in una certa misura. Pertanto, se tutto ciò che hai fatto è stato riformattare il tuo disco rigido e reinstallare esattamente lo stesso sistema operativo, potresti aspettarti un miglioramento della velocità e se il vecchio sistema operativo è stato installato e utilizzato pesantemente per lungo tempo , quel miglioramento (tutto da solo) puòessere piuttosto sostanziale. Almeno una parte del miglioramento della velocità che stai vedendo potrebbe essere indipendente da qualsiasi reale differenza tra i due sistemi operativi.
C'è di più, ovviamente, ma inizi a prendere l'idea. Non si tratta tanto di una singola funzione che fa un'enorme differenza, quanto di molte caratteristiche che di solito fanno differenze abbastanza piccole individualmente, ma molte di esse si sommano (o addirittura si moltiplicano) per fare una differenza abbastanza sostanziale nel complesso.