Està processant el procés de 64 bits més ràpid que 32?
Suposo que m'estic centrant en x86, però en general estic interessat en moure'm des de 32 a 64 bits.
Per lògica, puc veure que constants i punters, en alguns casos, serà més gran que els programes siguin més grans. I el desig d'utilitzar memòria en límits de paraula significaria més espai blanc entre assignacions.
També he sentit que 32 bits en el mode x86 ha de fer servir la seva memòria cau en canviar el context degut a possibles espais d' adreça 4G.
Així doncs, quins són els beneficis reals de 64 bits?
I com a pregunta addicional, en 128 bits seria millor?
Edita:
Acabo d'escriure el meu primer programa de 32/64. Fa enllaços llistes/arbres de 16 bytes (versió 32b) o 32 bytes (versió 64b) i fa molt d' impressió a stderr - no és un programa realment útil, i no una cosa típica, però és el meu primer.
Mida: 81128(32b) v 83672(64b - no hi ha gaire diferència
Velocitat: 17s(32b) v 24s(64b) - executant- se en 32 bit OS (OS- X 10. 5)
Actualitza:
Noteu que un nou híbrid x32 ABI (aplicació Interfície binària) està desenvolupat que és 64b, però utilitza els punters 32b. Per algunes proves, resulta en codi més petit i més ràpid que 32b o 64b.
9 respostes 9
Generalment veig una millora de velocitat del 30% per calcular codi intensiva en x86-64 comparat amb x86. Això és probablement degut al fet que tenim 16 x 64 caixa de propòsit general i 16 x SSE registrar en comptes de 8 x 32 casos generals i 8 x SSE. Aquest és amb el compilador 'Intel ICC' (11. 21) en un Linux x86-64 - resultats amb d' altres compiladors (p. ex. gcc), o amb altres sistemes operatius (p. ex.g. Windows), pot ser diferent.
A menys que hagis d'accedir a més memòria que el 32b adreçant et permeti, els beneficis seran petits, si n'hi ha.
Quan s' està executant a 64b CPU, obtindreu la mateixa interfície de memòria sense importar si esteu executant 32b o 64b (useu la mateixa memòria cau i la mateixa BUS).
Mentre que l'arquitectura x64 té alguns registres més fàcils que permeten optimització, això sovint és contrarestar pels punters de fet ara són més grans i usar qualsevol estructura amb resultats dels punters en un tràfic de memòria superior. M'agradaria estimar l'augment de l'ús de memòria global per a una aplicació 64b comparada amb un 32b un per al voltant de l'any 15-30%.
Independentment dels beneficis, us suggeriria que sempre compileu el vostre programa per a la mida de paraula per omissió del sistema (32- bit o 64 bits), atès que si compileu una biblioteca com a binari de 32 bits i proporcioneu- lo en un sistema 64- bit, forçareu a qualsevol que volgués enllaçar amb la vostra biblioteca per a proveir la seva biblioteca (i qualsevol altra dependències de biblioteca) com a binari de 32 bits, quan la versió de 64 bits sigui disponible. Això pot ser una gran molèstia per a tothom. Quan en dubte, doneu ambdues versions de la vostra biblioteca.
Pel que fa als beneficis pràctics de 64 bits... el més obvi és que obtens un espai d' adreces més gran, de manera que si mmap un fitxer, el podeu adreçar més al mateix temps (i carregar fitxers més grans a la memòria). Un altre avantatge és que, assumint que el compilador fa una bona feina de optimització, moltes de les vostres operacions aritmètica es poden paral· lelalitzar (per exemple, col·locar dos parells de números de 32 bits en dos registres i actuar dos afegeixen en una única operació), i grans càlculs s' executaran més ràpidament. Dit això, tot el 64 bits contra el resultat dels 32 bits no us ajudarà amb la complexitat assimptomètica, així que si esteu intentant optimitzar el codi, segurament hauríeu d'estar mirant els algoritmes en comptes dels factors constants d'aquesta manera.
EDIT : Si us plau, tingueu en compte la meva declaració sobre l'addició paral· lelaitzada. Això no està fet per una declaració d' afegeix normal... Estava confús que amb algunes de les instruccions vectorials/SE. Un avantatge més precís, a part de l' espai d' adreces més gran, és que hi ha més caixes generals de propòsit, el qual vol dir que es poden mantenir més variables locals en el fitxer de registre de la CPU, que és molt més ràpid d' accedir, que si poseu les variables a la pila de programa (la qual cosa vol dir sortir al cau de L1).
A més de tenir més registres, 64 bits té SSE2 per omissió. Això vol dir que podeu realitzar alguns càlculs en paral·lel. Les extensions SSE també tenien altres béns. Però suposo que el benefici principal no ha de comprovar la presència de les extensions. Si és x64, està disponible SSE2. Si la meva memòria em serveix correctament.
En el cas específic de x68 a x68_ 64, el programa 64 bit serà de la mateixa mida, si no una mica més petit, utilitza una mica més de memòria i corre més ràpid. Sobretot això és perquè x86_64 no té 64 registres, sinó que també té el doble de casos. x86 no té registres suficients per a compilar idiomes com a eficients com a poden ser, de manera que el codi x86 gasta moltes instruccions i l' amplada de banda de memòria Canviant dades cap enrere i cap enrere entre els registres i la memòria. x86_64 té molt menys d' això, així que triga una mica menys espai i corre més de pressa. Les instruccions de vector flotants i bitwit també són molt més eficients en x86_64.
En general, en 64 bits el codi no és necessàriament més ràpid, i normalment és més gran, tant per codi com ús de memòria en temps d' execució.
Només és justificació per a moure la vostra aplicació a 64 bits és necessària per a més memòria en aplicacions com grans bases de dades o aplicacions ERP amb almenys 100s d' usuaris concurrents on 2 GB límit serà excedit ràpidament quan les aplicacions de memòria cau per a un rendiment millor. Aquest és especialment en Windows OS, on el enter i el llarg encara són 32 bits (que tenen una nova variable _int64. Només els punters són 64 bits. De fet, el 6464 és molt òptim a Windows x64 per tal que 32 petites aplicacions corrin amb baixa pena a 64 bit Windows OS. La meva experiència en Windows x64 és 32 bits per a l' aplicació executant el 10- 15% més ràpid que en l' anterior cas de bases de dades de memòria propietari podeu usar el punter aritthmatic per mantenir b-arbre (una part més intensa dels sistemes de bases de dades). Les aplicacions intensives que requereixen grans decimals per a una alta precisió no es poden permetre doblement en el sistema operatiu 3264. Aquestes aplicacions poden usar _int64 en natiuament enlloc de l'emulació de programari. Per descomptat, les bases de dades basades en disc també mostren millora més de 32 bits degut a l' habilitat d' usar grans memòria per als plans de consulta de cau i així successivament.
Qualsevol aplicació que requereixi ús de CPU com transcoding, representació del rendiment i de mitjans de comunicació, si és d' àudio o visual, segurament requerirà (en aquest punt) i beneficiar- se de 64 bits contra 32 bits degut a l'habilitat de la CPU per tal d'enfrontar- se amb la pura quantitat de dades que l' estan expulsant. No és una qüestió d'espai de direcció tal i com es tracten les dades. Un processador de 64 bits, donat 64 bits codi, farà millor, especialment amb coses matemàtiques difícils com transcoding i dades VoIP - de fet, qualsevol tipus d' aplicacions de 'athath' hauria de beneficiar- se de l' ús de 64 CPU i sistemes operatius. Demostra que m'equivoco.
A la meva màquina, la mateixa codificació h265 funciona gairebé dues vegades més ràpid usant VrtulDub_x64 (amb x64 h265 biblioteca) contra virtulDub_ x32 (ponular x32 h265). Això és probablement perquè les operacions de números llargs (64bits) (ead: afegir) es poden fer en una única instrucció a x64, però el 32 bits necessita dos: afegiu part inferior, i després afegiu (amb la càrrega) la part superior. Així que a menys que els enters enters es limitan a enters de 32 bits, la majoria trigarà més temps sota x32.
Artículos Relacionados:
- Fa de 64 bits alenteix el meu ordinador?
- Què vol dir un processador de 32 bits i 64 bits?
- Està bé en un processador de 64 bits?
- Està bé en un processador de 64 bits per jocs?
- Processador -