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