Wat is er ' is er zo speciaal aan x64 versus x86? [gesloten]

Gesloten . Deze vraag heeft details of duidelijkheid nodig. Het accepteert momenteel geen antwoorden.

Reacties

  • Duplicaat van stackoverflow.com/questions/607322/… , die ik helaas ' kan markeren omdat het ' op SO staat, niet op programmeurs.
  • @Matthew Read: Itanium faalde spectaculair op de markt omdat de ISA notoir moeilijk was om compilers voor te schrijven. De HPC-markt had het bijna opgegeven lang voordat AMD hun extensies introduceerde.
  • @Mathew dat zou je kunnen zeggen over Intel! Als het niet ' t was voor achterwaartse compatibiliteit, zouden we werken aan CPUs met normale instructiesets en netwerkbytevolgorde
  • @Matthew: heb je ooit gekeken naar de Itanium instructie set? Wat een nachtmerrie! Het verplaatsen van instructieplanning naar de compiler was een slecht idee. Als je een goed 64-bit model wilt, kijk dan naar DEC ' s Alpha.
  • @Mathew, onderschat niet het belang van een platform dat achterwaarts compatibel is.

Antwoord

Het enige echte verschil dat je zou opmerken bij het gebruik van een HLL is de codegrootte, en ontdekken dat sommige features / bibliotheken nog niet beschikbaar zijn voor x64. Oh, en x64-code heeft de neiging minder goed te presteren, althans onder .NET. De app waaraan ik werk, werkt ongeveer 20% sneller als ik compileer voor x86. Ik weet niet of dit komt omdat ik meer busbandbreedte gebruik om 8-byte hoeveelheden te verplaatsen, of dat er wat “chunking” gaande is op om 32-bits APIs aan te passen aan 64-bits.

Opmerkingen

  • Niet zozeer de busbandbreedte van de bewegingen, maar het feit dat als je omgaan met 64-bits hoeveelheden versus 32-bits, je ' hebt je cachegrootte effectief gehalveerd.
  • @Brian: Uitstekend punt, ik had geen ' daar heb ik niet aan gedacht.
  • Vooral met reference-heavy .NET waar alles een pointer (referentie) is.

Antwoord

Op het niveau waar je het over hebt (.NET) is er weinig verschil. Wanneer u volledig beheerde code gebruikt, compileert de JIT automatisch uw code en werkt deze vrijwel hetzelfde, met verschillende prestatiekenmerken. Voor sommige dingen zal het sneller zijn (het verwerken van veel data, data kunnen verwerkt worden in 64 bit chunks, meer registers beschikbaar etc.), en voor anderen langzamer (64 bit data (ie pointers) is langzamer om in de cache te laden voor starters , wat betekent meer gegevens en langzamere overdrachten vanuit het hoofdgeheugen).

U hoeft zich alleen echt zorgen te maken over het verschil wanneer u onbeheerde code gebruikt. Deze blog bevat een goed overzicht van de problemen.

Reacties

  • U heeft geen ' geen 64-bits gegevens, tenzij u deze opgeeft. Pointers worden gepromoveerd tot 64 bits, maar ints en floats blijven hetzelfde. Bijna alle 32-bits systemen ondersteunen 64-bits float (dubbel), en veel ondersteunen 64-bits int (lang en lang). 64bit opent ook de nieuwere functies, waaronder meer voor gebruikers zichtbare registers.
  • @Omega, Pointers zijn data. Ze moeten worden verplaatst naar de cache om te worden gebruikt. Draaien op 64 bit betekent dat elke verwijzing of dereferentie mogelijk een of meer van deze naar de cache kan verplaatsen, en het breidt ook elk object uit dat verwijzingen bevat. Maar u hebt gelijk dat de beweringshelften onjuist zijn. Ik zal dat veranderen. Bedankt.
  • In mijn ervaring zijn pointers ' niet erg gebruikelijk. Maar ik ' doe geen OOP, en ik had een heel pijnlijke vroege ervaring met slechte tips, dus ik gebruik ze alleen als het absoluut noodzakelijk is. Dus IMO-verwijzingen nemen ' niet erg veel adresruimte in beslag. Moderne compilers van OTOH genereren veel lusuitrollen, luspeeling en speciale case-code, dus de codegrootte kan behoorlijk groot worden.
  • @Omega, elke keer dat u naar een complexe objectinstantie verwijst in een beheerde taal die u gebruikt een aanwijzer onder de motorkap.

Answer

De .Net-programmas die zullen worden geschreven voor 64bit-systemen hebben grotere adresruimte, en zal dus veel sneller zijn dan op x86-32 bit gebaseerde programmas. Ook de nieuwste .NET Language-compilers produceren veel geoptimaliseerde code. JIT is de afgelopen jaren ook verbeterd en nu kunt u Multi-core JIT-optimalisatie doen. Debuggers zijn ook verbeterd. Ondertussen wordt er betere en geoptimaliseerde code geproduceerd voor 64bit-gebaseerde systemen.

Reacties

  • Niet echt.Zoals de hoofdcommentaar waarnaar meer dan een jaar geleden werd verwezen, heeft x86-64 een veel betere registratieset en kan het niet worden beschouwd als een " extensie ". Vervolgens maakt adresruimte ' programmas niet sneller. Vervolgens hun marktaandeel. 64 bits is momenteel toonaangevend, 32 bits de minderheid (Steam-inventaris, aug. 2012).
  • Dit ( en.wikipedia.org/wiki/X86-64 ) zegt dat X86-64 een extensie is van x86. De adresruimte heeft mogelijk geen directe invloed op programmas die traag werken, maar kan het geheugen beïnvloeden waardoor het programma traag werkt. Bij de ontwikkeling van 64-bits systemen heb je misschien weinig banen meer, maar geen groot aantal. Kijk voor de arbeidsmarkt niet naar ' alleen naar geavanceerde landen, maar neem ook derdewereldlanden mee naar landen. Kijk voor een goede referentie naar: arstechnica.com/features/2008/09/x86-64 .
  • Jij ' bij het citeren van een 4 jaar oud artikel. Er zijn vrijwel geen 32-bits x86-processors geproduceerd vandaag, in 2012, en dat geldt ook voor de low-end CPU ' s gericht op derdewereldlanden.
  • In Derde wereldlanden, die een groot deel van de wereldbevolking uitmaken, gebruiken dit systeem regelmatig. Ook al komen er nieuwe systemen, maar het aankooppercentage is niet goed in vergelijking met mobiele systemen.
  • @Badar Twijfelachtig. Ik zie 64-bits processors voor computers met een laag en gemiddeld bereik hier in Latijns-Amerika. Ik ben het er meestal over eens dat 32-bits CPUs verdwenen zijn, in ieder geval voor desktops en laptops uit het middensegment.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *