LZCNT
LZCNT падлічвае колькасць пачатковых нулявых бітаў у цэлалікавым аперандзе. Яна адрозніваецца ад BSR, у тым ліку вынікам для нуля, і патрабуе відавочнай праверкі магчымасцей.
Што вам трэба ведаць
LZCNT падлічвае колькасць пачатковых нулявых бітаў у цэлалікавым аперандзе. Яна адрозніваецца ад BSR, у тым ліку вынікам для нуля, і патрабуе відавочнай праверкі магчымасцей.
Як гэта працуе
Вынікам з'яўляецца колькасць нулявых бітаў, якія папярэднічаюць найстарэйшаму ўсталяванаму біту ў абранай шырыні аперанда. Для аперанда з усімі нулямі LZCNT вяртае шырыню аперанда. Яе сцягі і паводзіны пры нулі вызначаны інакш, чым у старэйшай аперацыі зваротнага сканавання бітаў (bit-scan-reverse) з падобным кадаваннем.
Дзе гэта карысна
Працэдура сціскання або апрацоўкі лікавых фарматаў можа выкарыстоўваць гэты падлік, каб вызначыць, колькі значных бітаў патрабуецца значэнню. Правільная апрацоўка нуля неабходна для разлікаў памеру і зрухаў, паколькі памылковая замена на bit-scan можа даць несапраўдны вынік.
Як праверыць падтрымку і актыўнасць
CPUID.80000001H:ECX біт 5 пералічвае LZCNT у адпаведнасці з вызначэннем адпаведнага вытворцы. Спачатку пераканайцеся, што пашыраны ліст існуе. Выкарыстоўвайце падтрымоўваны запыт магчымасцей кампілятара/асяроддзя выканання і запасны варыянт, семантыка нуля якога супадае.
Правярайце дакладную інструкцыю і форму аперанда, а не мяркуйце пра наяўнасць падтрымкі па суседнім пашырэнні. Скалярныя цэлалікавыя функцыі звычайна выкарыстоўваюць рэгістры агульнага прызначэння; кадаванне, звязанае з вектарамі, не азначае аўтаматычна патрабавання да вектарнага стану.
Чаго гэта функцыя не гарантуе
LZCNT не падлічвае ўсе ўсталяваныя біты і не з'яўляецца TZCNT. Непадтрымоўваны працэсар можа інтэрпрэтаваць гэтае кадаванне як BSR, таму простая спроба выканаць інструкцыю з'яўляецца небяспечным тэстам наяўнасці функцыі. BMI1 і BMI2 з'яўляюцца асобнымі магчымасцямі.
Сумяшчальнасць і прадукцыйнасць на практыцы
Карэктнасць залежыць як ад краявых выпадкаў, так і ад хуткасці. Нулявы ўваход, перапаўненне, сцягі пераносу, шырыня аперанда, выраўноўванне і ўпарадкаванне доступу да памяці могуць змяняць семантыку. Аддавайце перавагу інтэрфейсам кампілятара або бібліятэк, якія дакументуюць гэтыя дэталі і прапануюць падтрымліваемы запасны варыянт (fallback).
Практычны чэк-ліст для праверкі
- Зафіксуйце дакладную мадэль працэсара або платформы, а таксама задзейнічаныя версіі праграмы, АС і асяроддзя выканання. Захавайце дакладную фармулёўку памылкі або патрабавання.
- Звярніцеся да дакументацыі вытворцы для гэтай канкрэтнай мадэлі, затым праверце фактычныя магчымасці і ўключаны стан у асяроддзі, дзе выконваецца праграма.
- Супастаўце кожнае патрабаванне выбранага выканальнага файла або бэкэнда. Аналагічнай назвы функцыі, псеўданіма або агульнай назвы тэхналогіі недастаткова.
- Пацвердзіце, што праграма выбрала патрэбную рэалізацыю. Выкарыстоўвайце яе задакументаваныя сродкі дыягностыкі і падтрымліваемы запасны варыянт, калі патрабаванні не выконваюцца.
- Уносьце па адным падтрымліваемым змяненні за раз і паўтарайце тую ж нагрузку. Захоўвайце зыходную канфігурацыю і магчымасць адкату.
Калі функцыя пазначана, але праграмнае забеспячэнне не можа яе выкарыстоўваць
Пачніце з канкрэтнага кампанента, які выклікае збой. Апаратная база даных апісвае зафіксаваныя магчымасці; аперацыйная сістэма або гіпервізар могуць прадастаўляць іншае фактычнае асяроддзе. Памылка недапушчальнай інструкцыі (illegal instruction) таксама патрабуе даследавання канкрэтнай інструкцыі, якая выклікала збой, і зборкі бінарнага файла, паколькі пашкоджанне даных або іншая непадтрымліваемая інструкцыя могуць выклікаць аналагічны сімптом.
Усталюйце версію праграмы, драйвера або асяроддзя выканання, якая падтрымліваецца для дадзенай платформы, і пры неабходнасці выкарыстоўвайце задакументаваную вытворцам базавую або запасную зборку. Абнаўленне ПЗ не можа стварыць інструкцыю, якой няма ў працэсары. Змяненні ў мікрапраграме (firmware) і палітыках бяспекі павінны адпавядаць працэдурам вытворцы сістэмы і плану аднаўлення, а не агульным рэцэптам аптымізацыі.
Крыніцы і межы прымянення гэтага тлумачэння
Intel 64 and IA-32 Architectures Software Developer's Manual · AMD CPUID Specification, публікацыя 25481 · x86-64 psABI: узроўні архітэктуры і мікраархітэктуры працэсараў
Гэтыя даведнікі вызначаюць архітэктурныя паводзіны і патрабаванні да праграмнага забеспячэння. Яны не пацвярджаюць незалежна кожнае значэнне функцыі на звязанай старонцы мадэлі абсталявання. Для праверкі падтрымкі мадэллю выкарыстоўвайце даныя вытворцы на адпаведнай старонцы і правярайце фактычную канфігурацыю сістэмы. Гэты артыкул не змяшчае вынікаў тэсціравання (benchmark), сертыфікацыі або даты незалежнага агляду.
Крыніцы і праверка
Рэдакцыйная прыналежнасць: Feex. Дата незалежнай праверкі не зафіксавана. Як мы даследуем.
- Intel 64 and IA-32 Architectures Software Developer's Manual · Тамы 1 і 2 апісваюць названыя сямействы інструкцый і CPUID; Том 3 апісвае стан, старонкавую арганізацыю памяці, VMX і элементы кіравання абаронай. Архітэктурная дакументацыя не пацвярджае падтрымку канкрэтнай мадэлі.
- AMD CPUID Specification, публікацыя 25481 · Архіўны архітэктурны даведнік па базавых функцыях AMD CPUID і вызначэннях бітаў. Для больш позніх пашырэнняў канкрэтных пакаленняў выкарыстоўвайце бягучы даведнік па праграмаванні працэсараў.
- x86-64 psABI: узроўні архітэктуры і мікраархітэктуры працэсараў · Machine Interface, Processor Architecture: табліца базавых і кумулятыўных магчымасцей v2/v3/v4, праверкі стану АС і рэкамендацыі па разгортванні.
Ці быў гэты артыкул карысным?
Дастаткова адказаць "так" або "не". Выберыце прычыну, калі хочаце, або дадайце кароткую нататку.
Дзякуй. Гэта дапамагае нам паляпшаць гэтую старонку.