মাল্টিকোর প্রসেসরগুলিতে থ্রেড বরাদ্দ কীভাবে প্রোগ্রাম করবেন?


13

আমি একটি বহু-কোর প্রসেসরের উপর থ্রেড নিয়ে পরীক্ষা করতে চাই, উদাহরণস্বরূপ এমন একটি প্রোগ্রাম তৈরি করতে যাতে দুটি পৃথক থ্রেড ব্যবহার করা হয় যা দুটি পৃথক প্রসেসরের কোর দ্বারা সম্পাদিত হয়।

তবে এটি আমার কাছে পরিষ্কার নয় যে কোন স্তরে থ্রেডগুলি বিভিন্ন কোরকে বরাদ্দ দেওয়া হয়। আমি নিম্নলিখিত পরিস্থিতিতে (অপারেটিং সিস্টেম এবং প্রোগ্রামিং ভাষার প্রয়োগের উপর নির্ভর করে) কল্পনা করতে পারি:

  1. থ্রেড বরাদ্দ অপারেটিং সিস্টেম দ্বারা পরিচালিত হয়। থ্রেডগুলি ওএস সিস্টেম কল ব্যবহার করে তৈরি করা হয় এবং, যদি প্রক্রিয়াটি কোনও মাল্টি-কোর প্রসেসরে চালিত হয় তবে ওএস স্বয়ংক্রিয়ভাবে বিভিন্ন কোরগুলিতে বিভিন্ন থ্রেড বরাদ্দ / সময়সূচী করার চেষ্টা করে।
  2. থ্রেড বরাদ্দ প্রোগ্রামিং ভাষা প্রয়োগের মাধ্যমে পরিচালিত হয়। থ্রেডগুলিকে বিভিন্ন কোরে বরাদ্দকরণের জন্য বিশেষ সিস্টেম কল প্রয়োজন, তবে আমি যখন সেই ভাষার জন্য স্ট্যান্ডার্ড থ্রেড প্রয়োগ করি তখন প্রোগ্রামিং ভাষার মানক থ্রেড লাইব্রেরি স্বয়ংক্রিয়ভাবে এটিকে হ্যান্ডেল করে।
  3. থ্রেড বরাদ্দ অবশ্যই স্পষ্টভাবে প্রোগ্রাম করা উচিত। আমার প্রোগ্রামে কয়টি কোর পাওয়া যায় তা সনাক্ত করতে এবং স্পষ্ট কোড লিখতে হয় এবং বিভিন্ন কোরকে বিভিন্ন থ্রেড বরাদ্দ করতে হয়, যেমন, গ্রন্থাগার ফাংশন ব্যবহার করে।

প্রশ্নটিকে আরও সুনির্দিষ্ট করতে, কল্পনা করুন যে আমি আমার মাল্টি-থ্রেড অ্যাপ্লিকেশনটি জাভাতে বা সি ++ উইন্ডোজ বা লিনাক্সে লিখেছি। মাল্টি-কোর প্রসেসরের চলাকালীন আমার অ্যাপ্লিকেশনটি কি একাধিক কোরকে দেখতে এবং ব্যবহার করবে (কারণ সবকিছুই অপারেটিং সিস্টেম বা স্ট্যান্ডার্ড থ্রেড লাইব্রেরি দ্বারা পরিচালিত হয়), বা একাধিক কোর সম্পর্কে সচেতন হওয়ার জন্য আমাকে কি আমার কোডটি পরিবর্তন করতে হবে? ?

উত্তর:


11

মাল্টি-কোর প্রসেসরের চলাকালীন আমার অ্যাপ্লিকেশনটি কি একাধিক কোরকে দেখতে এবং ব্যবহার করবে (কারণ সবকিছুই অপারেটিং সিস্টেম বা স্ট্যান্ডার্ড থ্রেড লাইব্রেরি দ্বারা পরিচালিত হয়), বা একাধিক কোর সম্পর্কে সচেতন হওয়ার জন্য আমাকে কি আমার কোডটি পরিবর্তন করতে হবে? ?

সহজ উত্তর: হ্যাঁ, এটি সাধারণত অপারেটিং সিস্টেম বা থ্রেডিং লাইব্রেরি দ্বারা পরিচালিত হবে।

অপারেটিং সিস্টেমের থ্রেডিং সাবসিস্টেমটি অগ্রাধিকার ভিত্তিতে প্রসেসরগুলিকে থ্রেড বরাদ্দ করবে (আপনার বিকল্প 1)। অন্য কথায়, যখন কোনও থ্রেড তার সময় বরাদ্দ বা ব্লকগুলির জন্য নির্বাহ শেষ করে, তফসিলকারী পরবর্তী সর্বোচ্চ অগ্রাধিকারের থ্রেডটি সন্ধান করে এবং এটি সিপিইউতে নির্ধারণ করে। অপারেটিং সিস্টেম থেকে অপারেটিং সিস্টেমের জন্য বিশদগুলি পৃথক হয়।

এটি বলেছিল, বিকল্প 2 (প্রোগ্রামিং ভাষা দ্বারা পরিচালিত) এবং 3 (স্পষ্টত) উপস্থিত রয়েছে। উদাহরণস্বরূপ, টাস্ক লাইব্রেরি এবং অ্যাসিঙ্ক / অপেক্ষার জন্য সাম্প্রতিক সংস্করণে। নেটটি বিকাশকারীকে সমান্তরাল (যেমন নিজের সাথে একই সাথে চলতে পারে) কোডটি লেখার আরও সহজ উপায় দেয়। ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি সহজাতভাবে সমান্তরাল এবং কিছু রানটাইম যদি সম্ভব হয় তবে প্রোগ্রামের বিভিন্ন অংশটি সমান্তরালভাবে চালিত হবে।

বিকল্প 3 হিসাবে (স্পষ্টতই), উইন্ডোজ আপনাকে থ্রেড অ্যাফিনিটি সেট করতে দেয় (নির্দিষ্ট করে যে কোনও প্রসেসর কোন থ্রেড চলতে পারে)। যাইহোক, দ্রুত, প্রতিক্রিয়া-সময় সমালোচনামূলক সিস্টেমগুলি ব্যতীত এটি সমস্ত ক্ষেত্রেই অপ্রয়োজনীয়। প্রসেসরের বরাদ্দ কার্যকর থ্রেড উচ্চ হার্ডওয়্যার নির্ভরশীল এবং একই সাথে চলমান অন্যান্য অ্যাপ্লিকেশনগুলির জন্য খুব সংবেদনশীল।

আপনি যদি পরীক্ষা করতে চান, দীর্ঘসংখ্যক চলমান, সিপিইউ নিবিড় কাজ তৈরি করুন যেমন মৌলিক সংখ্যার একটি তালিকা তৈরি করা বা ম্যান্ডেলব্রোট সেট তৈরি করা। এখন আপনার প্রিয় লাইব্রেরিতে দুটি থ্রেড তৈরি করুন এবং একটি মাল্টি-প্রসেসর মেশিনে দুটি থ্রেড চালান (অন্য কথায়, গত কয়েক বছরে মুক্তিপ্রাপ্ত কিছু সম্পর্কে)। উভয় কাজ মোটামুটি একই সময়ে সম্পন্ন করা উচিত কারণ সেগুলি সমান্তরালে চালিত হয়।


ব্যাখ্যার জন্য ধন্যবাদ (+1)। আমার পরীক্ষা প্রোগ্রামটি একীভূত বাছাইয়ের বাস্তবায়ন। বিভক্ত পর্যায়ে, যতক্ষণ না কোর পাওয়া যায় ততক্ষণ আমি বিভিন্ন থ্রেড তৈরি করতে চাই। উদাহরণস্বরূপ, দুটি কোর সহ, একটি অ্যারের প্রতিটি অর্ধেক পৃথক থ্রেড / কোর দ্বারা সাজানো হবে। মার্জ করার সময় অতিরিক্ত অতিরিক্ত থ্রেডগুলি তখন যুক্ত / সমাপ্ত হবে।
জর্জিও

যদি তথ্য এলোমেলোভাবে বিতরণ করা হয় তবে এইভাবে বাছাই করা শক্তিশালী। হ্যাঁ, আপনি এটিকে ভেঙে ফেলতে পারেন প্রতিটি অংশকে আলাদা থ্রেডে সাজান তবে শেষ পর্যন্ত আপনাকে সমস্ত অংশ একসাথে একত্রী করতে হবে, যাইহোক। থ্রেডগুলি যদি ডেটা স্ট্রাকচার ভাগ করে নিচ্ছে তবে আপনি বিতর্ক বা লক করার সমস্যাও পেতে পারেন। আমি বলছি না বাছাই করা থ্রেডিং থেকে কোনও উপকার করতে পারে না তবে এটি লিনিয়ার পারফরম্যান্সের উন্নতি হবে না।
আকটন

কোনও ডেটা ভাগ করা হয়নি বলে একটি অ্যারের দুটি অংশগুলি স্বাধীনভাবে বাছাই করা যায়। কেবলমাত্র প্রথম বিভাজন এবং শেষ মার্জটি একটি থ্রেড দ্বারা সম্পন্ন করতে হবে পুরো অ্যারে বা ডেটা যুক্ত তালিকাকে পরিচালনা করে। এর অর্থ হল যে ডেটার একটি সম্পূর্ণ স্ক্যান সমান্তরালে কার্যকর করা যায় না; সমস্ত অবশিষ্ট স্ক্যান করতে পারেন।
জর্জিও

অবশ্যই, আমি আপনার উদাহরণগুলি ভাল প্রার্থী হিসাবে বিবেচনা করি। আমি এই মুহুর্তে মার্জ সাজানোর সাথে আরও বেশি পরিচিত (এবং আমি এর একটি অ-সমান্তরাল সংস্করণ প্রয়োগ করেছি), যা (সম্ভবত) প্রথম প্রচেষ্টা হিসাবে আমার জন্য মার্জ সাজাকে আরও উপযুক্ত করে তুলবে।
জর্জিও

2
আমি এই উত্তরে যোগ করব যে ভাল অপারেটিং সিস্টেমগুলি একটি স্বল্পমেয়াদে অনাহারের সাথে একটি আলাদা সিপিইউ বা কোরটিতে কোনও টাস্ককে সময় স্লাইস দেওয়ার ব্যয় সামঞ্জস্য করতে যথেষ্ট স্মার্ট। স্থাপত্যগুলিতে যেখানে এটি গুরুত্বপূর্ণ, ফলাফলটি স্বয়ংচালিত বন্ধনের সাদৃশ্যযুক্ত। সমস্ত কাজটি যত তাড়াতাড়ি সম্ভব চালানো পেতে ওএসটি তৈরি করা হয়েছে এবং আপনি সম্ভবত থ্রেডগুলিতে বেঁধে এবং সেই সিদ্ধান্তগুলি নেওয়ার ক্ষমতাকে বাধা দিয়ে পায়ে নিজেকে গুলি করছেন shooting
blrfl

-1

আমার একবার বিশাল এসজিআই আইআরআইএক্স পরিবেশ ছিল। কেবল এটির হ্যাকের জন্য, আমি একটি ছোট মাল্টি-থ্রেড জাভা প্রোগ্রাম লিখেছি (যা কেবলমাত্র সিপিইউ চক্র গ্রহণ ছাড়া কিছুই করে না) এবং এতে 12 টি থ্রেড তৈরি করেছি created কাজটি NUMA আর্কিটেকচারে 12 টি সিপিইউ জুড়ে বিস্তৃত। হতে পারে আমি প্রোগ্রামটি সন্ধান করব এবং এটি ডেল আর -910-তে চালাব এবং চেক করব ..


3
এই উত্তরটি বিদ্যমান উত্তরের সাথে সত্যিই বেশি যোগ করে না। সম্ভবত আপনি যদি এসজিআই সিস্টেমের জেভিএম কেন থ্রেডগুলি বরাদ্দ করেছেন তা বিশদভাবে বর্ণনা করেছেন ...
জে এলস্টন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.