গেম বিকাশে ব্যবহৃত মেমরি বরাদ্দ নিদর্শন


20

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

আমি কোন মেমরি বরাদ্দ কৌশল ব্যবহার করতে পারি এবং কেন এটি একটি ভাল কৌশল?


1
আপনার কি সত্যিই দরকার? কোনও দল এটি প্রয়োগ করতে পারে তবে এটি কেবল সবচেয়ে জটিল বিষয়গুলির মধ্যে একটি, যদি তারা এটি প্রয়োগ করতে পারে।
Ali1S232

4
এটা আমার জন্য সুদ একটি ক্ষেত্র তাই আমি এটা সম্পর্কে জানতে এবং তা বাস্তবায়ন চাই
chadb

আমি অবশ্যই বলব যে বিষয়টি সত্যই আকর্ষণীয় ... এমন কিছু ঘটনা রয়েছে যেখানে এর অর্থ বরাদ্দ হতে পারে তবে আপনার পক্ষে গড় পিসি গেমটি বরং আমি আসল গেমটি নিয়ে চিন্তা করব ...
রিওকি

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

উত্তর:


25

গেম ইঞ্জিন আর্কিটেকচারে এই বিষয় সম্পর্কিত কিছু তথ্য রয়েছে। বেসিকগুলি হ'ল স্তর / ফ্রেম / ইত্যাদি প্রতি আপনার মেমরির প্রয়োজনীয়তাগুলি বোঝার জন্য আপনাকে কিছু বিশ্লেষণ করতে হবে। এর মতো, তবে কয়েকটি নিদর্শন রয়েছে যা লেখক কয়েকবার দেখেছেন বলে উল্লেখ করেছেন:

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

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

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


1

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

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

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

উদাহরণগুলির সাথে সম্পর্কিত আপনার কেবলমাত্র ওজিআরআই 3 ডি গেম ইঞ্জিনটি একবার দেখে একবারে শুরু করা উচিত এতে মেমরির বরাদ্দকারীদের কনফিগার করার কয়েকটি বিকল্প রয়েছে ।


0

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

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

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

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

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