Vad ' är så speciellt med x64 vs x86? [stängd]

<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Stängt . Den här frågan behöver detaljer eller tydlighet . För närvarande accepteras inte svar.

Kommentarer

  • Duplikat av stackoverflow.com/questions/607322/… , som jag tyvärr inte kan ' t flagga eftersom det ' är på SO, inte programmerare.
  • @Matthew Läs: Itanium misslyckades spektakulärt på marknaden eftersom ISA var notoriskt svårt att skriva kompilatorer för. HPC-marknaden hade allt annat än gett upp det långt innan AMD introducerade sina tillägg.
  • @Mathew kan du säga det om Intel! Om det inte var ' t för bakåtkompatibilitet skulle vi arbeta med processorer med förnuftiga instruktionsuppsättningar och nätverksbyteordning
  • @Matthew: Har du någonsin tittat på Itanium instruktionsuppsättning? Vilken mardröm! Att flytta instruktionsplanering till kompilatorn var en dålig idé. Om du vill ha en bra 64-bitarsmodell, se DEC ' s Alpha.
  • @Mathew, underskatta inte vikten av att en plattform är bakåtkompatibel.

Svar

Den enda verkliga skillnaden du skulle märka när du använder en HLL kommer att vara kodstorlek, och upptäcka att vissa funktioner / bibliotek inte är tillgängliga för x64 än. Åh, och x64-koden tenderar att vara mindre prestanda, åtminstone under .NET. Appen jag jobbar med körs ungefär 20% snabbare när jag kompilerar för x86. Jag vet inte om det beror på att jag använder mer bussbandbredd som flyttar 8-byte-kvantiteter, eller om det är något ”chunking” som går på för att anpassa 32-bitars API: er till 64-bitars.

Kommentarer

  • Inte så mycket bussbandbredd för rörelserna som det faktum att om du hantera 64-bitars kvantiteter kontra 32-bitars, du ' har effektivt halverat dina cachestorlekar.
  • @Brian: Utmärkt poäng, jag hade inte ' tänkte på det.
  • Särskilt med referens-tungt. NET där allt är en pekare (referens).

Svar

På den nivå du talar om (.NET) är det väldigt liten skillnad. När du använder helt hanterad kod kommer JIT automatiskt att sammanställa din kod och den kommer att fungera ungefär på samma sätt, med olika prestandaegenskaper. För vissa saker blir det snabbare (bearbetning av mycket data, data kan bearbetas i 64 bitar bitar, fler register tillgängliga etc), och för andra är långsammare (64 bitars data (dvs pekare) långsammare att ladda i cachen till att börja med , vilket betyder mer data och långsammare överföringar från huvudminnet).

Du behöver bara verkligen oroa dig för skillnaden när du använder okontrollerad kod. Denna blogg har en bra nedgång med problemen.

Kommentarer

  • Du har ' inte 64 bitars data om du inte anger det. Pekare marknadsförs till 64 bitar, men bläck och flottör förblir desamma. Nästan alla 32-bitars system stöder 64bit float (dubbel), och många stöder 64bit int (long long). 64bit öppnar också upp de nyare funktionerna, inklusive fler användarsynliga register.
  • @Omega, pekare är data. De måste flyttas in i cachen som ska användas. Att köra på 64 bitar innebär att varje referens eller referens potentiellt kan flytta en eller flera av dessa till cachen, och det expanderar också varje objekt som innehåller referenser. Men du har rätt att påståendets halvor är felaktiga. Jag kommer att ändra det. Tack.
  • Enligt min erfarenhet är pekare ' t mycket vanliga. Men jag gör inte ' OOP, och jag hade en riktigt smärtsam tidig upplevelse med dåliga pekare, så jag använder dem bara när det är absolut nödvändigt. Så IMO-pekare tar inte ' t mycket adressadress. OTOH moderna kompilatorer genererar mycket loop-rullning, loop-peeling och specialfallskod, så kodstorleken kan bli ganska stor.
  • @Omega, varje gång du refererar till en komplex objektinstans i ett hanterat språk som du använder en pekare under huven.

Svar

. Net-programmen som kommer att skrivas för 64-bitars system kommer att ha större adressutrymme, och så kommer det att bli mycket snabbare än x86-32 bitbaserade program. Även de senaste .NET-språkkompilatorerna producerar mycket optimerad kod. JIT har också förbättrats de senaste åren och nu kan du göra JIT-optimering med flera kärnor. Debuggers förbättras också. Under tiden produceras bättre och optimerad kod för 64-bitarsbaserade system.

Kommentarer

  • Inte riktigt.Som toppkommentaren hänvisade till för över ett år sedan har x86-64 en mycket bättre registeruppsättning och kan inte betraktas som en " förlängning ". Därefter gör adressutrymme inte ' t snabbare. Sedan deras marknadsandel. 64 bitar är för närvarande ledande, 32 bitar minoriteten (Steam-inventering, aug 2012).
  • Detta ( en.wikipedia.org/wiki/X86-64 ) säger X86-64 är en förlängning av x86. Kan vara adressutrymme påverkar inte program som körs långsamt direkt, men kan påverka minnet vilket gör att programmet körs långsamt. I 64-bitars systemutveckling kan du ha få fler jobb men inte en stor siffra. För arbetsmarknaden ska du inte se ' inte bara avancerade länder utan ta tredje länder till länder också. För god referens, kolla in: arstechnica.com/features/2008/09/x86-64 .
  • Du ' citerar en 4-årig artikel. Det finns praktiskt taget inga 32-bitars x86-processorer som produceras idag, 2012, och som inkluderar lågpresterande CPU ' som riktar sig till länder i tredje världen.
  • I Tredje världsländerna, som är en stor andel av världens befolkning, använder dessa system regelbundet. Även om det finns nya system, men inköpsfrekvensen är inte bra jämfört med mobila system.
  • @Badar tveksamt. Jag ser 64-bitars processorer för låg- och medelstora datorer här i Latinamerika. Jag brukar hålla med om att 32-bitars processorer är borta, åtminstone för stationära och mellanstora bärbara datorer.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *