Cosa ' è così speciale in x64 rispetto a x86? [chiuso]

Chiuso . Questa domanda richiede dettagli o chiarezza . Attualmente non accetta risposte.

Commenti

  • Duplicato di stackoverflow.com/questions/607322/… , che purtroppo posso ' t contrassegnare perché ' è su SO, non sui programmatori.
  • @Matthew Read: Itanium ha fallito in modo spettacolare sul mercato perché lISA era notoriamente difficile da scrivere compilatori. Il mercato HPC aveva quasi rinunciato molto prima che AMD introducesse le proprie estensioni.
  • @Mathew si potrebbe dire questo di Intel! Se non fosse ' t per compatibilità con le versioni precedenti, lavoreremmo su CPU con set di istruzioni sani e ordine di byte di rete
  • @Matthew: hai mai guardato Itanium set di istruzioni? Che incubo! Spostare la pianificazione delle istruzioni nel compilatore era una cattiva idea. Se vuoi un buon modello a 64 bit, guarda DEC ' s Alpha.
  • @Mathew, non sottovalutare limportanza di una piattaforma compatibile con le versioni precedenti.

Risposta

Lunica vera differenza che “noterai quando utilizzi un HLL sarà la dimensione del codice, e scoprire che alcune funzionalità / librerie non sono ancora disponibili per x64. Oh, e il codice x64 tende ad essere meno performante, almeno sotto .NET. Lapp su cui sto lavorando gira circa il 20% più velocemente quando compilo per x86. Non so se è perché utilizzo più larghezza di banda del bus spostando quantità di 8 byte o se ci sono dei “blocchi” in corso per adattare le API a 32 bit a quelle a 64 bit.

Commenti

  • Non tanto la larghezza di banda del bus delle mosse quanto il fatto che se si gestisci quantità a 64 bit rispetto a 32 bit, ' hai effettivamente dimezzato le dimensioni della cache.
  • @Brian: punto eccellente, non avevo ' ci ho pensato.
  • In particolare con .NET ricco di riferimenti dove tutto è un puntatore (riferimento).

Risposta

Al livello di cui parli (.NET) cè pochissima differenza. Quando si utilizza codice completamente gestito, JIT compilerà automaticamente il codice e funzionerà più o meno allo stesso modo, con caratteristiche di prestazioni diverse. Per alcune cose sarà più veloce (elaborando molti dati, i dati potrebbero essere elaborati in blocchi a 64 bit, più registri disponibili ecc.) E per altri più lento (i dati a 64 bit (cioè i puntatori) sono più lenti da caricare nella cache per i principianti , il che significa più dati e trasferimenti più lenti dalla memoria principale).

Devi preoccuparti della differenza solo quando usi codice non gestito. Questo blog ha una buona analisi dei problemi.

Commenti

  • Non ' dati a 64 bit a meno che non lo specifichi. I puntatori vengono promossi a 64 bit, ma int e float rimangono gli stessi. Quasi tutti i sistemi a 32 bit supportano 64bit float (double) e molti supportano 64bit int (long long). 64bit apre anche le nuove funzionalità, inclusi più registri visibili allutente.
  • @Omega, i puntatori sono dati. Devono essere spostati nella cache per essere utilizzati. Lesecuzione a 64 bit significa che ogni riferimento o dereferenziazione potrebbe potenzialmente spostare uno o più di questi nella cache e inoltre espande ogni oggetto che contiene riferimenti. Ma hai ragione sul fatto che le metà dellistruzione non siano corrette. Lo cambierò. Grazie.
  • Nella mia esperienza i puntatori non sono ' molto comuni. Ma io non ' t OOP, e ho avuto una prima esperienza davvero dolorosa con cattivi puntatori, quindi li uso solo quando assolutamente necessario. Quindi i puntatori IMO non ' occupano molto spazio degli indirizzi. I compilatori moderni OTOH generano molti cicli di srotolamento, loop peeling e codice di casi speciali, quindi la dimensione del codice può diventare piuttosto grande.
  • @Omega, ogni volta che fai riferimento a unistanza di oggetto complesso in un linguaggio gestito che stai utilizzando un puntatore nascosto.

Risposta

I programmi .Net che verranno scritti per sistemi a 64 bit avranno spazio di indirizzamento più ampio e quindi sarà molto più veloce dei programmi basati su x86-32 bit. Anche i più recenti compilatori .NET Language producono codice molto ottimizzato. Anche JIT è stato migliorato negli ultimi anni e ora puoi eseguire lottimizzazione JIT multi-core. Anche i debugger sono migliorati. Nel frattempo, viene prodotto codice migliore e ottimizzato per sistemi basati su 64 bit.

Commenti

  • Non proprio.Poiché il commento principale è stato riferito più di un anno fa, x86-64 ha un set di registri decisamente migliore e non può essere considerato un " estensione ". Successivamente, lo spazio indirizzo non ' rende i programmi più veloci. Quindi, la loro quota di mercato. 64 bit è attualmente in testa, 32 bit la minoranza (inventario di Steam, agosto 2012).
  • Questo ( en.wikipedia.org/wiki/X86-64 ) dice che X86-64 è unestensione di x86. Può essere che lo spazio degli indirizzi non influisca direttamente sui programmi eseguiti lentamente, ma può influire sulla memoria che rallenterà lesecuzione del programma. Nello sviluppo di sistemi a 64 bit, potresti avere pochi lavori in più ma non una cifra importante. Per il mercato del lavoro, non ' vedere solo i paesi avanzati ma includere anche i paesi del terzo mondo nei paesi. Per una buona consultazione, controlla: arstechnica.com/features/2008/09/x86-64 .
  • Tu ' sta citando un articolo di 4 anni fa. Non ci sono praticamente processori x86 a 32 bit prodotti oggi, nel 2012, e questo include la CPU di fascia bassa ' destinata ai paesi del terzo mondo.
  • In I paesi del terzo mondo, che rappresentano unampia percentuale della popolazione mondiale, utilizzano regolarmente questo sistema. Anche se arrivano nuovi sistemi, ma il tasso di acquisto non è buono rispetto ai sistemi mobili.
  • @Badar Doubtful. Vedo processori a 64 bit per computer di fascia bassa e media qui in America Latina. Tendo a concordare che le CPU a 32 bit non ci sono più, almeno per i desktop e i laptop di fascia media.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *