Перайсці да змесціва

CMPXCHG16B

Архітэктурны даведнікFeex

CMPXCHG16B параўноўвае і ўмоўна абменьвае 16-байтавае значэнне ў памяці, выкарыстоўваючы вызначаны інтэрфейс пары рэгістраў. Правільнае выраўноўванне і патрабаванні да атамарнасці важныя для паралельнага выкарыстання.

Што вам трэба ведаць

CMPXCHG16B параўноўвае і ўмоўна абменьвае 16-байтавае значэнне ў памяці, выкарыстоўваючы вызначаны інтэрфейс пары рэгістраў. Правільнае выраўноўванне і патрабаванні да атамарнасці важныя для паралельнага выкарыстання.

Як гэта працуе

Інструкцыя параўноўвае 128-бітны аперанд у памяці з чаканым значэннем у RDX:RAX, затым умоўна захоўвае RCX:RBX або загружае назіранае значэнне памяці ў рэгістры чаканага значэння. Аперанд памяці павінен задавальняць патрабаванне да 16-байтавага выраўноўвання. Атамарнае выкарыстанне з агульнай памяццю патрабуе адпаведнай семантыкі LOCK.

Дзе гэта карысна

Асяроддзе выканання можа выкарыстоўваць гэтую інструкцыю для атамарнага абнаўлення пазначанага паказальніка (tagged pointer) або пары машынных слоў. Атамарны API кампілятара таксама ўлічвае ўпарадкаванне памяці, выраўноўванне тыпаў і рэзервовыя паводзіны; напісаны ўручную асэмблерны код павінен выконваць усе гэтыя ўмовы.

Як праверыць падтрымку і актыўнасць

CPUID.01H:ECX біт 13 паказвае на CMPXCHG16B. Правярайце гарантыі атамарнасці ABI і асяроддзя выканання, а таксама апаратны біт. Выкарыстоўвайце падтрымоўваны мовай запыт атамарнасці пры прыняцці рашэння аб тым, ці з'яўляецца аперацыя свабоднай ад блакіровак (lock-free).

Правярайце дакладную інструкцыю і форму аперанда, а не мяркуйце пра наяўнасць падтрымкі па суседнім пашырэнні. Скалярныя цэлалікавыя функцыі звычайна выкарыстоўваюць рэгістры агульнага прызначэння; кадаванне, звязанае з вектарамі, не азначае аўтаматычна патрабавання да вектарнага стану.

Чаго гэта функцыя не гарантуе

Гэтая інструкцыя не з'яўляецца агульным 128-бітным арыфметычным блокам, і яе наяўнасць не азначае, што 128-бітны атамарны тып кожнай мовы з'яўляецца свабодным ад блакіровак у кожнай зборцы. Няправільнае выраўноўванне можа прывесці да збою нават на падтрымоўваным працэсары.

Сумяшчальнасць і прадукцыйнасць на практыцы

Карэктнасць залежыць як ад краявых выпадкаў, так і ад хуткасці. Нулявы ўваход, перапаўненне, сцягі пераносу, шырыня аперанда, выраўноўванне і ўпарадкаванне доступу да памяці могуць змяняць семантыку. Аддавайце перавагу інтэрфейсам кампілятара або бібліятэк, якія дакументуюць гэтыя дэталі і прапануюць падтрымліваемы запасны варыянт (fallback).

Практычны чэк-ліст для праверкі

  1. Зафіксуйце дакладную мадэль працэсара або платформы, а таксама задзейнічаныя версіі праграмы, АС і асяроддзя выканання. Захавайце дакладную фармулёўку памылкі або патрабавання.
  2. Звярніцеся да дакументацыі вытворцы для гэтай канкрэтнай мадэлі, затым праверце фактычныя магчымасці і ўключаны стан у асяроддзі, дзе выконваецца праграма.
  3. Супастаўце кожнае патрабаванне выбранага выканальнага файла або бэкэнда. Аналагічнай назвы функцыі, псеўданіма або агульнай назвы тэхналогіі недастаткова.
  4. Пацвердзіце, што праграма выбрала патрэбную рэалізацыю. Выкарыстоўвайце яе задакументаваныя сродкі дыягностыкі і падтрымліваемы запасны варыянт, калі патрабаванні не выконваюцца.
  5. Уносьце па адным падтрымліваемым змяненні за раз і паўтарайце тую ж нагрузку. Захоўвайце зыходную канфігурацыю і магчымасць адкату.

Калі функцыя пазначана, але праграмнае забеспячэнне не можа яе выкарыстоўваць

Пачніце з канкрэтнага кампанента, які выклікае збой. Апаратная база даных апісвае зафіксаваныя магчымасці; аперацыйная сістэма або гіпервізар могуць прадастаўляць іншае фактычнае асяроддзе. Памылка недапушчальнай інструкцыі (illegal instruction) таксама патрабуе даследавання канкрэтнай інструкцыі, якая выклікала збой, і зборкі бінарнага файла, паколькі пашкоджанне даных або іншая непадтрымліваемая інструкцыя могуць выклікаць аналагічны сімптом.

Усталюйце версію праграмы, драйвера або асяроддзя выканання, якая падтрымліваецца для дадзенай платформы, і пры неабходнасці выкарыстоўвайце задакументаваную вытворцам базавую або запасную зборку. Абнаўленне ПЗ не можа стварыць інструкцыю, якой няма ў працэсары. Змяненні ў мікрапраграме (firmware) і палітыках бяспекі павінны адпавядаць працэдурам вытворцы сістэмы і плану аднаўлення, а не агульным рэцэптам аптымізацыі.

Крыніцы і межы прымянення гэтага тлумачэння

Intel 64 and IA-32 Architectures Software Developer's Manual · x86-64 psABI: узроўні архітэктуры і мікраархітэктуры працэсараў

Гэтыя даведнікі вызначаюць архітэктурныя паводзіны і патрабаванні да праграмнага забеспячэння. Яны не пацвярджаюць незалежна кожнае значэнне функцыі на звязанай старонцы мадэлі абсталявання. Для праверкі падтрымкі мадэллю выкарыстоўвайце даныя вытворцы на адпаведнай старонцы і правярайце фактычную канфігурацыю сістэмы. Гэты артыкул не змяшчае вынікаў тэсціравання (benchmark), сертыфікацыі або даты незалежнага агляду.

Крыніцы і праверка

Рэдакцыйная прыналежнасць: Feex. Дата незалежнай праверкі не зафіксавана. Як мы даследуем.

Ці быў гэты артыкул карысным?

Дастаткова адказаць "так" або "не". Выберыце прычыну, калі хочаце, або дадайце кароткую нататку.

Ці быў гэты артыкул карысным?