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