Tracing just-in-time compilation
ஜஸ்ட்-இன்-டைம் தொகுப்பைக் கண்டுபிடிப்பது என்பது மெய்நிகர் இயந்திரங்களால் இயக்க நேரத்தில் ஒரு நிரலின் செயல்பாட்டை மேம்படுத்த பயன்படுத்தப்படும் ஒரு நுட்பமாகும். அடிக்கடி செயல்படுத்தப்படும் செயல்பாடுகளின் நேரியல் வரிசையை பதிவு செய்வதன் மூலமும், அவற்றை சொந்த இயந்திரக் குறியீட்டுடன் தொகுப்பதன் மூலமும், அவற்றை செயல்படுத்துவதன் மூலமும் இது செய்யப்படுகிறது. இது ஒரு முறை அடிப்படையில் செயல்படும் பாரம்பரிய ஜஸ்ட்-இன்-டைம் (ஜேஐடி) தொகுப்பாளர்களுக்கு எதிரானது. ஜஸ்ட்-இன்-டைம் தொகுப்பு என்பது ஒரு நிரலின் பகுதிகளை இயக்க நேரத்தில் இயந்திரக் குறியீட்டிற்குத் தொகுப்பதன் மூலம் நிரல்களின் செயல்பாட்டு வேகத்தை அதிகரிப்பதற்கான ஒரு நுட்பமாகும். வெவ்வேறு ஜேஐடி தொகுப்பாளர்களை வகைப்படுத்துவதற்கான ஒரு வழி அவற்றின் தொகுப்பு நோக்கமாகும். முறை அடிப்படையிலான ஜேஐடி தொகுப்பான்கள் ஒரு நேரத்தில் ஒரு முறையை இயந்திரக் குறியீட்டிற்கு மொழிபெயர்க்கிறது, ஜேஐடிகளைக் கண்டுபிடிப்பது அடிக்கடி செயல்படுத்தப்படும் சுழல்களை அவற்றின் தொகுப்பு அலகாக பயன்படுத்துகிறது. நிரல்கள் தங்கள் பெரும்பாலான நேரத்தை நிரலின் சில சுழல்களில் ("சூடான சுழல்கள்") செலவிடுகின்றன மற்றும் அடுத்தடுத்த சுழல் மறு செய்கைகள் பெரும்பாலும் ஒத்த பாதைகளை எடுக்கின்றன என்ற அனுமானங்களை அடிப்படையாகக் கொண்டவை JITகளைக் கண்டுபிடிப்பது. தடமறிதல் ஜேஐடி கொண்ட மெய்நிகர் இயந்திரங்கள் பெரும்பாலும் கலப்பு-முறை செயல்படுத்தும் சூழல்களாகும், அதாவது அவை தடமறிதல் ஜேஐடிக்கு கூடுதலாக ஒரு மொழிபெயர்ப்பாளர் அல்லது முறை தொகுப்பாளரைக் கொண்டுள்ளன. தொழில்நுட்ப விவரங்கள் ஒரு தடமறிதல் ஜேஐடி தொகுப்பாளர் இயக்க நேரத்தில் பல்வேறு கட்டங்களைக் கடந்து செல்கிறது. முதலில், சுழல்களுக்கான விவரக்குறிப்பு தகவல்கள் சேகரிக்கப்படுகின்றன. ஒரு சூடான வளையம் அடையாளம் காணப்பட்ட பிறகு, ஒரு சிறப்பு தடமறிதல் கட்டம் உள்ளிடப்படுகிறது, இது அந்த வளையத்தின் அனைத்து செயல்படுத்தப்பட்ட செயல்பாடுகளையும் பதிவு செய்கிறது. செயல்பாடுகளின் இந்த வரிசை ஒரு தடம் என்று அழைக்கப்படுகிறது. தடம் பின்னர் உகந்ததாக மாற்றப்பட்டு இயந்திர குறியீட்டிற்கு (தடம்) தொகுக்கப்படுகிறது. இந்த வளையம் மீண்டும் செயல்படுத்தப்படும்போது, தொகுக்கப்பட்ட சுவடு நிரல் எதிர்ப்பக்கத்திற்கு பதிலாக அழைக்கப்படுகிறது. இந்த படிநிலைகள் பின்வருவனவற்றில் விரிவாக விளக்கப்பட்டுள்ளனஃ விவரக்குறிப்பு கட்டம் விவரக்குறிப்பின் குறிக்கோள் சூடான சுழல்களை அடையாளம் காண்பதாகும். ஒவ்வொரு வளையத்திற்கும் மறு செய்கைகளின் எண்ணிக்கையை எண்ணுவதன் மூலம் இது பெரும்பாலும் செய்யப்படுகிறது. ஒரு வளையத்தின் எண்ணிக்கை ஒரு குறிப்பிட்ட வரம்பை மீறிய பிறகு, வளையம் சூடாக கருதப்படுகிறது, மேலும் தடமறிதல் கட்டம் உள்ளிடப்படுகிறது. தடமறிதல் கட்டத்தில் வளையத்தின் செயல்பாடு வழக்கமாக தொடர்கிறது, ஆனால் கூடுதலாக செயல்படுத்தப்படும் ஒவ்வொரு செயல்பாடும் ஒரு தடத்தில் பதிவு செய்யப்படுகிறது. பதிவுசெய்யப்பட்ட செயல்பாடுகள் பொதுவாக சுவடு மரத்தில் சேமிக்கப்படுகின்றன, பெரும்பாலும் இடைநிலை பிரதிநிதித்துவத்தில் (ஐஆர்). தடமறிதல் செயல்பாட்டு அழைப்புகளைப் பின்பற்றுகிறது, இது அவை தடத்தில் இணைக்கப்படுவதற்கு வழிவகுக்கிறது. வளையம் அதன் முடிவை அடைந்து தொடக்கத்திற்குத் திரும்பும் வரை தடமறிதல் தொடர்கிறது. வளையத்தின் ஒரு உறுதியான செயல்பாட்டு பாதையைப் பின்பற்றுவதன் மூலம் தடம் பதிவு செய்யப்படுவதால், அந்த தடத்தின் பிற்கால செயல்பாடுகள் அந்த பாதையிலிருந்து வேறுபடலாம். அது நடக்கக்கூடிய இடங்களை அடையாளம் காண, சிறப்பு பாதுகாப்பு அறிவுறுத்தல்கள் தடயத்தில் செருகப்படுகின்றன. அத்தகைய இடத்திற்கு ஒரு எடுத்துக்காட்டு என்றால் அறிக்கைகள். அசல் நிபந்தனை இன்னும் உண்மையாக இருக்கிறதா என்பதைத் தீர்மானிக்க காவலர் ஒரு விரைவான சோதனை. ஒரு காவலர் தோல்வியுற்றால், தடத்தை நிறைவேற்றுவது நிறுத்தப்படும். செயலாக்கத்தின் போது தடமறிதல் செய்யப்படுவதால், இயக்க நேரத் தகவல்களைக் கொண்டிருக்க தடயத்தை உருவாக்க முடியும் (எ. கா. தகவல் வகை). இந்த தகவல் பின்னர் குறியீடு செயல்திறனை அதிகரிக்க உகப்பாக்கம் கட்டத்தில் பயன்படுத்தப்படலாம். உகப்பாக்கம் மற்றும் குறியீடு-தலைமுறை கட்ட தடயங்கள் மேம்படுத்த எளிதானது, ஏனெனில் அவை ஒரே ஒரு செயல்படுத்தும் பாதையை மட்டுமே பிரதிநிதித்துவப்படுத்துகின்றன, அதாவது கட்டுப்பாட்டு ஓட்டம் இல்லை மற்றும் கையாளுதல் தேவையில்லை. நிலையான-துணை வெளிப்பாடு நீக்கம், இறந்த குறியீடு நீக்கம், பதிவு ஒதுக்கீடு, மாறாத-குறியீடு இயக்கம், நிலையான மடிப்பு மற்றும் தப்பிக்கும் பகுப்பாய்வு ஆகியவை பொதுவான உகப்பாக்கங்களில் அடங்கும். உகப்பாக்கப்பட்ட பிறகு, சுவடு இயந்திர குறியீடாக மாற்றப்படுகிறது. இதேபோல் தேர்வுமுறைக்கு, தடங்களின் நேரியல் தன்மை காரணமாக இது எளிதானது. செயலாக்கம் தடம் இயந்திரக் குறியீட்டில் தொகுக்கப்பட்ட பிறகு, அதை வளையத்தின் அடுத்தடுத்த மறு செய்கைகளில் செயல்படுத்தலாம். ஒரு காவலர் தோல்வியடையும் வரை ட்ரேஸ் மரணதண்டனை தொடர்கிறது. ஜேஐடிகளின் யோசனை 1960 களில் இருந்து வந்தாலும், ஜேஐடிகளின் தடமறிதல் சமீபத்தில்தான் அடிக்கடி பயன்படுத்தப்படுகிறது. ஜேஐடிகளைக் கண்டுபிடிப்பதற்கான இன்றைய யோசனையை ஒத்த ஒரு யோசனையின் முதல் குறிப்பு 1970 இல் இருந்தது. விளக்கத்தின் போது நிகழ்த்தப்பட்ட செயல்களை வெறுமனே சேமித்து வைப்பதன் மூலம் ஒரு மொழிபெயர்ப்பாளரிடமிருந்து தொகுக்கப்பட்ட குறியீட்டை ரன்-டைமில் பெற முடியும் என்பது கண்டறியப்பட்டது. தடமறிதலின் முதல் செயல்படுத்தல் டைனமோ ஆகும், "ஒரு மென்பொருள் மாறும் உகப்பாக்கம் அமைப்பு, இது செயலியில் செயல்படுத்தும்போது ஒரு சொந்த அறிவுறுத்தல் ஸ்ட்ரீமின் செயல்திறனை வெளிப்படையாக மேம்படுத்தும் திறன் கொண்டது". இதைச் செய்ய, ஒரு "சூடான" அறிவுறுத்தல் வரிசை காணப்படும் வரை சொந்த அறிவுறுத்தல் ஸ்ட்ரீம் விளக்கப்படுகிறது. இந்த வரிசைக்கு ஒரு உகந்த பதிப்பு உருவாக்கப்பட்டு, தற்காலிக சேமிப்பில் வைக்கப்பட்டு செயல்படுத்தப்படுகிறது. டைனமோ பின்னர் டைனாமோரியோ வரை நீட்டிக்கப்பட்டது. ஒரு டைனாமோரியோ அடிப்படையிலான திட்டம் தடமறிதல் மற்றும் பகுதி மதிப்பீட்டை இணைக்கும் மொழிபெயர்ப்பாளர் கட்டுமானத்திற்கான ஒரு கட்டமைப்பாகும். இது "மொழி அமலாக்கங்களிலிருந்து மொழிபெயர்ப்பாளர் மேல்நிலையை மாறும் வகையில் அகற்ற" பயன்படுத்தப்பட்டது. 2006 ஆம் ஆண்டில், உயர்மட்ட மொழிக்கான முதல் தடமறிதல் ஜேஐடி தொகுப்பாளரான ஹாட்பாத்விஎம் உருவாக்கப்பட்டது. இந்த விஎம் அடிக்கடி செயல்படுத்தப்படும் பைட் குறியீடு அறிவுறுத்தல்களை மாறும் வகையில் அடையாளம் காணும் திறன் கொண்டது, அவை கண்டுபிடிக்கப்பட்டு பின்னர் நிலையான ஒற்றை பணி (எஸ்எஸ்ஏ) கட்டுமானத்தைப் பயன்படுத்தி இயந்திரக் குறியீட்டிற்கு தொகுக்கப்படுகின்றன. வளங்கள் கட்டுப்படுத்தப்பட்ட மொபைல் சாதனங்களுக்கு திறமையான JVM ஐக் கொண்டிருப்பது ஹாட்பாத் VM இன் உந்துதலாகும். மொசில்லாவின் பயர்பாக்ஸ் (2009) க்கான ஜாவாஸ்கிரிப்ட் செயல்பாடுகளில் ஒன்றான ட்ரேஸ்மாங்கி ஒரு தடமறிதல் JIT இன் மற்றொரு எடுத்துக்காட்டு ஆகும். ட்ரேஸ்மாங்கி இயக்க நேரத்தில் மாறும் மொழியான ஜாவாஸ்கிரிப்டில் அடிக்கடி செயல்படுத்தப்படும் வளைய தடயங்களை தொகுக்கிறது மற்றும் ஒவ்வொரு பாதையிலும் நிகழும் உண்மையான மாறும் வகைகளுக்கான உருவாக்கப்பட்ட குறியீட்டை நிபுணத்துவம் செய்கிறது. ஜேஐடிகளை தடமறிதலைப் பயன்படுத்தும் மற்றொரு திட்டம் பைபை ஆகும். இது பைபியின் மொழிபெயர்ப்பு கருவி சங்கிலியுடன் எழுதப்பட்ட மொழி அமலாக்கங்களுக்கு ஜேஐடிகளைக் கண்டுபிடிப்பதற்கான பயன்பாட்டை செயல்படுத்துகிறது, இதனால் அந்த மொழிபெயர்ப்பாளரைப் பயன்படுத்தி செயல்படுத்தப்படும் எந்தவொரு நிரலின் செயல்திறனையும் மேம்படுத்துகிறது. மொழிபெயர்ப்பாளரால் செயல்படுத்தப்படும் நிரலுக்கு பதிலாக, மொழிபெயர்ப்பாளரைக் கண்டுபிடிப்பதன் மூலம் இது சாத்தியமாகும். மைக்ரோசாப்ட் அவர்களின் பொது இடைநிலை மொழிக்கான (சிஐஎல்) எஸ். பி. யு. ஆர் திட்டத்தில் ஜேஐடிகளைக் கண்டுபிடிப்பதையும் ஆராய்ந்துள்ளது. எஸ். பி. யு. ஆர் என்பது சி. ஐ. எல்-க்கான ஒரு பொதுவான தடமறிதல் ஆகும், இது ஜாவாஸ்கிரிப்ட் செயல்படுத்தல் மூலம் கண்டறியவும் பயன்படுத்தப்படலாம். ஒரு தடத்தின் எடுத்துக்காட்டு பின்வரும் பைதான் நிரலைக் கருத்தில் கொள்ளுங்கள், இது அடுத்தடுத்த முழு எண்களின் வர்க்கங்களின் கூட்டுத்தொகையை அந்த தொகை 100000 ஐத் தாண்டும் வரை கணக்கிடுகிறதுஃ வரையறை வர்க்கம் (x): திரும்ப x * x i = 0 y = 0 அதே நேரத்தில் சரிஃ y + = வர்க்கம் (i) என்றால் y> 100000: இடைவெளி i = i + 1 இந்த நிரலுக்கான ஒரு தடம் இப்படி இருக்கலாம்ஃ லூப்ஸ்டார்ட் (i1, y1) i2 = int _ mul (i1, i1) #x * x y2 = int _ add (y1, i2) #y + = i * i b1 = int _ gt (y2,100000) காப்பாளர் _ தவறு (b1) i3 = int _ add (i1 குறியீடு தலைமுறை டால்விக் ஹாட்ஸ்பாட் மொழிபெயர்ப்பாளர் சுயவிவரம்-வழிகாட்டப்பட்ட உகப்பாக்கம் RPython சொற்பொருள் அகராதி குறியீட்டு குறிப்புகள் வெளிப்புற இணைப்புகள் லுயாஜிட் தொகுப்பு கட்டுமான மென்பொருள் உகப்பாக்கம் அதிகாரப்பூர்வ வலைத்தளம் எடுத்துக்காட்டாக பைதான் (நிரலாக்க மொழி) குறியீட்டைக் கொண்ட கட்டுரைகள்