Code motion
કોમ્પ્યુટર વિજ્ઞાનમાં, કોડ ગતિ, જેને કોડ હસ્ટિંગ, કોડ સિંકિંગ, લૂપ-ઇનવેરિયન્ટ કોડ ગતિ અથવા કોડ ફેક્ટરિંગ તરીકે પણ ઓળખવામાં આવે છે, તે કોઈપણ પ્રક્રિયા માટે બ્લેન્કેટ શબ્દ છે જે પ્રદર્શન અથવા કદના લાભો માટે પ્રોગ્રામની અંદર કોડ ખસેડે છે, અને તે સામાન્ય ઓપ્ટિમાઇઝેશન છે જે મોટાભાગના ઓપ્ટિમાઇઝિંગ કમ્પાઇલર્સમાં કરવામાં આવે છે. તેની આસપાસના શબ્દોના અસંગત અર્થને કારણે વિવિધ પ્રકારની કોડ ગતિ વચ્ચે તફાવત કરવો મુશ્કેલ બની શકે છે. યુઝ કોડ મોશનના વિવિધ ઉપયોગો અને લાભો છે, જેમાંથી ઘણા તેમના અમલીકરણમાં એકબીજાને ઓવરલેપ કરે છે. વણવપરાયેલી/નકામી કામગીરીઓને દૂર કરવી કોડ સિંકિંગ, જેને આળસુ કોડ ગતિ તરીકે પણ ઓળખવામાં આવે છે, તે એક એવી તકનીક માટેનો શબ્દ છે જે નકામી સૂચનાઓને શાખાઓમાં ખસેડીને ઘટાડે છે જેમાં તેનો ઉપયોગ થાય છેઃ જો કોઈ કામગીરી શાખા પહેલાં ચલાવવામાં આવે છે, અને શાખા પાથમાંથી માત્ર એક જ તે કામગીરીના પરિણામનો ઉપયોગ કરે છે, તો કોડ સિંકિંગમાં તે કામગીરીને તે શાખામાં ખસેડવાનો સમાવેશ થાય છે જ્યાં તેનો ઉપયોગ કરવામાં આવશે. આ તકનીક એ અર્થમાં ડેડ કોડ નાબૂદીનું એક સ્વરૂપ છે કે જ્યારે તેના પરિણામો કાઢી નાખવામાં આવે અથવા તેનો ઉપયોગ કરવામાં ન આવે ત્યારે તે કોડને દૂર કરે છે, પરંતુ ડેડ કોડ નાબૂદીથી વિપરીત, તે નિરર્થક સૂચનાઓને દૂર કરી શકે છે, ભલે તે સૂચનાના પરિણામોનો એક્ઝેક્યુશન કોડ પાથમાં સંભવિત ઉપયોગ હોય. પ્રોગ્રામ કોડ ફેક્ટરિંગનું કદ ઘટાડવું એ કદ-ઓપ્ટિમાઇઝેશન તકનીક માટેનો એક શબ્દ છે જે શાખાઓમાં સામાન્ય અવલંબનને તેની ઉપરની શાખામાં ભેળવે છે. જેમ પૂર્ણાંકોને ફેક્ટરાઇઝ કરવાથી સંખ્યા તેના સૌથી નાના સંભવિત સ્વરૂપોમાં (પરિબળો તરીકે) વિઘટિત થાય છે, તેમ કોડ ફેક્ટરાઇઝેશન કોડને સૌથી નાના સંભવિત સ્વરૂપમાં પરિવર્તિત કરે છે, જ્યાં સુધી કોઈ ડુપ્લિકેટ ન રહે ત્યાં સુધી સામાન્ય "પરિબળો" ને મર્જ કરીને. અવલંબન ઘટાડવું વૈશ્વિક કોડ ગતિ, સ્થાનિક કોડ ગતિ, કોડ સમયપત્રક, સૂચના સમયપત્રક અને કોડ હસ્ટિંગ/સિંકિંગ એ તમામ એવી તકનીક માટેના શબ્દો છે જ્યાં CPU ની અંદર અમલની કાર્યક્ષમતામાં સુધારો કરવા માટે સૂચનાઓને ફરીથી ગોઠવવામાં આવે છે (અથવા "સુનિશ્ચિત"). આધુનિક સીપીયુ ઘડિયાળ ચક્ર દીઠ પાંચ કે તેથી વધુ સૂચનાઓ સુનિશ્ચિત કરવામાં સક્ષમ છે. જો કે, CPU એ સૂચનાને સુનિશ્ચિત કરી શકતું નથી જે હાલમાં (અથવા હજુ સુધી ચલાવવામાં આવેલ નથી) સૂચનાના ડેટા પર આધાર રાખે છે. કમ્પાઇલર્સ અવલંબનને એવી રીતે એકબીજા સાથે જોડી દેશે કે જે CPU કોઈપણ સમયે પ્રક્રિયા કરી શકે તેવી સૂચનાઓની માત્રાને મહત્તમ કરે. નિષ્ક્રિય ઇન્ટેલ આઇટેનીયમ આર્કિટેક્ચર પર, શાખા આગાહી (બી. આર. પી.) સૂચના કમ્પાઇલર દ્વારા શાખાઓની ઉપર જાતે જ લહેરાવવામાં આવે છે જેથી શાખા સી. પી. યુ. દ્વારા તરત જ લેવામાં આવે. આઇટેનીયમ પ્રોસેસરમાં કાર્યક્ષમતા વધારવા માટે CPUમાંથી વધારાના કોડ સમયપત્રક પર આધાર રાખે છે. લૂપ-ઇનવેરિયન્ટ કોડ ગતિ લૂપ-ઇનવેરિયન્ટ કોડ ગતિ એ લૂપ-ઇનવેરિયન્ટ કોડને લૂપની બહારની સ્થિતિમાં ખસેડવાની પ્રક્રિયા છે, જે સમાન પરિણામ માટે કેટલીક ગણતરીઓને બે વાર કરવાથી અટકાવીને લૂપના અમલના સમયને ઘટાડી શકે છે. કમ્પાઇલર ઉદાહરણો એલ. એલ. વી. એમ. એલ. એલ. વી. એમ. તેના એક સ્થિર સોંપણી સ્વરૂપમાં સિંકિંગ પાસ ધરાવે છે. જો તેના કોઈપણ કોડ પાથમાં સ્ટોર સૂચના શામેલ હોય, અથવા જો તે કોઈ ભૂલ કરી શકે તો LLVM 15 ઓપરેશનને ડૂબી જશે નહીં. વધુમાં, એલ. એલ. વી. એમ. કોઈ સૂચનાને લૂપમાં ડૂબી જશે નહીં. જી. સી. સી. જી. એન. યુ. કમ્પાઇલર કલેક્શન સંકલિત પ્રોગ્રામના કદને ઘટાડવાના હેતુથી "કોડ ફેક્ટરીંગ" નામ હેઠળ કોડ ગતિનો અમલ કરે છે. જી. સી. સી. કોઈપણ કોડને ઉપર અથવા નીચે તરફ ખસેડશે જો તે "કોઈ પણ પ્રવર્તમાન અવલંબનને અમાન્ય કરતું નથી અથવા નવા રજૂ કરતું નથી". લ્યુએજીઆઇટી લૂપમાં કામચલાઉ વસ્તુઓની ફાળવણી અને સંગ્રહ કરવા માટે સંકલિત કોડના સમયને ઘટાડવા માટે "એલોકેશન સિંકિંગ" નામ હેઠળ કોડ સિંકિંગનો ઉપયોગ કરે છે. ફાળવણી ડૂબવું ફાળવણીને અમલના માર્ગો પર ખસેડે છે જ્યાં ફાળવેલ પદાર્થ એક્ઝિક્યુટિવ કોડમાંથી છટકી શકે છે, અને આમ ઢગલાની ફાળવણીની જરૂર પડશે. દૂર કરવામાં આવેલી તમામ ફાળવણીઓ તેમના ક્ષેત્રો પર લોડ-ટુ-સ્ટોર ફોરવર્ડિંગથી ભરવામાં આવે છે. લૂપ-ઇનવેરિયન્ટ કોડ ગતિ સૂચના સમયપત્રક નિર્ભરતા આલેખ સંદર્ભો કમ્પાઇલર ઓપ્ટિમાઇઝેશન પણ જુઓ.