Esiste un valore relativamente uguale a new Linux ABI referred to as x32, in cui il processore x86-64 viene eseguito in modalità a 32 bit, quindi i puntatori sono ancora solo a 32 bit, ma i registri specifici dell'architettura a 64 bit vengono ancora utilizzati. Quindi sei ancora limitato a un massimo di 4 GB di memoria come nel normale 32-bit, ma i tuoi puntatori consumano meno spazio nella cache rispetto a 64-bit, puoi fare aritmetica a 64 bit in modo efficiente e ottieni accesso a più registri (16) di quanto faresti in vaniglia a 32 bit (8).Quali <4 GB carichi di lavoro avrebbero prestazioni peggiori nell'ABI x32 di Linux rispetto a x64?
Supponendo che si abbia un carico di lavoro che si adatta perfettamente a 4 GB, c'è un modo in cui le prestazioni di x32 potrebbero essere peggiori rispetto a x86-64?
Mi sembra che se non si necessita dello spazio di memoria aggiuntivo non si perde nulla, si dovrebbe sempre ottenere lo stesso perfetto (quando si è già inseriti nella cache) o migliore (quando il risparmio di spazio del puntatore consente di adattarsi più nella cache). Ma non mi sorprenderebbe se ci fossero paging/TLB/etc. dettagli che non conosco.
Il male è nei dettagli, quindi non sarò molto sorpreso se in alcune rare occasioni, nelle tue condizioni, a volte x32 potrebbe essere un po 'peggio di x86-64. Ma non credo che sia comune .... (si potrebbe immaginare che i vincoli di allineamento siano meno forti su x32, e questo potrebbe danneggiare raramente le prestazioni della cache). –
Ricorda che la dimensione del puntatore non è l'unica differenza tra i due ABI - x86-64 ha anche più registri, che possono ridurre il numero di istruzioni di caricamento/memorizzazione e molte altre differenze. Di conseguenza, non c'è una risposta semplice a questa domanda, e il benchmarking/testing sarebbe quasi sempre la strada migliore per determinare quale sia "migliore" per qualunque definizione di "migliore" sia importante per quel particolare progetto. – twalberg
@twalberg: Penso che potresti aver letto male la domanda - x32 e x86-64 hanno lo stesso numero di registri. Non sto parlando del normale 32-bit. –