উত্তর:
nproc
উপলব্ধ সিপিইউ কর / থ্রেডের সংখ্যা দেয়, যেমন একটি চতুর্ভুজ কোর CPU- র দ্বি-মুখী শ্রীমতি সমর্থনকারী উপর 8।
বিকল্পটি make
ব্যবহারের সাথে সমান্তরালভাবে আপনি যে কাজগুলি চালাতে পারবেন -j
তা বিভিন্ন কারণের উপর নির্ভর করে:
make
কাজেরmake
I / O- বা CPU- সীমাবদ্ধ কাজের পরিমাণটিmake -j$(nproc)
শুরু করার জন্য একটি শালীন জায়গা, তবে আপনি যতক্ষণ না আপনার উপলভ্য স্মৃতিশক্তি নিঃসরণ করেন এবং আঘাত হ্রাস না করেন ততক্ষণ আপনি সাধারণত উচ্চতর মানগুলি ব্যবহার করতে পারেন।
সত্যিই দ্রুত বিল্ডগুলির জন্য, যদি আপনার পর্যাপ্ত স্মৃতি থাকে তবে আমি একটি ব্যবহারের পরামর্শ দিই tmpfs
, make -j$(nproc)
সেইভাবে বেশিরভাগ কাজ সিপিইউ-আবদ্ধ হবে এবং যত দ্রুত সম্ভব কাজ করবে।
tmpfs
করি তবে আমি কি এমন কোনও ডিরেক্টরি আকারের মধ্যে সীমাবদ্ধ থাকব যা আমার শারীরিক র্যাম আকারের চেয়ে সর্বদা ছোট?
time
কলটিতে মেকটি लपेटতে পারেন । ফলাফলগুলি পরিষ্কার করুন, পুনরায় বার বার ধুয়ে নিন - এবং সময় / জে মানের মান অনুসারে বাছাই করুন।
দুর্ভাগ্যক্রমে একই বিল্ডের বিভিন্ন অংশগুলি বিবাদী জে ফ্যাক্টর মানগুলির সাথে সর্বোত্তম হতে পারে, যা তৈরি হচ্ছে তার উপর নির্ভর করে, কীভাবে, সেই সময়কার সিস্টেমের মধ্যে কোনটি বাধা হয়, বিল্ড মেশিনে আর কী ঘটছে, কী চলছে? নেটওয়ার্ক (যদি বিতরণ বিল্ড কৌশল ব্যবহার করে), একটি বিল্ডের সাথে জড়িত অনেক ক্যাশে সিস্টেমের স্থিতি / অবস্থান / কার্যকারিতা ইত্যাদি
100 টি ক্ষুদ্র সি ফাইল সংকলন একটি একক বিশাল ফাইল বা বিপরীত সংকলনের চেয়ে দ্রুততর হতে পারে। বিশাল পরিমাণে সোজা-ফরওয়ার্ড / লিনিয়ার কোড তৈরির চেয়ে ছোট অতি সংশ্লেষিত কোড তৈরি করা ধীর হতে পারে।
এমনকি বিল্ডের বিষয়গুলির প্রসঙ্গেও - একচেটিয়া, অ-ওভারল্যাপিং বিল্ডগুলির জন্য ডেডিকেটেড সার্ভারগুলিতে জরিমানা তৈরির জন্য অপ্টিমাইজড এজে ফ্যাক্টর ব্যবহার করা খুব একইরকম ফলাফল পেতে পারে যখন একই অংশীদারি সার্ভারের সমান্তরালে বিল্ডিংগুলি বিল্ডিং ব্যবহার করে (প্রতিটি বিল্ড আরও বেশি সময় নিতে পারে) সিরিয়ালযুক্ত হয়ে থাকলে তাদের সাথে মিলিয়ে) বা বিভিন্ন হার্ডওয়্যার কনফিগারেশন বা ভার্চুয়ালাইজড সহ সার্ভারে সময় time
বিল্ড স্পেসিফিকেশনের সঠিকতার দিকটিও রয়েছে। খুব জটিল বিল্ডে রেস শর্ত থাকতে পারে যা বিরতিহীনভাবে বিল্ড ব্যর্থতা ঘটায় এমন হারের সাথে যা জে ফ্যাক্টরের বৃদ্ধি বা হ্রাসের সাথে বন্যভাবে পরিবর্তিত হতে পারে।
আমি যেতে এবং যেতে পারেন। মুল বক্তব্যটি হ'ল আপনাকে অবশ্যই আপনার বিল্ডটি আপনার খুব প্রসঙ্গে আপনার মূল্যায়ন করতে হবে যার জন্য আপনি জে ফ্যাক্টরটি অনুকূলিত করতে চান। @ জেফ শ্যাচলারের মন্তব্য প্রযোজ্য: যতক্ষণ না আপনি নিজের সেরা ফিট খুঁজে পান ততক্ষণ পুনরাবৃত্তি করুন। ব্যক্তিগতভাবে আমি এনপ্রোক মান থেকে শুরু করব, উপরের দিকে এবং নীচের দিকে কেবল তখনই চেষ্টা করুন যদি উপরের দিকে চেষ্টাগুলি অবিলম্বে অবক্ষয় দেখায়।
আপনার পরিমাপের প্রকরণের বৈচিত্র্যের ধারণা পাওয়ার জন্য প্রথমে অনুমানিত অভিন্ন প্রেক্ষাপটে কয়েকটি অভিন্ন বিল্ডগুলি পরিমাপ করা ভাল ধারণা হতে পারে - যদি খুব বেশি হয় তবে এটি আপনার সম্পূর্ণ অপ্টিমাইজেশান প্রচেষ্টাকে বিপদে ফেলতে পারে (20% পরিবর্তনশীলতা 10% উন্নতি / পুরোপুরি গ্রহন করবে) জে ফ্যাক্টর অনুসন্ধানে অবক্ষয় পড়া)।
শেষ অবধি, আইএমএইচও যদি কোনও স্থির জে ফ্যাক্টরের পরিবর্তে সমর্থিত এবং উপলব্ধ থাকে তবে একটি (অভিযোজিত) জবসার ব্যবহার করা আরও ভাল - এটি ধারাবাহিকভাবে বৃহত্তর পরিসরগুলির মধ্যে আরও ভাল বিল্ড পারফরম্যান্স সরবরাহ করে।
-j
প্যারামিটারের সাথে কোনও নির্দিষ্ট নম্বর পাস করার বিষয়ে আপনি মন্তব্য করতে পারেন ? যেমনmake -j
make -j
নির্ভরতা যেমন কাঁটাচামচ বোমার মতো অনুমতি দেয় তত বেশি চাকরি উত্সাহিত করবে ( superuser.com/questions/927836/… ); প্রসেসগুলি পরিচালনা করার চেয়ে বেশিরভাগ সিপিইউ ব্যয় করার ক্ষেত্রে বিল্ডটি ক্রল করবে ( সুপারুজার.কিউশনস / ৯৪৩68৮৫ /)) এবং অত্যন্ত সমান্তরাল বিল্ডগুলিতে সিস্টেমটি মেমরি / অদলবদল বা পিড # এর বাইরে চলে যাবে এবং বিল্ডটি ব্যর্থ হবে ।
সর্বাধিক সরল-প্রিয় উপায় হ'ল এর nproc
মতো ব্যবহার করা :
make -j`nproc`
কমান্ডটি nproc
আপনার মেশিনে কোরগুলির সংখ্যা ফিরিয়ে দেবে। এটি টিক্সের মধ্যে মোড়কের মাধ্যমে, nproc
কমান্ডটি প্রথমে কার্যকর করবে, একটি নম্বর ফেরত দেবে এবং সেই নম্বরটি উত্তীর্ণ হবে make
।
আপনার কাছে কিছু কৌতুকপূর্ণ অভিজ্ঞতা থাকতে পারে যেখানে মূল সংকলন + 1 দ্রুত সংকলনের সময়ে ফলাফল করে। আই / ও বিলম্ব, অন্যান্য সংস্থান দেরি এবং সংস্থানসমূহের অন্যান্য সহজলভ্যতার মতো বিষয়গুলির সাথে এর আরও বেশি সম্পর্ক রয়েছে।
এটি করার জন্য nproc+1
এটি ব্যবহার করে দেখুন:
make -j$((`nproc`+1))
make
ভার্চুয়াল সিপিইউ যতটা সমান্তরাল কর্মী ব্যবহার করার জন্য আপনি যদি কমান্ডটি লিখতে চান তবে আমি ব্যবহার করার পরামর্শ দিই:
nproc | xargs -I % make -j%
যা হয় স্ট্যান্ডেলোন কমান্ড হিসাবে বা RUN
নির্দেশকের মধ্যে যেমন লেখা যেতে পারে Dockerfile
(যেমন ডকার নেস্টেড আদেশগুলি সমর্থন করে না)
ccache
পরে পুনর্নির্মাণের জন্য তবে এটি ওটি