Hvad ' er så specielt med x64 vs x86? [lukket]

Lukket . Dette spørgsmål har brug for detaljer eller klarhed . Det accepteres i øjeblikket ikke svar.

Kommentarer

  • Kopi af stackoverflow.com/questions/607322/… , som jeg desværre ikke kan ' t flag, fordi det ' er på SO, ikke programmerere.
  • @Matthew Læs: Itanium mislykkedes spektakulært på markedet, fordi ISA var notorisk svært at skrive kompilatorer til. HPC-markedet havde næsten opgivet det længe før AMD introducerede deres udvidelser.
  • @Mathew kan du sige det om Intel! Hvis det ikke var ' t for bagudkompatibilitet, ville vi arbejde på CPUer med sane instruktions sæt og netværksbyte rækkefølge
  • @Matthew: Har du nogensinde kigget på Itanium instruktionssæt? Sikke et mareridt! Flytning af instruktionsplanlægning til compileren var en dårlig idé. Hvis du vil have en god 64-bit model, skal du se til DEC ' s Alpha.
  • @Mathew, undervurder ikke vigtigheden af, at en platform er bagudkompatibel.

Svar

Den eneste reelle forskel, som du “bemærker, når du bruger en HLL, bliver kodestørrelse, og opdage, at nogle funktioner / biblioteker endnu ikke er tilgængelige for x64. Åh, og x64-kode har tendens til at være mindre performant, i det mindste under .NET. Den app, jeg arbejder på, kører ca. 20% hurtigere, når jeg kompilerer til x86. Jeg ved ikke, om det er, fordi jeg bruger mere busbåndbredde, der flytter 8 byte-mængder rundt, eller om der er noget “klump” i gang videre for at tilpasse 32-bit APIer til 64-bit.

Kommentarer

  • Ikke så meget busbåndbredden af bevægelserne som det faktum, at hvis du beskæftiger sig med 64-bit-mængder vs. 32-bit, har du ' effektivt skåret dine cachestørrelser i halve.
  • @Brian: Fremragende punkt, jeg havde ikke ' t tænkte på det.
  • Især med referencetung .NET hvor alt er en markør (reference).

Svar

På det niveau, du taler om (.NET), er der meget lidt forskel. Når du bruger fuldstændig administreret kode, kompilerer JIT automatisk din kode, og den fungerer stort set den samme med forskellige ydeevneegenskaber. For nogle ting vil det være hurtigere (behandling af mange data, data kan behandles i 64 bit klumper, flere tilgængelige registre osv.), Og for andre er langsommere (64 bit data (dvs. markører) langsommere at indlæse i cachen til at begynde med , hvilket betyder flere data og langsommere overførsler fra hovedhukommelsen).

Du behøver kun virkelig bekymre dig om forskellen, når du bruger ikke-administreret kode. Denne blog har en god nedgang i problemerne.

Kommentarer

  • Du har ' ikke 64 bit-data, medmindre du angiver det. Markører promoveres til 64bits, men ints og floats forbliver de samme. Næsten alle 32bit-systemer understøtter 64bit float (dobbelt), og mange understøtter 64bit int (lang lang). 64bit åbner også de nyere funktioner, herunder flere synlige brugerregistre.
  • @Omega, pointer er data. De skal flyttes ind i cachen, der skal bruges. At køre på 64 bit betyder, at enhver reference eller hverferens potentielt kan flytte en eller flere af disse ind i cachen, og det udvider også hvert objekt, der indeholder referencer. Men det er korrekt, at udsagnets halvdele er forkert. Jeg vil ændre det. Tak.
  • Efter min erfaring er pointer ikke ' t meget almindelige. Men jeg gør ikke ' OOP, og jeg havde en virkelig smertefuld tidlig oplevelse med dårlige henvisninger, så jeg bruger dem kun, når det er absolut nødvendigt. Så IMO-markører tager ikke ' t meget plads. OTOH moderne compilere genererer masser af loop-afrulning, loop-peeling og special case-kode, så kodestørrelsen kan blive ret stor.
  • @Omega, hver gang du refererer til en kompleks objektforekomst på et administreret sprog, du bruger en markør under emhætten.

Svar

. Net-programmerne, der vil blive skrevet til 64bit-systemer, har større adresse plads, og det vil være meget hurtigere end x86-32 bit baserede programmer. Også de nyeste .NET Language-kompilatorer producerer meget optimeret kode. JIT er også forbedret i de senere år, og nu kan du foretage multi-core JIT-optimering. Debuggere forbedres også. I mellemtiden produceres bedre og optimeret kode til 64bit-baserede systemer.

Kommentarer

  • Ikke rigtig.Som den øverste kommentar henvises til for over et år siden, har x86-64 et meget bedre registersæt og kan ikke betragtes som en " udvidelse ". Dernæst gør adresseområdet ' ikke programmer hurtigere. Derefter deres markedsandel. 64 bits er i øjeblikket førende, 32 bit mindretallet (Steam-beholdning, aug. 2012).
  • Dette ( da.wikipedia.org/wiki/X86-64 ) siger X86-64 er en udvidelse af x86. Kan være adresseområdet påvirker ikke programmer, der kører langsomt direkte, men kan påvirke hukommelsen, hvilket vil gøre programmet køre langsomt. I 64bit systemudvikling har du måske få flere job, men ikke en stor figur. For jobmarked skal du ikke ' ikke bare se avancerede lande, men også tage tredjelandes lande til lande. For god reference, se: arstechnica.com/features/2008/09/x86-64 .
  • Du ' citerer en 4-årig artikel. Der produceres næsten ingen 32 bit x86-processorer i dag, i 2012, og det inkluderer low-end CPU ' rettet mod tredjelandes lande.
  • I 3. verdenslande, som er en stor del af verdens befolkning, bruger de dette system regelmæssigt. Selvom der kommer nye systemer, men købsgraden er ikke god sammenlignet med mobile systemer.
  • @Badar Tvivlsom. Jeg ser 64-bit processorer til lav- og mellemklasse-computere her i Latinamerika. Jeg er tilbøjelig til at være enig i, at 32-bit CPUer er væk, i det mindste til desktops og bærbare computere i mellemklassen.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *