CMPXCHG16B
CMPXCHG16B cunfronta e scancia 'n modu cunnizziunatu un valuri di mimoria a 16 byte usannu n'interfaccia a coppia di riggistri difinita. L'alliniamentu currettu e li requisiti d'atumicitati sunnu essinziali pi l'usu cuncurrenti.
Chiḍḍu ca t'hà sapiri
CMPXCHG16B cunfronta e scancia 'n modu cunnizziunatu un valuri di mimoria a 16 byte usannu n'interfaccia a coppia di riggistri difinita. L'alliniamentu currettu e li requisiti d'atumicitati sunnu essinziali pi l'usu cuncurrenti.
Comu funziona
L'istrubbzioni cunfronta n'upirannu di mimoria a 128 bit cû valuri privistu nta RDX:RAX, poi 'n modu cunnizziunatu sarva RCX:RBX o càrrica lu valuri di mimoria assirvatu ntê riggistri dû valuri privistu. L'upirannu di mimoria havi a rispittari lu so requisitu d'alliniamentu a 16 byte. L'usu atòmicu 'n mimoria spartuta addumanna la semàntica LOCK apprupriata.
Unni e' ùtili
Un runtime pò usari l'istrubbzioni pi n'agghiurnamentu atòmicu d'un puntaturi taggatu o d'una coppia di palori màchina. L'API atòmica dû cumpilaturi cunta puru l'ordinamentu dâ mimoria, l'alliniamentu dî tipi e lu cumpurtamentu di fallback; l'assembly fattu a manu havi a rispittari tutti sti cuntratti.
Comu cuntrollari lu supportu e l'abbilitazzioni
CPUID.01H:ECX bit 13 ìnnica CMPXCHG16B. Cuntrolla li garanzìi atòmichi di l'ABI e dû runtime comu puru lu bit hardware. Usa la nterrugazzioni atòmica suppurtata dû linguaggiu quannu dicidi si n'upirazzioni esti lock-free.
Cuntrolla la struzzioni esatta e la forma di l'upirannu mmeci d'accanzari lu supportu d'una estinzioni vicina. Li funziunalitati a nteri scalari ùsanu ginirarmenti riggistri pi scopi ginirali; na cudìfica assuciata chî vettura nun signìfica autumaticamenti un requisitu di statu vitturiali.
Zoccu la funziunalitati nun stabbilisci
L'istrubbzioni non esti n'unitati arittmètica a 128 bit ginirali, e la so prisenza non signìfica ca lu tipu atòmicu a 128 bit d'ogni linguaggiu sia lock-free nta ogni build. Un sbagghiu d'alliniamentu pò dari un fallimentu puru supra na CPU suppurtata.
Cumpatibbilitati e pristazzioni nnâ pràtica
La currittizza dipenni dî casi lìmiti accussì comu dâ vilucitati. Input zeru, overflow, flag di riportu, larghizza di l'upirannu, alliniamentu e urdinamentu dâ mimoria ponnu canciari la semàntica. Prifirisci li ntirfacci di cumpilaturi o di libbrirìi ca ducumèntanu sti dittagghi e dùnanu un fallback suppurtatu.
Na lista di virìfica pràtica
- Riggistra lu mudellu esattu dû prucissuri o dâ piattafurma e li virsioni di l'applicazzioni, dû SO e dû runtime cuinvorti. Manteni la formulazzioni di l'erruri o dû requisitu riali.
- Cuntrolla lu rifirimentu dû prudutturi pi ddu mudellu esattu, poi spizziona la capacitati effittiva e lu statu abbilitatu nta l'ambienti unni lu prugramma gira.
- Cunfrunta ogni requisitu dû binariu o dû backend silizziunatu. Na funziunalitati cû nomu sìmili, un pseudònimu o n'etichetta ticnulòggica ginèrica nun abbàstanu.
- Cunferma ca l'applicazzioni hà silizziunatu la mplimintazzioni privista. Usa la sò diagnòstica ducumintata e un fallback suppurtatu quannu li requisiti nun sunnu suddisfatti.
- Fai un canciamentu suppurtatu a la vota e ripeti lu stissu caricu di travagghiu. Manteni dispunìbbili la cunfigurazzioni urigginali e lu pircorsu di ricùp ситуаazzioni.
Si la funziunalitati e' ndicata ma lu software nun la po usari
Accumenza cû cumpunenti esattu ca fallisci. Un database d'hardware discrivi la capacitati riggistrata; lu sistema upirativu o l'hypervisor ponnu ammustrari n'ambienti effittivu diffirenti. N'erruri di struzzioni illigali addanna puru n'indàggini supra la struzzioni ca fallisci pi daveru e supra la build binaria, picchì la curruzzioni o na struzzioni nun currilata e nun suppurtata ponnu fari un sìntumu sìmili.
Installa la virsioni di l'applicazzioni, dû driver o dû runtime suppurtata pâ piattafurma esatta, e usa la build di basi o di fallback ducumintata dû prudutturi si n'hai bisognu. N'aggiurnamentu dû software nun po criari na struzzioni ca manca nnô prucissuri. Li canciamenti di firmware e di pulìtica di sicurizza avìssiru a sèquiri la prucidura dû prudutturi dû sistema e un pianu di ricùpiru mmeci d'un ricittariu d'uttimizzazzioni ginèricu.
Funti e scanciu di st'esplicazzioni
Intel 64 and IA-32 Architectures Software Developer's Manual · psABI x86-64: liveddi d'architittura e micrarchitittura dû prucissuri
Sti rifirimenti stabbilìscinu lu cumpurtamentu architittùnicu e li requisiti dû software. Nun virìficanu di manera ndipinnenti ogni valuri di funziunalitati nta na pàggina d'un mudellu hardware culligatu. Pû supportu dû mudellu, usa li provi dû prudutturi di dda pàggina e cuntrolla la cunfigurazzioni effittiva dû sistema. St'artìculu nun duna un benchmark, na cirtificazzioni o na data di rivisioni ndipinnenti.
Funti e virìfica
Titularità editoriali: Feex. Nudda data di rivisioni nnipinnenti è riggistrata. Comu facemu i ricerchi.
- Intel 64 and IA-32 Architectures Software Developer's Manual · Li Vulumi 1 e 2 discrìvinu li famigghi di struzzioni muntuati e CPUID; lu Vulumi 3 discrivi statu, pagginazzioni, VMX e cuntrolli di prutizzioni. La ducumintazzioni d'architittura nun stabbilisci lu supportu pi un mudellu particulari.
- psABI x86-64: liveddi d'architittura e micrarchitittura dû prucissuri · Machine Interface, Processor Architecture: tabbella dî carattirìstichi baseline e cumulativi v2/v3/v4, cuntrolli dû statu di l'OS e raccumannazzioni pâ distribbuzzioni.
Fu ùtili st'artìculu?
Un sì o un no abbasta. Scegghi un mutivu si voi, o junci na nota curta.
Grazzi. Chistu n'aiuta a megghiurari sta pàggina.