Domanda

Non sono sicuro di capirlo correttamente: un sistema operativo a 64 bit esegue / compila il codice più velocemente di un sistema operativo a 32 bit sullo stesso sistema?

Stiamo utilizzando sistemi operativi a 64 bit dove mi trovo e sembra causare solo problemi di compatibilità con software legacy e proprietari. (Stiamo eseguendo Ubuntu 9.04 Jaunty amd64)

È stato utile?

Soluzione

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

A livello di processore, ci sono alcuni vantaggi. Il primo e più ovvio è l'espansione della memoria virtuale per processo a un intervallo molto più ampio di 48 bit. (64 è consentito nell'architettura ma non richiesto, se la memoria serve.) Ciò consente alle applicazioni di utilizzare molta più memoria di sistema disponibile per loro, nonché di aprire molto spazio per cose come i file mappati sulla memoria che operano su memoria virtuale non collegata alla memoria reale. Inoltre apre molto spazio per far funzionare il sistema operativo in questione, poiché non deve condividere il limite di 4 GB per i suoi dati. In breve, le applicazioni e il sistema operativo possono sfruttare meglio le risorse della macchina.

Inoltre, l'architettura AMD64 risolve uno dei maggiori problemi di IA-32, che è la totale mancanza di registri. In realtà raddoppia i registri disponibili, il che è una grande vittoria per alcuni tipi di codice. (In realtà è una vittoria per quasi QUALSIASI codice, ma alcune applicazioni soffrono dell'aumento del costo della memoria di 64 bit e risulta uniforme.)

Sul lato Windows, MS ha colto l'occasione per rompere un sacco di problemi storici di compatibilità. Non è una pausa netta dal vecchio mondo, ma è un inizio. Non credo che Linux soffra degli stessi problemi all'inizio, e non ho molte prospettive da offrire sui loro vantaggi a 64 bit.

Altri suggerimenti

Come regola generale, lo sviluppo - o l'utilizzo - di un sistema operativo a 64 bit, in qualsiasi contesto, sarà più lento rispetto allo stesso sistema operativo a 32 bit. Poiché tutti i puntatori sono improvvisamente due volte più grandi, è molto più probabile che si verifichi l'espansione della cache e si possano adattare meno dati nella RAM. Ciò rallenta notevolmente l'applicazione. Normalmente useresti sistemi a 64 bit solo quando le tue applicazioni devono indirizzare contemporaneamente più di 2 o 3 GB di dati - qualcosa di molto comune nel calcolo scientifico e in alcune situazioni di database, ma per il resto estremamente raro. Questo è il motivo per cui Apple non sostiene la compilazione incondizionata di applicazioni PowerPC in modalità 64 bit, ad esempio: i costi dovuti a mancati cache e mancanza di memoria sono abbastanza alti che andare a 64 bit ha senso solo quando si può davvero trarre vantaggio dal Spazio a 64 bit.

Ma x86 v. AMD64, che è ciò di cui stai veramente chiedendo (dato 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ù amichevole con i moderni design della CPU e altro ancora. Per questo motivo, solo su piattaforme AMD64 , vedrai spesso un notevole aumento delle prestazioni andando a 64 bit.

C'è un'altra area in cui, nello sviluppo di software, ha senso passare a 64 bit: è necessario eseguire molte macchine virtuali. L'esecuzione di un paio di VM può facilmente farti passare oltre la barriera di memoria da 3 GB del sistema operativo, rendendola molto dolorosa. (Funzionerà a causa di una tecnologia chiamata PAE, o Paged 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 con cui lavorare come sviluppatore, e non molto ben supportato su Windows.) Passare a un sistema operativo a 64 bit può offrire enormi vantaggi.

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

La risposta è: varia, per alcuni motivi:

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

  • Ma a volte istruzioni più grandi potrebbero richiedere più cicli per decodificare ed eseguire, perché potrebbero essere più complesse. Quindi un possibile --64 bit qui.

  • Inoltre, è necessario trasferire queste istruzioni da e verso la CPU: le istruzioni a 64 bit sono due volte più grandi delle istruzioni a 32 bit, il che significa più traffico da e verso la memoria e le cache. Le CPU sono strutturate per migliorare gran parte di questo costo, ma è un leggero --64 bit qui.

  • Di solito sono disponibili più registri in set di istruzioni più ampi, che causano meno traffico di dati da e verso lo stack e / o la memoria. Quindi ++ 64 bit qui.

  • E come tutti sicuramente hanno intenzione di menzionare, hai la possibilità di indirizzare più memoria.

  • (Quasi dimenticato questo) il nativo "long" o " int " la dimensione può aumentare, a seconda dell'architettura, il che significa che le strutture di dati basate su queste diventano più grandi. Più grande = più memoria per spostarsi, il che significa più possibilità di attesa per lo spostamento dei dati: --64 bit se non stai attento.

A seconda della tua architettura, potrebbero applicarsi anche molte altre preoccupazioni. Puoi essere certo che i produttori di processori e compilatori stanno lavorando per ridurre i "precedenti" e aumentare i "++".

Ho questo database da 5 GByte che deve essere convertito. Su un sistema a 64 bit, ho appena inserito 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 tempo di progettazione. Il passaggio a 64 bit consente di risparmiare settimane di tempo di sviluppo.

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

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

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

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

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

Anche NTFS-3g era divertente sotto i 64 bit, mentre funzionava sotto i 32 bit (stessa distribuzione, stesso kernel stessa partizione, in alcune circostanze era solo "bloccato")

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

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