شماره گذاری ارزش یک تکنیک برای تعیین زمان محاسبه دو محاسبه در یک برنامه و حذف یکی از آنها با معنی شناسی حفظ بهینه سازی است.
شماره گذاری ارزش جهانی ( GVN ) یک بهینه سازی کامپایلر است که بر اساس نمایندگی واسطه فرم تکلیف استاتیک تک ( SSA ) است. بعضی اوقات به از بین بردن کدهای اضافی که حذف زیر بیان ( CSE ) کمک نمی کند ، کمک می کند. با این حال ، در همان زمان ، CSE ممکن است کدی را حذف کند که GVN آن را ندارد ، بنابراین هر دو اغلب در کامپایلرهای مدرن یافت می شوند. شماره گذاری ارزش جهانی با شماره گذاری محلی ارزش متمایز است به این دلیل که نقشه های شماره ارزش در مرزهای بلوک اصلی نیز نگهداری می شوند و از الگوریتم های مختلفی برای محاسبه نگاشت ها استفاده می شود.
شماره گذاری ارزش جهانی با اختصاص یک مقدار به متغیرها و عبارات کار می کند. همان مقدار ارزش به آن متغیرها و عبارات اختصاص داده شده معادل اختصاص داده می شود. به عنوان مثال ، در کد زیر:
w := 3 x := 3 y := x + 4 z := w + 4 یک روال خوب GVN عدد یکسانی را به w و x و همان عدد مقدار را به y و z اختصاص می دهد. به عنوان مثال ، نقشه پایین یک نقشه برداری با ارزش بهینه برای این بلوک تشکیل می دهد. با استفاده از این اطلاعات ، قطعه کد قبلی ممکن است با خیال راحت به کد زیر تبدیل شود:
w := 3 x := w y := w + 4 z := y بسته به کد زیر این قطعه ، انتشار کپی ممکن است تکالیف x و z را حذف کند. دلیل این که GVN گاهی اوقات قوی تر از CSE است از این واقعیت ناشی می شود که CSE با اصطلاحات واژگان یکسان منطبق است در حالی که GVN سعی در تعیین یک هم ارزی اساسی دارد. به عنوان مثال ، در کد:
a := c × d e := c f := e × d بدون انتشار نسخه ، CSE اعتبار مورد نظر به f را از بین نمی برد ، اما حتی یک الگوریتم GVN ضعیف نیز باید این افزونگی را کشف و از بین ببرد.
فرم SSA برای انجام GVN لازم است به طوری که نگاشت اشتباه {نام ارزش → نام متغیر} ایجاد نمی شوند.
شماره گذاری محلی ( LVN ) یک بهینه سازی کامپایلر است که هدف آن پیدا کردن چندین نمونه از عبارات معادل ( یعنی عباراتی که همان نتیجه را دارند ) را پیدا کرده و آنها را با اولین بار جایگزین می کند. LVN یک بهینه سازی محلی است ، به این معنی که برخلاف شماره گذاری جهانی ، در یک زمان واحد در یک بلوک اساسی عمل می کند.
شماره گذاری با ارزش محلی با اختصاص یک شماره منحصر به فرد به هر عملیات و به یاد آوردن این انجمن ها کار می کند. دستورالعمل های بعدی مورد بررسی قرار گرفته و در صورتی که دستورالعمل یکسان قبلاً ثبت شده باشد جایگزین نتیجه دستورالعمل قبلی می شود. مثلاً:
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفشماره گذاری ارزش جهانی ( GVN ) یک بهینه سازی کامپایلر است که بر اساس نمایندگی واسطه فرم تکلیف استاتیک تک ( SSA ) است. بعضی اوقات به از بین بردن کدهای اضافی که حذف زیر بیان ( CSE ) کمک نمی کند ، کمک می کند. با این حال ، در همان زمان ، CSE ممکن است کدی را حذف کند که GVN آن را ندارد ، بنابراین هر دو اغلب در کامپایلرهای مدرن یافت می شوند. شماره گذاری ارزش جهانی با شماره گذاری محلی ارزش متمایز است به این دلیل که نقشه های شماره ارزش در مرزهای بلوک اصلی نیز نگهداری می شوند و از الگوریتم های مختلفی برای محاسبه نگاشت ها استفاده می شود.
شماره گذاری ارزش جهانی با اختصاص یک مقدار به متغیرها و عبارات کار می کند. همان مقدار ارزش به آن متغیرها و عبارات اختصاص داده شده معادل اختصاص داده می شود. به عنوان مثال ، در کد زیر:
w := 3 x := 3 y := x + 4 z := w + 4 یک روال خوب GVN عدد یکسانی را به w و x و همان عدد مقدار را به y و z اختصاص می دهد. به عنوان مثال ، نقشه پایین یک نقشه برداری با ارزش بهینه برای این بلوک تشکیل می دهد. با استفاده از این اطلاعات ، قطعه کد قبلی ممکن است با خیال راحت به کد زیر تبدیل شود:
w := 3 x := w y := w + 4 z := y بسته به کد زیر این قطعه ، انتشار کپی ممکن است تکالیف x و z را حذف کند. دلیل این که GVN گاهی اوقات قوی تر از CSE است از این واقعیت ناشی می شود که CSE با اصطلاحات واژگان یکسان منطبق است در حالی که GVN سعی در تعیین یک هم ارزی اساسی دارد. به عنوان مثال ، در کد:
a := c × d e := c f := e × d بدون انتشار نسخه ، CSE اعتبار مورد نظر به f را از بین نمی برد ، اما حتی یک الگوریتم GVN ضعیف نیز باید این افزونگی را کشف و از بین ببرد.
فرم SSA برای انجام GVN لازم است به طوری که نگاشت اشتباه {نام ارزش → نام متغیر} ایجاد نمی شوند.
شماره گذاری محلی ( LVN ) یک بهینه سازی کامپایلر است که هدف آن پیدا کردن چندین نمونه از عبارات معادل ( یعنی عباراتی که همان نتیجه را دارند ) را پیدا کرده و آنها را با اولین بار جایگزین می کند. LVN یک بهینه سازی محلی است ، به این معنی که برخلاف شماره گذاری جهانی ، در یک زمان واحد در یک بلوک اساسی عمل می کند.
شماره گذاری با ارزش محلی با اختصاص یک شماره منحصر به فرد به هر عملیات و به یاد آوردن این انجمن ها کار می کند. دستورالعمل های بعدی مورد بررسی قرار گرفته و در صورتی که دستورالعمل یکسان قبلاً ثبت شده باشد جایگزین نتیجه دستورالعمل قبلی می شود. مثلاً:
wiki: شماره گذاری ارزش