Code motion
কম্পিউটার বিজ্ঞানে, কোড গতি, যা কোড উত্তোলন, কোড সিঙ্কিং, লুপ-ইনভ্যারিয়েন্ট কোড গতি বা কোড ফ্যাক্টরিং নামেও পরিচিত, এমন কোনও প্রক্রিয়ার জন্য একটি কম্বল শব্দ যা কর্মক্ষমতা বা আকারের সুবিধার জন্য কোনও প্রোগ্রামের মধ্যে কোড সরিয়ে দেয় এবং এটি বেশিরভাগ অপ্টিমাইজিং কম্পাইলারগুলিতে সঞ্চালিত একটি সাধারণ অপ্টিমাইজেশন। এর চারপাশের পদগুলির অসঙ্গতিপূর্ণ অর্থের কারণে বিভিন্ন ধরনের কোড গতির মধ্যে পার্থক্য করা কঠিন হতে পারে। ইউজেস কোড মোশনের বিভিন্ন ব্যবহার এবং সুবিধা রয়েছে, যার মধ্যে অনেকগুলি তাদের বাস্তবায়নে একে অপরকে ওভারল্যাপ করে। অব্যবহৃত/অকেজো ক্রিয়াকলাপগুলি অপসারণ কোড সিঙ্কিং, যা অলস কোড গতি নামেও পরিচিত, এমন একটি কৌশলের জন্য একটি শব্দ যা ব্যবহৃত শাখাগুলিতে নির্দেশাবলী সরিয়ে নষ্ট নির্দেশাবলী হ্রাস করেঃ যদি কোনও শাখার আগে কোনও ক্রিয়াকলাপ কার্যকর করা হয় এবং কেবল একটি শাখা পথ সেই ক্রিয়াকলাপের ফলাফল ব্যবহার করে, তবে কোড সিঙ্কিং সেই ক্রিয়াকলাপটিকে সেই শাখায় স্থানান্তরিত করে যেখানে এটি ব্যবহার করা হবে। এই কৌশলটি ডেড কোড অপসারণের একটি রূপ এই অর্থে যে এটি কোড অপসারণ করে যখন এর ফলাফলগুলি বাতিল বা অব্যবহৃত হয়, তবে ডেড কোড অপসারণের বিপরীতে, এটি অর্থহীন নির্দেশাবলী অপসারণ করতে পারে এমনকি যদি সেই নির্দেশের ফলাফলগুলির একটি কার্যকর কোড পথে সম্ভাব্য ব্যবহার থাকে। কোড ফ্যাক্টরিং প্রোগ্রামের আকার হ্রাস করা একটি সাইজ-অপ্টিমাইজেশন কৌশলের জন্য একটি শব্দ যা শাখাগুলিতে সাধারণ নির্ভরশীলতাগুলিকে তার উপরের শাখায় একীভূত করে। ঠিক যেমন পূর্ণসংখ্যার গুণনীয়ক একটি সংখ্যাকে তার ক্ষুদ্রতম সম্ভাব্য আকারে (কারণ হিসাবে) বিভক্ত করে, কোড গুণনীয়ককরণ কোডটিকে সবচেয়ে ছোট সম্ভাব্য আকারে রূপান্তরিত করে, সাধারণ "কারণগুলি" একত্রিত করে যতক্ষণ না কোনও প্রতিলিপি অবশিষ্ট থাকে। গ্লোবাল কোড গতি, স্থানীয় কোড গতি, কোড সময়সূচী, নির্দেশ সময়সূচী এবং কোড উত্তোলন/ডুবানো এমন একটি কৌশলের জন্য সমস্ত শব্দ যেখানে সিপিইউর মধ্যে কার্যকর করার দক্ষতা উন্নত করার জন্য নির্দেশাবলী পুনর্বিন্যস্ত (বা "নির্ধারিত") করা হয়। আধুনিক সিপিইউগুলি প্রতি ঘড়ির চক্রে পাঁচ বা ততোধিক নির্দেশাবলী নির্ধারণ করতে সক্ষম। যাইহোক, একটি সিপিইউ এমন একটি নির্দেশ নির্ধারণ করতে পারে না যা বর্তমানে (বা এখনও কার্যকর করা হয়নি) নির্দেশ থেকে প্রাপ্ত তথ্যের উপর নির্ভর করে। কম্পাইলারগুলি নির্ভরশীলতাগুলিকে এমনভাবে ইন্টারলিভ করবে যা কোনও সিপিইউ যে কোনও সময়ে প্রক্রিয়া করতে পারে এমন নির্দেশাবলীর পরিমাণকে সর্বাধিক করে। নিষ্ক্রিয় ইন্টেল ইটানিয়াম আর্কিটেকচারে, কম্পাইলার দ্বারা শাখা পূর্বাভাস (বি. আর. পি) নির্দেশটি ম্যানুয়ালি শাখাগুলির উপরে উত্তোলন করা হয় যাতে শাখাটি অবিলম্বে সিপিইউ দ্বারা নেওয়া যায়। প্রসেসরে দক্ষতা বাড়ানোর জন্য ইটানিয়াম সিপিইউ থেকে অতিরিক্ত কোড সময়সূচীর উপর নির্ভর করে। লুপ-ইনভ্যারিয়েন্ট কোড মোশন হল লুপ-ইনভ্যারিয়েন্ট কোডকে লুপের বাইরে একটি অবস্থানে নিয়ে যাওয়ার প্রক্রিয়া, যা একই ফলাফলের জন্য কিছু গণনাকে দুবার করা থেকে বিরত করে লুপের কার্যকর করার সময়কে হ্রাস করতে পারে। সংকলকের উদাহরণ এল. এল. ভি. এম এল. এল. ভি. এম-এর একক স্ট্যাটিক অ্যাসাইনমেন্ট ফর্মে একটি সিঙ্কিং পাস রয়েছে। এল. এল. ভি. এম 15 একটি অপারেশনকে ডুবিয়ে দেবে না যদি এর কোনও কোড পাথ একটি দোকান নির্দেশ অন্তর্ভুক্ত করে, অথবা যদি এটি একটি ত্রুটি নিক্ষেপ করতে পারে। উপরন্তু, এল. এল. ভি. এম একটি নির্দেশকে একটি লুপে ডুবিয়ে দেবে না। জিসিসি জিএনইউ কম্পাইলার কালেকশন একটি সংকলিত প্রোগ্রামের আকার হ্রাস করার উদ্দেশ্যে "কোড ফ্যাক্টরিং" নামে কোড গতি প্রয়োগ করে। জিসিসি যে কোনও কোডকে উপরের দিকে বা নীচের দিকে সরিয়ে দেবে যদি এটি "কোনও বিদ্যমান নির্ভরশীলতাকে অবৈধ করে না বা নতুন প্রবর্তন না করে"। লুয়াজিট লুয়াজিট একটি লুপের মধ্যে অস্থায়ী বস্তু বরাদ্দ এবং সংগ্রহের জন্য সংকলিত কোডের ব্যয় হ্রাস করতে "বরাদ্দ ডুবানো" নামে কোড ডুবানো ব্যবহার করে। বরাদ্দ ডুবিয়ে বরাদ্দগুলি কার্যকর করার পথে নিয়ে যায় যেখানে বরাদ্দকৃত বস্তুটি কার্যকর করার কোড থেকে বেরিয়ে আসতে পারে এবং এইভাবে হিপ বরাদ্দের প্রয়োজন হবে। সমস্ত অপসারিত বরাদ্দগুলি তাদের ক্ষেত্রগুলিতে লোড-টু-স্টোর ফরওয়ার্ডিং দিয়ে পূরণ করা হয়। আরও দেখুন লুপ-ইনভ্যারিয়েন্ট কোড গতি নির্দেশ নির্ভরতার সময়সূচী গ্রাফ রেফারেন্স কম্পাইলার অপ্টিমাইজেশান