যে প্রোগ্রামগুলি দাবি করে যে তারা "মাল্টি-কোর" বান্ধব নয়


17

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

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

আমি একটি জাভা প্রোগ্রামার, তাই সম্ভবত বিমূর্ততা বা হোয়াট নোটের কারণে আমাকে এটিকে মোকাবেলা করতে হয়নি।


11
একটি বড় সম্ভাবনা হ'ল সিঙ্ক্রোনাইজেশনে শর্টকাট নেওয়া হয়েছিল, যা একক-প্রসেসর / কোর সিস্টেমের জন্য কাজ করে তবে একাধিক প্রসেসর / কোরগুলির প্রকৃত সম্মতিতে বিভক্ত হয়।
বার্ট ভ্যান ইনজেন শেেনা

@ বার্টওয়ানআইংজেনচেনা: এটি সঠিক। আপনার এটি প্রসারিত করা উচিত এবং উত্তর হিসাবে এটি পোস্ট করা উচিত। আমি মনে করি অন্য সমস্ত বিষয়টি মিস করেছেন।
কেভিন cline 21

1
আমি মনে করি যে @ বার্ট সত্যিই নিকটে রয়েছে। তবে, এস / ওয়ার্ক / কাজ করে প্রদর্শিত হবে / এবং এটি চিহ্নের কাছাকাছি হবে।
বেন ভয়েগ্ট

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

উত্তর:


28

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

  • কোনও ভাগ করা স্থিতি নেই, প্রতিটি ফাংশন কেবলমাত্র উত্তীর্ণ পরামিতিগুলির উপর নির্ভর করে
  • শারীরিক ডিভাইসগুলিতে অ্যাক্সেস নেই (গ্রাফিক কার্ড, হার্ড ড্রাইভ, ইত্যাদি)

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

পরিষ্কার কথা বলতে গেলে অনেক গেম নির্মাতারা গেম ইঞ্জিনগুলি ব্যবহার করেন যা তৃতীয় পক্ষগুলি দ্বারা উত্পাদিত হয়। এটি কিছুটা সময় নিয়েছিল তবে এই তৃতীয় পক্ষের গেম ইঞ্জিনগুলি এখন আগের তুলনায় অনেক বেশি সমান্তরাল।

কার্যকরী সম্মতি নিয়ে কাজ করার ক্ষেত্রে আরও বড় স্থাপত্য চ্যালেঞ্জ রয়েছে

কনক্যুরঞ্জি ব্যাকগ্রাউন্ডে চলমান কাজ থেকে শুরু করে সম্মতি জন্য পুরো স্থাপত্য সমর্থন পর্যন্ত অনেকগুলি রূপ নিতে পারে। কিছু ভাষাগুলি আপনাকে খুব শক্তিশালী সম্মিলিত বৈশিষ্ট্যগুলি দেয় যেমন এরলং , তবে এটি কীভাবে আপনি আপনার অ্যাপ্লিকেশনটি বানাবেন সে সম্পর্কে আপনাকে খুব আলাদাভাবে চিন্তা করা প্রয়োজন।

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

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

তলদেশের সরুরেখা:

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


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

8
আসল বিষয়টি হ'ল আপনাকে সমান্তরাল সম্পাদনের জন্য নকশা তৈরি করতে হবে এবং আপনি যদি না করেন তবে আপনার নকশার অভাবে সীমাবদ্ধ। আমি সম্মত এটি করতে সমান্তরাল বিভিন্ন জিনিস খুব সহজ, কিন্তু যদি না এটি উচ্চ ব্যবহারকারীর প্রত্যাশা সঙ্গে একটি বিদ্যমান অ্যাপ্লিকেশন আছে। সেক্ষেত্রে এটি সম্ভব করার জন্য এটি খুব ভালভাবে পুনর্লিখনের প্রয়োজন হতে পারে। লেখকরা স্বভাবগতভাবে ঝুঁকিপূর্ণ তবে মাঝে মাঝে আপনি তাদের জন্য একটি ভাল যুক্তি বানাতে পারেন। যতটা সম্ভব কোড সংরক্ষণ করার সময় আমি এমন একাধিক পুনর্লিখন করেছি যা সমান্তরাল প্রক্রিয়াকরণকে সর্বাধিক করে তুলেছে। আছে অনেক গোপন কারণের।
বেরিন লরিটস

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

35

প্রচুর প্রোগ্রাম (বিশেষত গেমস) সহজাতভাবে সম্মতি ব্যবহার করে,

না, আসলে এটি বিপরীত। বেশিরভাগ অ্যাপ্লিকেশন একক থ্রেডেড মানসিকতায় লেখা থাকে এবং বিকাশকারীরা সম্মতি সমর্থন করার জন্য প্রয়োজনীয় পরিবর্তনগুলি কখনই করেনি।

সি, সি ++ এবং সি # তে আপনাকে নতুন থ্রেড এবং / অথবা প্রক্রিয়া শুরু করার জন্য অ্যাপ্লিকেশনটিকে স্পষ্টভাবে বলতে হবে।

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

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

সাধারণত, যখন কোনও অ্যাপ্লিকেশন বলে যে এটি একাধিক কোর ব্যবহার করতে পারে না তার অর্থ ডেটা ম্যানিপুলেশন রক্ষার জন্য তাদের কাছে সিঙ্ক্রোনাইজেশন নেই।


এটি কি বড় আধুনিক বিকাশকারী / প্রকাশকদের কাছ থেকে নতুন আধুনিক প্রোগ্রামগুলির জন্য সত্য? আমি যখন বসে বসে কোনও প্রোগ্রাম লিখি, তখন আমি ডিজাইন পর্যায়ে প্রথম জিনিসগুলির বিষয়ে চিন্তা করি তা হল, আমার কি সমঝোতা দরকার? কারণ এর ফলে একদম আলাদা ডিজাইনের ফলাফল হতে পারে। গেমগুলিতে বিশেষত সামান্য কিছু স্তর থাকতে হবে, নাহলে হাজার হাজার অন স্ক্রিন মডেলগুলির মধ্যে একটি যখন কিছু করার চেষ্টা করেছিল ... তখন খেলাটি হিমশীতল হয়ে যায় ...?
স্নেকডোক

5
@ স্নেকডোক - আমি মনে করি আপনি সেখানে আপনার ডোমেনগুলি বিভ্রান্ত করছেন। বড় গেম সংস্থাগুলি অবশ্যই দৃ mind়তার সাথে বিবেচনা করে লিখতে পারে, তবে আমি এখনও একটি বিগ গেম সহ একটি চুক্তি সমর্থন করি না যা চুক্তি সমর্থন করে না। আমি যে অ্যাপ্লিকেশন এবং গেমগুলি দেখেছি যে সম্মতিটি সমর্থন করতে পারে না সেগুলি সাধারণত ছোট দোকানগুলি / স্বতন্ত্র ডেভস থেকে আসে যেখানে তারা সেই মানসিকতার সাথে শুরু না করে। এবং অ্যাপ্লিকেশনটির বিবর্তনের কোনও এক পর্যায়ে, সত্যের পরে সম্মতিতে বোল্ট করা অসম্ভব হয়ে পড়ে। এবং কিছু অ্যাপস সমকালীন হওয়ার ন্যায্যতা প্রমাণ করার জন্য পর্যাপ্ত কিছু করার উদ্দেশ্যে কখনও আসে নি।

এবং কিছু গেমস গেম ইঞ্জিন (কোড প্রয়োগকরণ) আপডেট না করেই নতুন সামগ্রী (গ্রাফিক্স এবং গেমপ্লে) এ সাফল্য লাভ করে। সুতরাং, গেম ইঞ্জিন প্রযুক্তিতে বছর পিছনে হতে পারে।
রোবং

6
@ স্নেকডোক: হাজার হাজার অন-স্ক্রিন মডেলগুলির সাথে মোকাবিলা করার জন্য আপনার একতাদের সামঞ্জস্যের দরকার নেই। এটি আপনার গেমের প্রতিটি বস্তুর সিমুলেট করার জন্য নিজস্ব থ্রেডের মতো নয়; একটি থ্রেড প্রতিটি টাইমস্টেপে স্ক্রিনের সমস্ত কিছুর আপডেটগুলি পরিচালনা করতে পারে।
ব্যবহারকারী 2357112 মনিকা 24

13

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

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


8

এটি সম্পূর্ণ উত্তর নয়। এটি একটি সতর্কতা অবলম্বন কাহিনী।

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

  • একক থ্রেডযুক্ত সংস্করণের জন্য 14 সেকেন্ড।
  • 2-থ্রেড সংস্করণের জন্য 15 সেকেন্ড।

এটি আমার প্রত্যাশা সম্পর্কে ছিল।

তারপরে আমি এটি একটি নতুন, ডুয়াল-কোর মেশিনে চেষ্টা করেছি।

  • একক থ্রেড সংস্করণ জন্য 11 সেকেন্ড।
  • 2-থ্রেড সংস্করণ জন্য 20 সেকেন্ড।

দুটি থ্রেড বাকি কাজগুলির একটি সারি ভাগ করে নিয়েছে। দেখে মনে হচ্ছে সারি অবজেক্টের ক্ষেত্রগুলি একটি কোর এর ক্যাশে এবং অন্যটির মাঝখানে পিছন দিকে বদলে যাচ্ছিল।


2
আপনি কয়টি অ্যারে উপাদান দিয়ে পরীক্ষা করেছেন? সম্ভবত মার্জোর্টটি আরও উপযুক্ত হবে যেহেতু মাল্টি-কোর প্রোগ্রামিংয়ের মাধ্যমে ক্যাশে-লাইন বিরোধগুলি এড়াতে ডেটা অনুলিপি করা দরকার ছিল?
রোবং

2
@wwong 10,000,000 অ্যারে উপাদান ছিল। অবশ্যই একত্রীকরণ ভাল ভাল সমান্তরাল হবে। আমি যদি মার্জ সাজ্ট ব্যবহার করতাম তবে আমি সম্ভবত একটি দরকারী পাঠ শিখতাম না।
থিওডোর নরভেল

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

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

2
@ ম্যাসিজেপিয়েচোটকা নৈতিকতাগুলি আপনার প্রস্তাবিত সমস্ত জিনিসই বেশ কার্যকর। তবে ওপিতে ফিরে আসার পরে, আমি মনে করি সবচেয়ে প্রাসঙ্গিক নৈতিকতা হচ্ছে যে কোনও মাল্টিথ্রেডেড প্রোগ্রামগুলি একটি একক কোর প্রসেসরের চেয়ে বহু-কোর আর্কিটেকচারের তুলনায় আসলে অনেক ধীর গতিতে চলতে পারে, অন্যথায় নিশ্চিতকরণের প্রচেষ্টা ব্যয় না করা হলে।
থিওডোর নরভেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.