CMPXCHG16B
CMPXCHG16B vertaa ja ehdollisesti vaihtaa 16-tavuisen muistiarvon käyttäen määritettyä rekisteriparirajapintaa. Oikeat kohdistus- ja atomisuusvaatimukset ovat välttämättömiä samanaikaiselle käytölle.
Mitä sinun tulee tietää
CMPXCHG16B vertaa ja ehdollisesti vaihtaa 16-tavuisen muistiarvon käyttäen määritettyä rekisteriparirajapintaa. Oikeat kohdistus- ja atomisuusvaatimukset ovat välttämättömiä samanaikaiselle käytölle.
Miten se toimii
Käsky vertaa 128-bittistä muistioperaandia RDX:RAX-rekisteriparin odotettuun arvoon, tallentaa sitten ehdollisesti RCX:RBX-arvon tai lataa havaitun muistiarvon odotetun arvon rekistereihin. Muistioperaandin on täytettävä 16 tavun kohdistusvaatimus. Jaetun muistin atominen käyttö edellyttää asianmukaista LOCK-semantiikkaa.
Missä siitä on hyötyä
Suoritusympäristö voi käyttää käskyä merkityn osoittimen (tagged pointer) tai konekielisen sanaparin atomiseen päivittämiseen. Kääntäjän atominen ohjelmointirajapinta ottaa huomioon myös muistijärjestyksen, tyyppikohdistuksen ja varajärjestelmän toiminnan; käsin kirjoitetun assembly-koodin on täytettävä kaikki nämä vaatimukset.
Tuen ja käyttöönoton tarkistaminen
CPUID.01H:ECX-bitti 13 ilmaisee CMPXCHG16B-tuen. Tarkista ABI:n ja suoritusympäristön atomisuustakuut sekä laitteistobitti. Käytä kielen tuettua atomisuuskyselyä päättäessäsi, onko operaatio lukoton (lock-free).
Tarkista tarkka käsky ja operandimuoto sen sijaan, että päättelisit tuen viereisestä laajennuksesta. Skalaari-integraaliominaisuudet käyttävät yleensä yleiskäyttöisiä rekistereitä; vektoreihin liittyvä koodaus ei automaattisesti tarkoita vektoritilavaatimusta.
Mitä ominaisuus ei takaa
Käsky ei ole yleinen 128-bittinen aritmetiikkayksikkö, eikä sen läsnäolo tarkoita, että jokaisen kielen 128-bittinen atominen tyyppi olisi lukoton jokaisessa koontiversiossa. Virheellinen kohdistus voi aiheuttaa virheen myös tuetulla suorittimella.
Yhteensopivuus ja suorituskyky käytännössä
Oikeellisuus riippuu reunatapauksista yhtä lailla kuin nopeudesta. Nollasyöte, ylivuoto, siirtoliput, operandin leveys, kohdistus ja muistijärjestys voivat muuttaa semantiikkaa. Suosi kääntäjä- tai kirjastorajapintoja, jotka dokumentoivat nämä yksityiskohdat ja tarjoavat tuetun varavaihtoehdon.
Käytännön tarkistuslista todentamiseen
- Kirjaa tarkka suoritin- tai alustamalli sekä kyseessä olevat sovellus-, käyttöjärjestelmä- ja ajonaikaiset versiot. Säilytä todellisen virheen tai vaatimuksen sanamuoto.
- Tarkista kyseisen tarkan mallin valmistajaviite ja tutki sitten todellinen suorituskyky ja käyttöönottotila ympäristössä, jossa ohjelma suoritetaan.
- Vertaa valitun binaarin tai taustajärjestelmän jokaista vaatimusta. Samankaltaisesti nimetty ominaisuus, alias tai laaja teknologiamerkintä ei riitä.
- Varmista, että sovellus valitsi aiotun toteutuksen. Käytä sen dokumentoitua diagnostiikkaa ja tuettua vararatkaisua, kun vaatimukset eivät täyty.
- Tee yksi tuettu muutos kerrallaan ja toista sama työkuorma. Pidä alkuperäinen kokoonpano ja palautuspolku saatavilla.
Jos ominaisuus on luettelossa, mutta ohjelmisto ei voi käyttää sitä
Aloita tarkasta vikaantuvasta komponentista. Laitteistotietokanta kuvaa tallennettua kykyä; käyttöjärjestelmä tai hypervisori voi tuoda esiin erilaisen todellisen ympäristön. Virheellisen käskyn virhe vaatii myös todellisen virheellisen käskyn ja binaarikäännöksen tutkimista, koska korruptio tai liittymätön tukematon käsky voi aiheuttaa samanlaisen oireen.
Asenna kyseiselle alustalle tuettu sovellus-, ajuri- tai ajoympäristöversio ja käytä tarvittaessa toimittajan dokumentoitua perus- tai varakäännöstä. Ohjelmistopäivitys ei voi luoda käskyä, joka suorittimelta puuttuu. Laiteohjelmisto- ja tietoturvakäytäntömuutosten tulee noudattaa järjestelmävalmistajan menettelyä ja palautussuunnitelmaa yleisen optimointiohjeen sijaan.
Tämän selityksen lähteet ja laajuus
Intel 64 and IA-32 Architectures Software Developer's Manual · x86-64 psABI: prosessoriarkkitehtuurin ja mikroarkkitehtuurin tasot
Nämä viitteet määrittävät arkkitehtuurisen käyttäytymisen ja ohjelmistovaatimukset. Ne eivät itsenäisesti vahvista kaikkia ominaisuusarvoja linkitetyllä laitteistomallisivulla. Mallikohtaista tukea varten käytä kyseisen sivun valmistajan todisteita ja tarkista todellinen järjestelmäkokoonpano. Tämä artikkeli ei tarjoa suorituskykytestiä, sertifiointia tai riippumatonta arviointipäivämäärää.
Lähteet ja vahvistus
Toimituksellinen omistajuus: Feex. Riippumatonta tarkistuspäivämäärää ei ole kirjattu. Miten tutkimme.
- Intel 64 and IA-32 Architectures Software Developer's Manual · Osat 1 ja 2 kuvaavat nimetyt käskyperheet ja CPUID:n; Osa 3 kuvaa tila-, sivutus-, VMX- ja suojausohjaukset. Arkkitehtuuridokumentaatio ei vahvista tukea tietylle mallille.
- x86-64 psABI: prosessoriarkkitehtuurin ja mikroarkkitehtuurin tasot · Konerajapinta, prosessoriarkkitehtuuri: perustason ja kumulatiivinen v2/v3/v4-ominaisuustaulukko, käyttöjärjestelmätilan tarkistukset ja käyttöönottosuositukset.
Oliko tämä artikkeli hyödyllinen?
Kyllä tai ei riittää. Valitse halutessasi syy tai lisää lyhyt viesti.
Kiitos. Se auttaa meitä parantamaan tätä sivua.