একাধিক প্ল্যাটফর্ম মাল্টি থ্রেডিং: আসল চ্যালেঞ্জগুলি কী কী?


21

এসডিএলের মতো একটি লাইব্রেরি থ্রেডিংয়ের জন্য ক্রস-প্ল্যাটফর্মের র‌্যাপার এপিআই সরবরাহ করে, তবে আমি মনে করি এটি নির্বোধ হবে যে এটি সরাসরি বিভিন্ন প্ল্যাটফর্ম (ডেস্কটপ / মোবাইল) জুড়ে গেমগুলির সহজ বিকাশের দিকে নিয়ে যায়।

নিম্নলিখিতটি বিবেচনা করে এইভাবে বিকাশ মোকাবেলার সর্বোত্তম উপায় কী (কোনও ক্রস-প্ল্যাটফর্ম থ্রেডিং এপিআই দেওয়া):

  • কোর বিভিন্ন সংখ্যা
  • কোর প্রতি বিস্তৃত বিভিন্ন প্রক্রিয়াজাতকরণ ক্ষমতা
  • উদাহরণস্বরূপ একটি সাধারণ সিস্টেম সিস্টেমের আর্কিটেকচার। ক্যাশে, র‌্যাম এবং আই / ও অ্যাক্সেসের জন্য বিভিন্ন বিলম্ব

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

সম্পাদনা: দয়া করে অন্যেরা এ বিষয়ে আরও অভিজ্ঞতার প্রস্তাব দিতে পারে কারণ আমার মনে হয় না যে আমার প্রশ্নের পুরোপুরি উত্তর দেওয়া হয়েছে।


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

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

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

উত্তর:


11

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

এসডিএলের মতো একটি লাইব্রেরি থ্রেডিংয়ের জন্য ক্রস-প্ল্যাটফর্মের র‌্যাপার এপিআই সরবরাহ করে, তবে আমি মনে করি এটি নির্বোধ হবে যে এটি সরাসরি বিভিন্ন প্ল্যাটফর্ম (ডেস্কটপ / মোবাইল) জুড়ে গেমগুলির সহজ বিকাশের দিকে নিয়ে যায়।

গেমগুলির সহজ বিকাশ - নিশ্চিত। অনুকূল মাল্টিথ্রেডিং, না। গেমস তৈরি করতে আপনার মাল্টিথ্রেডিংয়ের দরকার নেই । উচ্চ কার্যকারিতা তৈরি করতে, এটি অবশ্যই সহায়তা করে। তবে অনেক দুর্দান্ত গেম একক থ্রেডে চলে।

নিম্নলিখিতটি বিবেচনা করে এইভাবে বিকাশ মোকাবেলার সর্বোত্তম উপায় কী (কোনও ক্রস-প্ল্যাটফর্ম থ্রেডিং এপিআই দেওয়া):

  • কোর বিভিন্ন সংখ্যা
  • কোর প্রতি বিস্তৃত বিভিন্ন প্রক্রিয়াজাতকরণ ক্ষমতা
  • উদাহরণস্বরূপ একটি সাধারণ সিস্টেম সিস্টেমের আর্কিটেকচার। ক্যাশে, র‌্যাম এবং আই / ও অ্যাক্সেসের জন্য বিভিন্ন বিলম্ব

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

তবে, বিচ্ছিন্ন কার্যগুলিতে গেমের বৈশিষ্ট্যগুলি ক্ষয় করা বেশ জটিল বিষয় এবং আপনার পারফরম্যান্সের প্রয়োজনীয়তা সম্পর্কে নিশ্চিত না হওয়া পর্যন্ত প্রায়শই চেষ্টা করা মূল্যহীন না, তাই বেশিরভাগ এটি চেষ্টাও করবেন না।

আরও কিছু পড়া:

http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php - 'ডেটা সমান্তরাল' বিভাগটি দেখুন। এই মডেলটির সাহায্যে ডেটাটি কয়েকটি অভিন্ন কাজ জুড়ে বিভক্ত হয় এবং স্বতন্ত্র থ্রেডে বহন করে।

http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/ - বেশ ঘন, ওপেন স্তরগুলিতে গেম স্তরের পরিবর্তে জিনিসগুলি বর্ণনা করে।

http://drdobbs.com/high-performance-computing/216500409 - গেম সুনির্দিষ্ট নয়, তবে আপনাকে কীভাবে কার্যগুলি ভাগ করতে হবে তা আপনাকে বলার ক্ষেত্রে সম্পূর্ণ প্রাসঙ্গিক।

http://www.itfgaming.com/news/tech-focus-crysis-2-and-the-future-of-cryengine-3 - এই সাক্ষাত্কারের অর্ধেকটা নীচে তারা কীভাবে কোনও টাস্ক ভিত্তিক সিস্টেমে স্থানান্তরিত করেছিল সে সম্পর্কে একটি উপাখ্যান ।


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

দুঃখিত, আমি ভেবেছিলাম এই ধরণের পদ্ধতির বিষয়টি সুপরিচিত ছিল। আমি উত্তরে বিস্তারিত জানাব।
কাইলোটান

4

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

সবচেয়ে বড় সমস্যাটি ছিল (এটি অন্যদের মধ্যে আমার কাজ ছিল) প্রয়োজনীয় প্ল্যাটফর্মগুলি বিচ্ছিন্ন করে those সংস্করণগুলি নির্ধারণ এবং কীভাবে সেগুলি তৈরি করবেন (যেমন বিগ স্ক্রিন তবে লো প্রোফাইলটি বড় পর্দা / হাই প্রোফাইলের ডাউনগ্রেড সংস্করণ হওয়া উচিত বা এটি হওয়া উচিত) মাঝারি আকারের স্ক্রিন / লো প্রোফাইলটি বড় স্ক্রিন তৈরি করেছে?)।

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

আছে HTH

[সম্পাদনা] আমি যা বোঝাতে চাইছিলাম তা হল আপনার টার্গেট প্ল্যাটফর্মগুলি আপনাকে বিভিন্ন গুণাবলীতে বিভক্ত করতে হবে (উদাঃ 1 কোর, 2 কোর, 1 কোর তবে দ্বিগুণ দ্রুত ...) তারপরে আপনি কত ভার্চুয়াল টার্গেট চান তা স্থির করুন (উদাহরণস্বরূপ " কেবল একটি "বা" নিম্ন, মিড, হাই ") তারপরে সমস্ত প্ল্যাটফর্মগুলিকে তাদের নিজ নিজ 'গুণমান' এবং প্রতিটি মানের জন্য রাখুন, সর্বনিম্ন ডিনোমিনেটর এবং 'পোর্ট' কোডটি নিন যাতে এটি প্রয়োজনীয়তার সাথে মেনে চলে (যেমন। কাজ করে এবং দ্রুত) যথেষ্ট).

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


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

1
ঠিক আছে, আমরা যেমন বহু ভাষা (ইংরেজি, ফরাসি, স্পেনীয়, পর্তুগিজ, জার্মান এবং ইতালিয়ান একটি প্যাকের মধ্যে + দিনের যে কোনও ভাষার প্রয়োজন, তাইওয়ানিজ, তুর্কি, রাশিয়ান ...) করেছি এবং আমাদের "বন্দর" করার জন্য আমাদের নতুন প্ল্যাটফর্ম ছিল প্রতি কয়েকমাসে আমাদের সমস্ত গেমস (মোবাইলের একটি নতুন ক্লাস পড়ুন) আমরা আসলে এই পথে না যেতে অনেক সময় হারাতে পারি, এটি সত্যিই বড় বড় টেম না থাকলে সত্যিই অসম্ভব হত। 'ফ্রেমওয়ার্ক' ডিজাইনের কাজটি চালানো হয়েছিল, কারণ আমি বিভিন্ন মোবাইল সম্পর্কে জানতে পেরেছিলাম এবং সম্ভবত 3-4 বছর পরে পরিপক্কতায় এসেছি। যদিও একটি ভাল মূল্য বিনিয়োগ।
ভালমন্ড

1

আমি অনুভূতি পেয়েছি যে এটি করার একমাত্র উপায় হ'ল এটি যাচাই করা হয় যে আপনি সমর্থন করতে চান প্রতিটি ডিভাইসটিতে কতগুলি থ্রেড চালানো যেতে পারে এবং সর্বনিম্ন সাধারণ ডিনোমিনেটরটি কী তা খুঁজে বের করুন।

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

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

নিম্নলিখিতটি বিবেচনা করে এইভাবে বিকাশ মোকাবেলার সর্বোত্তম উপায় কী (কোনও ক্রস-প্ল্যাটফর্ম থ্রেডিং এপিআই দেওয়া):

different numbers of cores
vastly different processing capabilities per core
A generally different systems architecture with eg. different

ক্যাশে, র‌্যাম এবং I / O অ্যাক্সেসের জন্য বিলম্ব

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

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