2009-04-28 13 views
6

Non sono sicuro di averlo capito correttamente: un sistema operativo a 64 bit esegue/compila più velocemente di un sistema operativo a 32 bit sullo stesso sistema?C'è qualche vantaggio per lo sviluppo su un sistema operativo a 64 bit?

Usiamo sistemi operativi a 64 bit dove sono e sembra solo causare problemi di compatibilità con software legacy e proprietario. (Stiamo usando Ubuntu 9.04 Jaunty amd64)

risposta

18

Limiterò questa risposta a x86-32 (IA-32) vs x86-64 (AMD64), poiché credo che sia la domanda che stai effettivamente chiedendo.

A livello di processore, ci sono alcuni vantaggi. La prima e più ovvia è l'espansione della memoria virtuale per processo ad una gamma molto più ampia di 48 bit. (64 è consentito nell'architettura ma non è necessario, se la memoria serve.) Ciò consente alle applicazioni di utilizzare molta più memoria del sistema a loro disposizione, oltre ad aprire un sacco di spazio per cose come i file mappati in memoria che operano su memoria virtuale che non è collegata alla memoria reale. Inoltre, si apre un sacco di spazio per il sistema operativo in questione, in quanto non deve condividere il limite di 4 GB per i suoi dati. In breve, le applicazioni e il sistema operativo possono fare un uso migliore delle risorse della macchina.

Inoltre, l'architettura AMD64 risolve uno dei maggiori problemi di IA-32, che è l'assoluta mancanza di registri. In effetti raddoppia i registri disponibili, che è una grande vittoria per alcuni tipi di codice. (In realtà è una vittoria per quasi QUALSIASI codice, ma alcune applicazioni soffrono dell'elevato costo di memoria di 64 bit e si uniforma.)

Per quanto riguarda Windows, la SM ha preso l'opportunità di rompere un sacco di problemi di compatibilità storica. Non è una rottura netta dal vecchio mondo, ma è un inizio. Non credo che Linux soffra degli stessi problemi per cominciare, e non ho molte prospettive da offrire sui loro vantaggi a 64 bit.

1

Accelererà la compilazione se il tuo processo di compilazione è legato alla memoria e usi il tuo sistema operativo a 64 bit per aumentare la quantità di memoria utilizzabile dal tuo sistema.

6

(Come i commentatori notano, questa risposta è un po 'generica, alcuni di questi punti non si applicano ai Intel/AMD chip.)

La risposta è: esso varia, per un paio di motivi:

  • Con istruzioni di larghezza maggiore, si otterrà più espressività (una maggiore varietà di istruzioni o una maggiore capacità di codificare i dati direttamente in quelle istruzioni), che può significare un numero ridotto di istruzioni che fluiscono attraverso la macchina, che in genere è una vittoria: quindi + 64 bit qui.

  • Ma a volte le istruzioni più grandi potrebbero richiedere più cicli di decodifica ed esecuzione, perché potrebbero essere più complessi. Quindi un possibile - 64 bit qui.

  • Inoltre, è necessario trasferire queste istruzioni da e verso la CPU: le istruzioni a 64 bit sono il doppio delle istruzioni a 32 bit, il che significa più traffico da e verso la memoria e le cache. Le CPU sono strutturate in modo da migliorare molti di questi costi, ma qui c'è un leggero -64 bit.

  • Altri registri di solito sono disponibili in set di istruzioni più ampi, il che causa un minore traffico di dati verso e dallo stack e/o memoria. Quindi, 64bit qui.

  • E come tutti senza dubbio citano, si ha la capacità di indirizzare più memoria.

  • (Quasi dimenticato questo) le dimensioni native "long" o "int" potrebbero aumentare, a seconda dell'architettura, il che significa che le strutture dati basate su queste diventano più grandi. Più grande = più memoria da spostare, il che significa più possibilità di attesa nello spostamento dei dati: - 64 bit se non stai attento.

A seconda dell'architettura, possono essere applicate molte altre preoccupazioni. Potete stare tranquilli che i produttori di processori e compilatori stanno lavorando al massimo per ridurre i "-" sopra e aumentare i "++".

+3

Ovviamente nessuno dei primi tre punti influisce sui sistemi basati su x86, poiché x86 fornisce una codifica di istruzione a lunghezza variabile completa, con istruzioni comprese tra 1 e 17 byte. Potrebbe anche essere più di 17 al giorno d'oggi. – Promit

11

Come regola generale, lo sviluppo - o l'utilizzo - di un sistema operativo a 64 bit, in qualsiasi contesto, sarà più lento dello rispetto allo stesso sistema operativo a 32 bit. Poiché tutti i puntatori sono all'improvviso due volte più grandi, è molto più probabile che si verifichi il soffio della cache e si possano inserire meno dati nella RAM. Ciò rallenta notevolmente la tua applicazione. Normalmente utilizzeresti solo sistemi a 64 bit quando le tue applicazioni devono gestire contemporaneamente più di 2 o 3 GB di dati - una cosa molto comune nel calcolo scientifico e in alcune situazioni di database, ma per il resto estremamente rara. Ecco perché Apple non difende incondizionatamente la compilazione di applicazioni PowerPC in modalità 64 bit, ad esempio: il costo dovuto a carenze di cache e mancanza di memoria è abbastanza alto che l'andare a 64 bit ha senso solo quando si può veramente approfittare del Spazio a 64 bit.

Ma x86 v. AMD64, che è quello che stai veramente chiedendo (visto che stai discutendo di Ubuntu), è una bestia molto speciale. AMD64 non estende solo tutti i puntatori a 64-bit; risolve molte, molte carenze nell'architettura x86, raddoppiando il numero di GPR, semplificando le istruzioni per essere più amichevoli ai moderni progetti di CPU e altro ancora. Per questo motivo, su piattaforme AMD64 solo, si vedrà spesso un notevole incremento delle prestazioni andando a 64-bit.

C'è un'altra area in cui, nello sviluppo del software, ha senso passare a 64 bit: è necessario eseguire molte VM. L'esecuzione di un paio di VM può facilmente farti saltare oltre la barriera di memoria da 3 GB del sistema operativo, rendendo il loro utilizzo molto doloroso. (Funzionerà grazie a una tecnologia chiamata PAE, o Exted Addressing Extensions, che Intel ha inventato per colmare il divario tra sistemi a 32 bit e sistemi a 64 bit, ma il risultato è lento, doloroso da utilizzare come sviluppatore, e non molto ben supportato su Windows.) Passare a un sistema operativo a 64 bit può offrire enormi vantaggi.

+0

Questo riflette ciò che ho sentito da persone che misurano le prestazioni per i vivi. La dimensione extra dei puntatori e il minor numero di hit della cache influiscono davvero sulle prestazioni. C'è un piccolo ma evidente successo che esegue app a 64 bit. –

+3

Il limite è di 2-3 GB a seconda del sistema operativo, non 4. Ricordare che tutti i principali SO richiedono una porzione da 1 o 2 GB dalla parte superiore dello spazio virtuale per uso personale. Per quanto riguarda PowerPC, l'architettura Power ha alcuni strani bizzarri in modalità a 64 bit che rendono più veloce l'esecuzione in modalità a 32 bit. Non si tratta solo delle dimensioni dei puntatori. – Promit

+0

@Promit Ovviamente hai ragione sui confini; Ho risolto quelli. Ri. PowerPC, per quanto io sia d'accordo, l'architettura ha "stranezze", la situazione era simile su SPARC v. UltraSPARC e MIPS a 32 bit MIPS a 64 bit. L'inferno, andando dall'altra parte, è il motivo per cui ARM ha THUMB, MIPS ha MIPS16e e il SuperH Hitachi fa sorprendentemente bene: far saltare la cache fa davvero male. –

3

Ho questo database da 5 GB che richiede la conversione. Su un sistema a 64 bit, ho appena messo tutti i dati nelle raccolte. Nel sistema a 32 bit, ho dovuto pensare all'ordine in cui caricare e convertire. Il problema non è il tempo di esecuzione, è il momento dell'ingegneria. Passare a 64 bit consente di risparmiare settimane di tempo di sviluppo.

I problemi di compatibilità: non è un bug, questa è una funzionalità. Ti mostra chi ha scritto software pulito.

2

Ci sono anche alcuni vantaggi di sicurezza nell'utilizzo di sistemi operativi a 64 bit. Ci sono stati alcuni exploit di buffer overflow che aggirano la randomizzazione del layout dello spazio degli indirizzi da parte della forza bruta. Su un sistema operativo a 64 bit, ci sono semplicemente troppi indirizzi per questo tipo di attacco per avere successo.

1

Mi aspetto che sia leggermente più lento, ho avuto quell'esperienza con FC10. Non ho veri motivi, ma non è sicuramente il problema del sizeof (puntatore). (*)

La mia impressione è che si tratta semplicemente di driver meno ottimizzati o chipset ottimizzati.

NTFS-3G Inoltre era divertente sotto a 64 bit, mentre ha lavorato sotto a 32 bit (lo stesso distro, stesso kernel stessa partizione, è solo "appeso" in alcune circostanze)

(*) la maggior parte compilazione è vincolato al disco, non vincolato alla CPU. Inoltre ci sono altri miglioramenti nell'architettura x86_64 che annullano questo fatto (migliore PIC, più reg, default SSE2 attivo, 686 cmov predefinito). A meno che la tua app non faccia altro che spostare casualmente piccoli blocchi in giro.