2009-10-15 7 views
6

Voglio sapere le relative prestazioni di una normale applicazione C++ nei seguenti scenari:Come dovrebbe funzionare l'applicazione nelle architetture intel a 64 bit contro 32 bit?

  1. Costruito come a 32-bit app, eseguito su Intel a 64 bit del processore (x64-64)
  2. costruito come 32 -app, eseguire su processore Intel a 32 bit (x86)
  3. Costruito come app a 64 bit.

Inoltre, quali fattori dovrei prendere in considerazione quando si modifica/sviluppa l'applicazione per farlo funzionare più velocemente sui processori a 64 bit?

+0

Hmm. Votato senza commenti. Anche se questa non è una domanda molto preliminare, potrebbero esserci alcune informazioni interessanti qui. –

risposta

3

Le prestazioni dipendono molto probabilmente dall'applicazione e possono variare molto, a seconda che si utilizzino o meno librerie con ottimizzazioni per ambienti a 64 bit. Se vuoi contare sull'accelerazione, dovresti concentrarti sul miglioramento dei tuoi algoritmi, piuttosto che considerare l'architettura dell'insieme di istruzioni.

Per quanto riguarda la preparazione/sviluppo per 64-bit ... la cosa fondamentale è non fare ipotesi per quanto riguarda i tipi e le loro rispettive dimensioni. Se è necessario un tipo con una dimensione specifica, utilizzare i tipi definiti in < stdint.h >. Ogni volta che vedi le funzioni che usano size_t o ptrdiff_t, dovresti usare il typedef piuttosto che un altro tipo.

7

Risposta breve: probabilmente non noterete molta differenza.

Risposta più lunga: 64-bit x86 ha più registri generici, che offre al compilatore maggiori opportunità di ottimizzare le variabili locali nei registri per un accesso più rapido. il compilatore può anche assumere caratteristiche più moderne, ad es. non dovendo ottimizzare il codice per un 386, e può presumere che la tua CPU abbia roba come SSE invece della vecchia FPU x87 per la matematica a virgola mobile. ma i puntatori saranno due volte più larghi, il che è peggio per il cache.

+0

+1 per aver menzionato la lunghezza del puntatore. Questo può fare un'enorme differenza se si utilizzano strutture di puntatore grandi. – swegi

+0

È possibile ottenere alcune di queste ottimizzazioni del compilatore (SSE scalare, matematica mobile, ecc.) Anche nei build a 32 bit specificando alcune opzioni del compilatore, come/arch: SSE2. – Crashworks

+0

... o per gli utenti di gcc, qualcosa come '-march = core2 -msse2 -mfpmath = sse' – Tom

1

In generale, non troverete processori equivalenti che differiscono solo per il loro supporto per le operazioni a 64 bit, quindi sarà difficile fornire confronti concreti tra 1) e 2). D'altra parte, la differenza tra la costruzione per la modalità 32 e 64 bit dipende interamente dall'applicazione. Una versione a 64 bit potrebbe essere leggermente più lenta o leggermente più veloce rispetto alla versione a 32 bit. Se l'applicazione utilizza molte variabili temporanee, il set di registri aumentato della modalità a 64 bit può fare una differenza molto grande nelle prestazioni.

1

Per esperienza, ho cercato di trovare una ricompilazione a 64 bit di un'applicazione a 32 bit che generalmente rende il 30% più veloce. È una cifra approssimativa, ma è valida per un certo numero di applicazioni che ho portato a 64-bit. Fondamentalmente è per le ragioni spiegate sopra. Hai più registri che è una manna dal cielo e ti consente di scambiare molto meno memoria e memoria (che sarà probabilmente memorizzata nella cache comunque rendendo la vincita abbastanza piccola). Alcune ottimizzazioni possono essere fatte molto più facilmente. TUTTAVIA, si soffre il problema di puntatori più grandi che cancella parte del guadagno, per non parlare del fatto che fare uno switch di contesto richiede più memoria da utilizzare a causa del set di registri più grande.

Un'ottimatica ottimizzazione manuale a 64 bit può tuttavia garantire enormi guadagni.

Il piano migliore è ricompilare come 64-bit e profilo. cioè vedi quale è meglio.

5

I programmi ad alta intensità di CPU potrebbero risultare notevolmente più veloci su 64-bit.Il processore ha 16 invece di 8 registri general purpose disponibili che sono anche due volte più larghi (64 invece di 32 bit).

Anche il numero di registri per le istruzioni SSE è raddoppiato da 8 a 16, il che è utile per le applicazioni multimediali o altre applicazioni che eseguono molti calcoli a virgola mobile.

Per dettagli, vedere x86-64 su Wikipedia.

Una cosa che non è stata ancora menzionata è che le versioni a 64 bit di sistemi operativi come Windows e Linux utilizzano un diverso calling convention per chiamate di funzione su sistemi a 64 bit; invece di passare argomenti in pila, gli argomenti sono (preferibilmente) passati in registri, il che è in linea di principio più veloce. Quindi il software sarà più veloce perché c'è meno sovraccarico di chiamata di funzione.

0

voi ragazzi sapete qualcosa su multi-canale MC burst di bus dati simultanei, IMC e funzionalità multi-core delle nuove architetture x86_64? almeno, memcpy può essere ottimizzato più velocemente se 64 bit a causa dell'utilizzo di bus e registri a 64 bit indipendentemente dal burst concorrente. almeno i nuovi arch sono in grado di precaricare simultaneamente i dati da più moduli di memoria nella cache. e altro ...

+0

fare riferimento a http://code.google.com/p/effogpled/downloads/list, nome del documento EffoDesign_MemTest.pdf per alcune idee. – Test

1

Avete bisogno di> 4G di memoria? Sfruttare le lacrime di memoria è davvero la grande ragione per andare a 64-bit.

Problemi correlati