Pani hoʻolaha

Mike Ash hoʻolaʻa ʻia ma kāna blog nā hopena kūpono o ka hoʻololi ʻana i ka hoʻolālā 64-bit i ka iPhone 5S. Hoʻopili kēia ʻatikala i kāna mau ʻike.

ʻO ke kumu o kēia kikokikona ma muli o ka nui o nā kuhi hewa i hoʻolaha ʻia e pili ana i ke ʻano o ka iPhone 5s hou me kahi kaʻina hana 64-bit ARM no nā mea hoʻohana a me ka mākeke. Ma ʻaneʻi e hoʻāʻo mākou e lawe i ka ʻike kikoʻī e pili ana i ka hana, nā mea hiki a me nā hopena o kēia hoʻololi no nā mea hoʻomohala.

"64 bit"

ʻElua mau ʻāpana o kahi kaʻina hana e hiki ai i ka lepili "X-bit" ke kuhikuhi - ka laulā o nā helu helu helu a me ka laulā o nā kuhikuhi. ʻO ka mea pōmaikaʻi, ma ka hapa nui o nā kaʻina hana hou ua like kēia mau laula, no laila ma ke ʻano o ka A7, ʻo ia ke ʻano o 64-bit integer registers a me 64-bit pointers.

Eia naʻe, he mea nui e kuhikuhi i ke ʻano o "64bit" ʻaʻole i manaʻo: Ka nui o ka helu helu kino RAM. ʻAʻole pili ka helu o nā bits e kamaʻilio me RAM (pēlā ka nui o ka RAM e hiki ke kākoʻo i kahi mea hana) ʻaʻole pili i ka helu o nā bit CPU. Loaʻa i nā kaʻina hana ARM ma waena o 26- a me 40-bit a hiki ke hoʻololi kūʻokoʻa i ke koena o ka ʻōnaehana.

  • Nui kaʻa ʻikepili. ʻO ka nui o ka ʻikepili i loaʻa mai ka RAM a i ʻole ka hoʻomanaʻo hoʻomanaʻo he kūʻokoʻa like ia i kēia kumu. Hiki i nā ʻōlelo aʻoaʻo hana hoʻokahi ke noi i nā ʻikepili like ʻole, akā ua hoʻouna ʻia i loko o nā ʻāpana a i ʻole e loaʻa ʻoi aku ma mua o ka pono mai ka hoʻomanaʻo. Pili ia i ka nui o ka quantum data. Ua loaʻa i ka iPhone 5 ka ʻikepili mai ka hoʻomanaʻo ʻana ma 64-bit quanta (a he 32-bit processor), a hiki iā mākou ke hālāwai i nā nui a hiki i 192 bits.
  • ʻO kēlā me kēia mea e pili ana i ka lae lana. ʻO ka nui o ia mau papa inoa (FPU) kūʻokoʻa hou i nā hana kūloko o ka mea hana. Ua hoʻohana ʻo ARM i ka 64-bit FPU mai ka wā ma mua o ARM64 (64-bit ARM processor).

ʻO nā pono āpau a me nā pōʻino

Inā hoʻohālikelike mākou i nā ʻano hana like ʻole 32bit a me 64bit, ʻaʻole like lākou. ʻO kēia kekahi o nā kumu o ka huikau nui o ka lehulehu e ʻimi nei i ke kumu e neʻe ai ʻo Apple i 64bit ma nā polokalamu kelepona pū kekahi. Eia nō naʻe, hele mai nā mea āpau mai nā ʻāpana kikoʻī o ka kaʻina hana A7 (ARM64) a pehea e hoʻohana ai ʻo Apple, ʻaʻole wale mai ka ʻoiaʻiʻo he 64-bit architecture ka mea hana.

Eia nō naʻe, inā e nānā mau mākou i nā ʻokoʻa ma waena o kēia mau hale hana ʻelua, e ʻike mākou i nā ʻokoʻa. ʻO ka mea maopopo loa, hiki i nā 64-bit integer registers ke mālama pono i nā integer 64-bit. ʻOiai ma mua, ua hiki ke hana pū me lākou ma nā kaʻina hana 32-bit, akā ʻo ia ka mea maʻamau e hoʻokaʻawale iā lākou i nā ʻāpana 32-bit lōʻihi, kahi i hoʻonui ai i ka helu ʻana. No laila, hiki i kahi kaʻina hana 64-bit ke helu me nā ʻano 64-bit e like me ka wikiwiki me nā 32-bit. ʻO ia hoʻi, hiki i nā noi e hoʻohana maʻamau i nā ʻano 64-bit ke holo wikiwiki loa ma kahi kaʻina hana 64-bit.

ʻOiai ʻaʻole pili ka 64bit i ka nui o ka RAM e hiki ai i ka mea hoʻohana ke hoʻohana, hiki iā ia ke maʻalahi i ka hana me nā ʻāpana nui o RAM i hoʻokahi papahana. ʻO kēlā me kēia polokalamu hoʻokahi e holo ana ma kahi kaʻina hana 32-bit aia wale nō ma kahi o 4 GB o ka wahi helu wahi. Ke noʻonoʻo nei i ka ʻōnaehana hana a me nā hale waihona puke maʻamau e lawe i kekahi mea, waiho kēia i ka papahana me kahi ma waena o 1-3 GB no ka hoʻohana ʻana i ka noi. Eia naʻe, inā ʻoi aku ka nui o ka ʻōnaehana 32-bit ma mua o 4 GB o RAM, ʻoi aku ka paʻakikī o ka hoʻohana ʻana i kēlā hoʻomanaʻo. Pono mākou e hoʻoikaika i ka OS e palapala i kēia mau puʻupuʻu nui o ka hoʻomanaʻo no kā mākou papahana (memory virtualization), a i ʻole hiki iā mākou ke hoʻokaʻawale i ka papahana i nā kaʻina hana he nui (kahi i loaʻa i kēlā me kēia kaʻina hana he 4GB o ka hoʻomanaʻo i loaʻa no ke kamaʻilio pololei).

Eia nō naʻe, paʻakikī a lohi kēia mau "hacks" i ka liʻiliʻi o nā noi e hoʻohana iā lākou. Ma ka hoʻomaʻamaʻa, ma kahi kaʻina hana 32-bit, hoʻohana kēlā me kēia polokalamu i kāna 1-3 GB o ka hoʻomanaʻo, a hiki ke hoʻohana ʻia ka RAM i loaʻa no ka holo ʻana i nā polokalamu he nui i ka manawa like a i ʻole e hoʻohana i kēia hoʻomanaʻo ma ke ʻano he buffer (caching). Maikaʻi kēia mau hoʻohana, akā makemake mākou e hiki ke hoʻohana maʻalahi i nā ʻāpana o ka hoʻomanaʻo ma mua o 4GB.

I kēia manawa ke hele mai nei mākou i ka ʻōlelo pinepine (hewa maoli) me ka ʻole o ka hoʻomanaʻo ʻana ma mua o 4GB, ʻaʻole pono ka hoʻolālā 64-bit. Hiki ke hoʻohana ʻia kahi wahi helu wahi nui ma kahi ʻōnaehana me ka liʻiliʻi o ka hoʻomanaʻo. ʻO nā faila i hoʻopaʻa ʻia i ka hoʻomanaʻo he mea hana maʻalahi kahi e hoʻopili pono ʻia ai kekahi hapa o ka waihona i ka hoʻomanaʻo o ke kaʻina hana me ka ʻole o ka faila holoʻokoʻa e hoʻouka ʻia i ka hoʻomanaʻo. No laila, hiki i ka ʻōnaehana, no ka laʻana, ke hoʻoponopono lohi i nā faila nui i nā manawa he nui ma mua o ka mana RAM. Ma kahi ʻōnaehana 32-bit, ʻaʻole hiki ke hilinaʻi ʻia nā faila nui, akā ma kahi ʻōnaehana 64-bit, he ʻāpana keke ia, mahalo i ka nui o ka nui o ka helu wahi.

Eia nō naʻe, ʻo ka nui o nā kikoʻī e lawe mai i kahi pōʻino nui: inā ʻaʻole pono nā papahana like e hoʻomanaʻo hou aku ma kahi kaʻina hana 64-bit (pono e mālama ʻia kēia mau kuhikuhi nui ma kahi). No ka mea he ʻāpana pinepine o nā papahana, hiki i kēia ʻokoʻa ke kaumaha i ka huna huna, a ʻo ia ka mea e holo mālie ai ka ʻōnaehana holoʻokoʻa. No laila, i ka hiʻohiʻona, hiki iā mākou ke ʻike inā ua hoʻololi wale mākou i ka papa hana kaʻina hana i 64-bit, e hoʻolohi maoli ia i ka ʻōnaehana holoʻokoʻa. No laila, pono e kaulike ʻia kēia kumu e ka hoʻonui ʻana i nā optimizations ma nā wahi ʻē aʻe.

ARM64

ʻO ka A7, ke kaʻina hana 64-bit e mana ana i ka iPhone 5s hou, ʻaʻole ia he kaʻina hana ARM maʻamau me nā papa inoa ākea. Loaʻa iā ARM64 nā hoʻomaikaʻi nui ma mua o ka mana kahiko, 32-bit.

Apple A7 kaʻina hana.

Kakau inoa

ʻO ARM64 ka paʻa ʻana i ʻelua mau helu helu integer ma mua o 32-bit ARM (e makaʻala ʻaʻole e huikau i ka helu a me ka laula o nā papa inoa - ua kamaʻilio mākou e pili ana i ka laulā ma ka ʻāpana "64-bit". nā papa inoa). ʻO ka 64-bit ARM he 32 mau helu helu helu: hoʻokahi papa helu (PC - aia ka helu o ke aʻo ʻana o kēia manawa), kahi kuhikuhi kiko (kahi kuhikuhi i kahi hana e holomua ana), kahi leka uila (kahi kuhikuhi e hoʻi ma hope o ka hana ʻana. hoʻopau ʻia), a ʻo ke koena 16 no ka hoʻohana noi. Eia naʻe, loaʻa i ka ARM13 nā papa inoa helu 64, me ka papa inoa ʻole hoʻokahi, kahi papa inoa loulou, kahi kuhikuhi kiʻi (e like me kahi kiko kiko), a hoʻokahi i mālama ʻia no ka wā e hiki mai ana. Hāʻawi kēia iā mākou me 32 mau papa inoa no ka hoʻohana ʻana i ka noi, ʻoi aku ma mua o ka pālua o ka 28-bit ARM. I ka manawa like, ua pālua ka ARM32 i ka helu o nā helu floating-point (FPU) mai 64 a i 16 32-bit registers.

Akā, no ke aha he mea nui ka helu o nā papa inoa? ʻOi aku ka lohi o ka hoʻomanaʻo ma mua o ka helu CPU a hiki ke lōʻihi ka heluhelu/kākau ʻana. ʻO kēia ka mea e pono ai ka mea hana wikiwiki e kali no ka hoʻomanaʻo a e pā mākou i ka palena wikiwiki maoli o ka ʻōnaehana. Ke ho'āʻo nei ka poʻe kaʻina hana e hūnā i kēia hemahema me nā ʻāpana pale, akā ʻoi aku ka wikiwiki o ka mea wikiwiki (L1) ma mua o ka helu ʻana o ka mea hana. Eia nō naʻe, ʻo nā mea kākau inoa he mau mea hoʻomanaʻo pololei i loko o ke kaʻina hana a ua wikiwiki kā lākou heluhelu/kākau ʻana i ʻole e hoʻolōʻihi i ka mea hana. No laila, ʻo ka helu o nā mea hoʻopaʻa inoa ʻo ia ka nui o ka hoʻomanaʻo wikiwiki loa no ka helu ʻana i ka mea hana, e hoʻopilikia nui i ka wikiwiki o ka ʻōnaehana holoʻokoʻa.

I ka manawa like, pono kēia wikiwiki i ke kākoʻo optimization maikaʻi mai ka mea hōʻuluʻulu i hiki i ka ʻōlelo ke hoʻohana i kēia mau papa inoa a ʻaʻole pono e mālama i nā mea āpau i ka noi maʻamau (ka hoʻomanaʻo lohi).

Hoʻonohonoho kuhikuhi

Lawe pū ʻo ARM64 i nā loli nui i ka hoʻonohonoho aʻo. ʻO kahi hoʻonohonoho aʻoaʻo he pūʻulu o nā hana atomika i hiki i ke kaʻina hana ke hana (e laʻa me 'ADD register1 register2' hoʻohui i nā helu ma nā papa inoa ʻelua). ʻO nā hana i loaʻa i nā ʻōlelo pākahi i haku ʻia me kēia mau kuhikuhi. Pono nā hana paʻakikī e hoʻokō i nā ʻōlelo aʻo hou aʻe, no laila hiki ke lohi.

ʻO nā mea hou ma ARM64 nā ʻōlelo aʻoaʻo no ka hoʻopunipuni AES, SHA-1 a me SHA-256 hana hash. No laila ma kahi o kahi hoʻokō paʻakikī, ʻo ka ʻōlelo wale nō e kāhea i kēia aʻo - e lawe mai i kahi wikiwiki nui i ka helu ʻana o ia mau hana a me ka manaʻolana e hoʻohui i ka palekana i nā noi. E.g. Hoʻohana pū ka Touch ID hou i kēia mau ʻōlelo aʻoaʻo i ka hoʻopili ʻana, e ʻae ana i ka wikiwiki maoli a me ka palekana (ma ke kumumanaʻo, pono ka mea hoʻouka e hoʻololi i ka mea hana ponoʻī e komo i ka ʻikepili - hiki ʻole ke haʻi i ka liʻiliʻi loa i hāʻawi ʻia i kona nui liʻiliʻi).

Hoʻohālikelike me 32bit

He mea nui e haʻi aku hiki i ka A7 ke holo holoʻokoʻa ma ke ʻano 32-bit me ka ʻole o ka pono o ka emulation. ʻO ia ka mea hiki i ka iPhone 5s hou ke holo i nā noi i hōʻuluʻulu ʻia ma 32-bit ARM me ka ʻole o ka lohi. Eia nō naʻe, ʻaʻole hiki iā ia ke hoʻohana i nā hana ARM64 hou, no laila pono mau ke hana i kahi kūkulu kūikawā no ka A7 wale nō, pono e holo wikiwiki.

Hoʻololi ka manawa holo

ʻO Runtime ke code e hoʻohui i nā hana i ka ʻōlelo papahana, hiki iā ia ke hoʻohana i ka wā e holo ana ka noi, a ma hope o ka unuhi ʻana. No ka mea ʻaʻole pono ʻo Apple e mālama i ka hoʻopili ʻana i ka noi (e holo ana kahi binary 64-bit ma 32-bit), hiki iā lākou ke hana i kekahi mau hoʻomaikaʻi hou i ka ʻōlelo Objective-C.

ʻO kekahi o lākou ka mea i kapa ʻia kuhikuhi kuhikuhi (hōʻailona kuhikuhi). ʻO ka mea maʻamau, mālama ʻia nā mea a me nā kuhikuhi i kēlā mau mea i nā ʻāpana like ʻole o ka hoʻomanaʻo. Eia naʻe, ʻae nā ʻano kikoʻī hou i nā papa me nā ʻikepili liʻiliʻi e mālama pono i nā mea i loko o ka pointer. Hoʻopau kēia ʻanuʻu i ka pono e hoʻokaʻawale pololei i ka hoʻomanaʻo no ka mea, e hana wale i kahi kuhikuhi a me ka mea i loko. Kākoʻo ʻia nā ʻōkuhi i hōʻailona ʻia ma ka hale hoʻolālā 64-bit no ka mea ʻaʻole lawa ka nui o ka wahi i kahi pointer 32-bit e mālama i ka ʻikepili kūpono. No laila, ʻaʻole i kākoʻo ʻo iOS i kēia hiʻohiʻona. Eia naʻe, me ka hiki ʻana mai o ARM64, ke hoʻololi nei kēia, a ua loaʻa ʻo iOS me OS X ma kēia ʻano.

ʻOiai he 64 bits ka lōʻihi o nā kuhikuhi, ma ka ARM64 wale nō 33 bits i hoʻohana ʻia no ka helu ponoʻī o ka mea kuhikuhi. A inā hiki iā mākou ke wehe pono i ke koena o nā kiko kuhikuhi, hiki iā mākou ke hoʻohana i kēia wahi no ka mālama ʻana i nā ʻikepili hou - e like me ke ʻano o nā kuhikuhi i kuhikuhi ʻia. ʻO ka manaʻo, ʻo ia kekahi o nā hoʻololi nui loa i ka mōʻaukala o Objective-C, ʻoiai ʻaʻole ia he hiʻohiʻona kūʻai - no laila ʻaʻole ʻike ka hapa nui o nā mea hoʻohana i ka neʻe ʻana o Apple i ka Objective-C i mua.

No ka ʻikepili pono i hiki ke mālama ʻia i loko o ke koena o kahi kikoʻī i hoʻopaʻa ʻia, ʻo Objective-C, no ka laʻana, ke hoʻohana nei i kēia manawa e mālama i ka mea i kapa ʻia. helu kuhikuhi (ka helu o nā kuhikuhi). Ma mua, ua mālama ʻia ka helu kuhikuhi ma kahi ʻē aʻe i ka hoʻomanaʻo, ma kahi papaʻaina hash i hoʻomākaukau ʻia no ia mea, akā hiki ke hoʻolōʻihi i ka ʻōnaehana holoʻokoʻa i ka hihia o ka nui o nā alloc/dealloc/retain/release calls. Pono e laka ʻia ka papaʻaina ma muli o ka palekana o ka milo, no laila ʻaʻole hiki ke hoʻololi ʻia ka helu kuhikuhi o nā mea ʻelua i loko o nā kaula ʻelua i ka manawa like. Eia naʻe, ua hoʻokomo hou ʻia kēia waiwai i ke koena o ka mea i kapa ʻia lawa nā hōʻailona. ʻO kēia kahi ʻē aʻe inconspicuous, akā nui ka pōmaikaʻi a me ka wikiwiki i ka wā e hiki mai ana. Eia naʻe, ʻaʻole hiki ke hoʻokō ʻia kēia ma kahi hoʻolālā 32-bit.

ʻO ka ʻike e pili ana i nā mea pili, inā he mea nāwaliwali ka kuhikuhi ʻana, inā pono e hoʻohua i kahi mea luku no ka mea, a me nā mea ʻē aʻe, ua hoʻokomo hou ʻia i loko o ke koena o nā kuhikuhi i nā mea Mahalo i kēia ʻike, ka Objective-C Hiki i ka runtime ke hoʻoikaika i ka manawa holo, i hōʻike ʻia i ka wikiwiki o kēlā me kēia noi. Mai ka hoʻāʻo ʻana, ʻo ia ka mea ma kahi o 40-50% ka wikiwiki o nā kelepona hoʻokele hoʻomanaʻo āpau. Ma ka hoʻololi wale ʻana i nā kuhikuhi 64-bit a me ka hoʻohana ʻana i kēia wahi hou.

Ka hopena

ʻOiai e hoʻāʻo nā mea hoʻokūkū e hoʻolaha i ka manaʻo ʻaʻole pono ka neʻe ʻana i kahi hoʻolālā 64-bit, e ʻike mua ʻoe he manaʻo ʻike ʻole kēia. He ʻoiaʻiʻo ʻo ka hoʻololi wale ʻana i ka 64bit me ka ʻole o ka hoʻololi ʻana i ka ʻōlelo a i ʻole nā ​​noi iā ia ʻaʻole manaʻo maoli - hiki ke hoʻolohi i ka ʻōnaehana holoʻokoʻa. Akā, hoʻohana ka A7 hou i kahi ARM64 hou me kahi hoʻonohonoho aʻo hou, a ua lawe ʻo Apple i ka pilikia e hoʻololi i ka ʻōlelo holoʻokoʻa-C a hoʻohana i nā mana hou - no laila ka wikiwiki i ʻōlelo ʻia.

Ma ʻaneʻi ua ʻōlelo mākou i nā kumu he nui no ke kumu o ka hoʻolālā 64-bit ka hana kūpono i mua. He hoʻololi hou ia "ma lalo o ka puʻupuʻu", e hoʻomaikaʻi iā Apple e hoʻāʻo e noho ma ke alo ʻaʻole wale me ka hoʻolālā, ka mea hoʻohana a me nā kaiaola waiwai, akā ʻo ka hapa nui me nā ʻenehana hou loa ma ka mākeke.

Puna: Mikeash.com
.