কতগুলি থ্রেড ব্যবহার করতে হয়?


11

যখন আমি (পুনরায়) ডেস্কটপ / ল্যাপটপ কম্পিউটারে বৃহত সিস্টেমগুলি তৈরি করি, তখন আমি makeসংকলনের গতি বাড়ানোর জন্য একাধিক থ্রেড ব্যবহার করতে বলি , যেমন:

$ make -j$[ $K * $C ]

কোথায় $Cসংখ্যা নির্দেশ করার জন্য অনুমিত হয় কোর , মেশিন আছে (যা আমরা একটি ডিজিট সঙ্গে একটি সংখ্যা হতে অনুমান করতে পারেন) যখন $Kআমি থেকে পৃথক হতে হয় 2থেকে 4, আমার মেজাজ উপর নির্ভর করে।

সুতরাং, উদাহরণস্বরূপ, আমি বলতে পারি make -j12যদি আমার কাছে 4 টি কোর থাকে তবে make12 টি পর্যন্ত থ্রেড ব্যবহার করার ইঙ্গিত দিচ্ছে ।


আমার যুক্তিটি হ'ল, যদি আমি কেবল $Cথ্রেড ব্যবহার করি তবে প্রসেসগুলি ড্রাইভ থেকে ডেটা আনতে ব্যস্ত থাকাকালীন অলস থাকবে। তবে আমি যদি থ্রেডের সংখ্যা সীমাবদ্ধ না রাখি (যেমন make -j) আমি সময় স্যুইচিং প্রসঙ্গে নষ্ট করার ঝুঁকিটি চালাচ্ছি, স্মৃতি থেকে দূরে চলেছি বা আরও খারাপ । আসুন ধরে নেওয়া যাক মেশিনটির $Mজিগস রয়েছে মেমরির (যেখানে $M10 এর ক্রম রয়েছে)।

সুতরাং আমি ভাবছিলাম যে চালানোর জন্য সবচেয়ে দক্ষ সংখ্যক থ্রেড বেছে নেওয়ার জন্য যদি কোনও প্রতিষ্ঠিত কৌশল আছে।


অনেক ক্ষেত্রে থ্রেডের সংখ্যার সঠিক উত্তরটি কোর সংখ্যা হতে চলেছে। তবে নিশ্চিত হয়ে ওঠার একমাত্র উপায় হ'ল কিছু পরীক্ষা চালানো, যতক্ষণ না আপনি মিষ্টি স্পট সন্ধান করেন ততক্ষণ থ্রেডের সংখ্যাকে পৃথক করে।
রবার্ট হার্ভে

@ রবার্টহারভে: হ্যাঁ, আমি সম্ভবত গিয়েছিলাম এবং সারা রাত ধরে সমস্ত ধরণের সেটিংসের সাথে একটি শেল স্ক্রিপ্ট সংকলন করব, তবে আমি ভেবেছিলাম যে এখানে এ সম্পর্কে কিছু জ্ঞান আছে কিনা।
বিটমাস্ক

4
অনেক লোক $ core + 1 পরামর্শ দেয়, তাই 1 সংকলক প্রক্রিয়াটি ডিস্ক থেকে 4 টি সংকলন করার সময় পড়ে। একটি জেনেরিক পরামর্শ কঠোর, এছাড়াও কোড বেসের উপর নির্ভর করে (সি ++ টেম্পলেট অতিরিক্ত ব্যবহার বনাম কয়েকটি সি ফাংশন সহ ছোট সংকলন ইউনিট), সংকলক শৃঙ্খলা (পূর্বনির্ধারিত শিরোনাম ইত্যাদি?) এবং বিল্ড স্ট্রাকচার (এটি কি কেবল একটি বড় জিনিসকে সংযুক্ত করছে? এর মধ্যে শেষ বা একাধিক ছোট জিনিস)
জোহনেস

1
আপনি যদি গুরুত্ব সহকারে পারফরম্যান্সের সন্ধান করেন তবে আমি র‌্যাম ডিস্ক বা আপনার আই / ও হ্রাস করার কোনও অন্য পদ্ধতি স্থাপনের পরামর্শ দিচ্ছি। আমি মনে করি না সিপিইউ ব্যবহার আপনার হট স্পট।
টিএমএন

@ টিএমএন: র‌্যাম ডিস্ক কীভাবে সাহায্য করে? লিনাক্স কাপড় ক্যাশিং (তোমার দিকে বেশ ভাল না , ডান হেডার ফাইল মানে?), ড্রাইভ ক্যাশে উল্লেখ না। আমাকে ম্যানুয়ালি বা বিল্ড স্ক্রিপ্ট পরিবর্তন করে (যা একেবারে ওভারকিল হবে) প্রথমে shm এ লোড করতে হবে।
বিটমাস্ক

উত্তর:


15

আমি দুটি কোরের এবং 8 গিগাবাইট র‌্যাম সহ একটি মেশিনে এলএলভিএম (ডিবাগ + অ্যাসেটস মোডে) তৈরি করে একটি ধারাবাহিক পরীক্ষা চালিয়েছি:

কাজের সংখ্যার উপর নির্ভর করে llvm সময় সংকলন

অদ্ভুতভাবে যথেষ্ট, এটি 10 ​​টা অবধি উঠবে বলে মনে হচ্ছে এবং তারপরে হঠাৎ করে দু'টি কাজ নিয়ে সময় নিচে নেমে আসবে (একটি কাজ গ্রাফের অন্তর্ভুক্ত নয়, দ্বিগুণ সময় নেয়)।

7*$coresএই ক্ষেত্রে ন্যূনতম বলে মনে হচ্ছে ।


1
প্রকৃত পরীক্ষার জন্য +1 এবং অনুমান না করা।
মার্টিন উইকম্যান

3

আমি জেন্টু লিনাক্স (উত্স-ভিত্তিক বিতরণ) চালিয়ে যাচ্ছি এবং আমার অভিজ্ঞতা থেকে আমি বলতে পারি যে (কম বেশি সাম্প্রতিক হার্ডওয়্যার সহ) n*2 + xসেরা মান। আমাকে এটি ব্যাখ্যা করুন:

  • n*2: এমনকি ধীরে ধীরে সিপিইউতেও একবারে 2 টি কাজ চালানোর পর্যাপ্ত শক্তি রয়েছে। সর্বাধিক সংকলনের কাজগুলি খুব দ্রুত সম্পন্ন হয়।
  • +xএই সংখ্যাটি আপনার সিস্টেমে নির্ভর করে (প্রধানত মেমরি এবং ডিস্ক)। আপনার যদি পর্যাপ্ত র‍্যাম এবং একটি ফাস্ট ডিস্ক থাকে তবে সেট করুন x=n। তবে এটি সোর্স কোডের উপর নির্ভর করে (ওপেন অফিস, আমি আপনাকে দেখছি!) এবং ব্যবহৃত ভাষা (সি / সি ++ সংকলন খুব স্মৃতিশক্তি সহকারে)।

তবে -jসেরা নম্বর পেতে আপনাকে কয়েকটি মান সহ কিছু পরীক্ষা চালাতে হবে। এছাড়াও, বিল্ড প্রক্রিয়াটির অন্যান্য পদক্ষেপগুলিকে সমান্তরাল করার চেষ্টা করুন: আনপ্যাকিং, চলমান configureএবং আরও অনেক কিছু।


আমি এই মুহুর্তে বেশিরভাগ সি ++ এর সাথে উদ্বিগ্ন এবং আমার ডিস্কগুলি দ্রুত নয়, আমার ধারণা।
বিটমাস্ক

তারপরে এন * 1.5 দিয়ে শুরু করুন এবং সংকলনের সময় কমতে না আসা পর্যন্ত এটি বাড়িয়ে নিন (প্রতিবার আপনি ডিস্ক ক্যাশে / সংকলন ক্যাশে পরিষ্কার করেছেন তা নিশ্চিত করুন)। এছাড়াও, সংকলনের গতি বাড়ানোর জন্য ccache ( ccache.samba.org ) ব্যবহার করার কথা ভাবুন ।
ercpe
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.