Vra

Ek dink ek fokus op x86, maar ek oor die algemeen belangstel in die skuif 32-64 bietjie.

Logies, ek kan sien dat konstantes en wenke, in sommige gevalle, sal groter wees so programme is geneig om groter wees. En die begeerte om geheue op woord grense vir doeltreffendheid toeken sou beteken meer wit-ruimte tussen toekennings.

Ek het ook gehoor dat 32 bit mode op die x86 moet sy kas te spoel wanneer konteks skakel as gevolg van moontlike oorvleueling 4G adres ruimtes.

So, wat is die werklike voordele van 64 bit?

En as 'n addisionele vraag sou 128 bit wees selfs beter?

Edit:

Ek het nou net my eerste 32/64 bit program geskryf. Dit maak geskakelde lyste / bome van 16 byte (32 ter weergawe) of 32 byte (64B weergawe) voorwerpe en doen 'n baie druk om stderr - nie 'n baie nuttige program, en nie iets tipies, maar dit is my eerste

Grootte: 81.128 (32 ter) v 83672 (64b) - so nie veel verskil

Spoed: 17s (32b) v 24s (64b) - loop op 32 bit OS (OS-X 10.5.8)

Update:

Ek daarop dat 'n nuwe baster x32 ABI (Aansoek Binary Interface) word ontwikkel wat 64b maar gebruike 32b wysers. Vir 'n paar toetse lei dit in kleiner kode en vinniger uitvoering as óf 32b of 64B.

https://sites.google.com/site/x32abi/

Was dit nuttig?

Oplossing

As jy nodig het om toegang meer geheue wat 32b aanspreek sal jy toelaat dat die voordele sal klein, indien enige wees.

Wanneer loop op 64B CPU, dieselfde geheue koppelvlak maak nie saak kry jy as jy met 32 ??ter of 64B-kode (wat jy gebruik dieselfde kas en dieselfde BUS).

Hoewel x64 argitektuur het 'n paar meer registers wat makliker optimalisaties toelaat, dit word dikwels teengewerk deur die feit wysers is nou groter en die gebruik van enige strukture met wysers resultate in 'n hoër geheue verkeer. Ek sou die toename in die algehele geheue gebruik vir 'n 64B aansoek in vergelyking met 'n 32 ter een rondom 15-30% te wees skat.

Ander wenke

Ek sien gewoonlik 'n 30% spoed verbetering vir bereken intensiewe kode op x86-64 in vergelyking met x86. Dit is waarskynlik te wyte aan die feit dat ons 16 x 64 bit algemene doel registers en 16 x SSE registers in plaas van 8 x 32 bit algemene doel registers en 8 x SSE registers. Dit is met die Intel ICC samesteller (11.1) op 'n x86-64 Linux - resultate met ander samestellers (bv gcc), of met ander bedryfstelsels (bv Windows), kan verskillende natuurlik wees

.

Ten spyte van die voordele, sou ek voorstel dat jy altyd saam te stel jou program vir verstek woord grootte van die stelsel (32-bit of 64-bit), want as jy stel 'n biblioteek as 'n 32-bis binêre en bied dit op 'n 64-bit stelsel, sal jy iemand wat wil skakel met jou biblioteek om hul biblioteek (en enige ander biblioteek afhanklikhede) verskaf as 'n 32-bis binêre, wanneer die 64-bis weergawe is die verstek beskikbaar te dwing. Dit kan nogal 'n oorlas vir almal wees. Wanneer jy twyfel, bied beide weergawes van jou biblioteek.

As die praktiese voordele van 64-bit ... die mees voor die hand liggend is dat jy 'n groter adresruimte, so as MMAP n lêer, jy kan meer van dit in 'n keer aan te spreek (en laai groter lêers in die geheue). Nog 'n voordeel is dat, in die veronderstelling die samesteller 'n goeie werk van die optimalisering, baie van jou rekenkundige operasies kan parallelized (byvoorbeeld die plasing van twee pare van 32-bit getalle in twee registers en die uitvoering van twee voeg in 'n enkele byvoeging operasie), en 'n groot aantal berekeninge sal vinniger te hardloop. Dit gesê, die hele 64-bit vs 32-bit ding sal jy nie help met asimptotiese kompleksiteit glad, so as jy op soek is na jou kode te optimaliseer, jy moet waarskynlik kyk na die algoritmes eerder as die konstante faktore soos hierdie.

Edit :
Let verontagsaam my verklaring oor die parallelized Daarbenewens. Dit is nie uitgevoer deur 'n gewone byvoeging verklaring ... Ek is verwarrend dat met 'n paar van die vectorized / SSE instruksies. 'N Meer akkurate voordeel, opsy, weg van die groter adresruimte, is dat daar meer algemene doel registers, wat beteken dat meer plaaslike veranderlikes kan in stand gehou word in die CPU registreer lêer, wat is veel vinniger om toegang, as wanneer jy in die die veranderlikes te plaas program stapel (wat gewoonlik beteken wat uitgaan om die L1 kas).

In bykomend tot die feit dat meer registers, 64-bit het SSE2 by verstek. Dit beteken dat jy kan wel 'n paar berekeninge in parallel. Die SSE uitbreidings het ander goodies te. Maar ek dink die grootste voordeel is nie om te kyk vir die teenwoordigheid van die uitbreidings. As dit x64, dit het SSE2 beskikbaar. ... As my geheue my reg dien.

Slegs regverdiging vir die beweging van jou aansoek om 64 bit is behoefte aan meer geheue in programme soos groot databasisse of ERP aansoeke met ten minste 100'e van gelyktydige gebruikers waar 2 GB beperking redelik vinnig sal oorskry word wanneer aansoeke kas vir 'n beter prestasie. Dit is die geval spesiaal op Windows OS waar heelgetal en 'n lang nog 32 bit (hulle het 'n nuwe veranderlike _int64. Slegs wysers is 64 bit. Om die waarheid te WOW64 is geoptimaliseerde op Windows x64 sodat 32 bit programme te hardloop met 'n lae boete op 64 bit Windows OS. My ondervinding op Windows x64 is 32 bit aansoek weergawe hardloop 10-15% vinniger as 64 bit sedert in eersgenoemde geval ten minste vir eie geheue databasisse kan jy wyser rekenen gebruik vir die handhawing van b-boom (die meeste verwerker intensiewe deel van databasis stelsels) . Compuatation intensiewe programme wat groot desimale vir die mees akkurate nie deur dubbel gegun op 32-64 bietjie bedryfstelsel vereis. Hierdie aansoeke kan _int64 gebruik in native in plaas van sagteware nydigheid. natuurlik groot skyf gebaseer databasisse sal ook verbetering op 32 bit net te danke wys vermoë om groot geheue gebruik vir caching navraag planne en so aan.

Meer inligting oorgedra word tussen die SVE en RAM vir elke geheue haal (64 stukkies in plaas van 32), so kan 64-bit programme vinniger word, mits hulle so geskryf dat hulle behoorlik voordeel te trek uit hierdie.

In die spesifieke geval van x68 aan x68_64, die 64 bit program sal wees oor dieselfde grootte, indien nie effens kleiner, gebruik 'n bietjie meer geheue en hardloop vinniger. Meestal dit is omdat x86_64 nie net 64 bit registers, dit het ook twee keer soveel. x86 het nie genoeg registers na saamgestel tale so doeltreffend as wat hulle kan wees maak, so x86 kode spandeer baie instruksies en geheue bandwydte verskuiwing data heen en weer tussen registers en geheue. x86_64 het veel minder van daardie, en dus is dit 'n bietjie minder ruimte en lopies vinniger. Drywende punt en-bit twiddling vektor instruksies is ook baie meer doeltreffend in x86_64.

In die algemeen, al is, 64 bit kode is nie noodwendig 'n vinniger, en is gewoonlik groter, beide vir die kode en geheue gebruik tydens looptyd.

Enige aansoeke wat CPU gebruik soos kodewisseling, vertoon prestasie en media lewering, of dit klank of visuele wees, sal beslis vereis (op hierdie punt) en voordeel trek uit die gebruik van 64 bit teenoor 32 bit vereis as gevolg van die vermoë van die CPU's te hanteer met die groot hoeveelheid van die data op dit gegooi. Dit is nie soseer 'n kwessie van adres ruimte as dit is die manier waarop die data word behandel. A 64 bit verwerker, gegewe 64 bit kode, gaan om beter te presteer, veral met wiskundig moeilike dinge soos kodewisseling en VoIP data - in werklikheid, moet 'n soort van 'wiskunde' programme baat vind by die gebruik van 64 bit CPUs en bedryfstelsels. Bewys my verkeerd verstaan.

Ek kodering 'n skaak enjin. Die beste skuif onttrekking met behulp van 'n Minimax gebaseer boom soek na diepte 9 (van 'n sekere posisie) het ~ 17.0s op Win32 opset en nadat skakel na x64 dit neem nou ~ 10.3s. Dit is 41% van versnelling!

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top