সাধারণত আমার কোডটি কখন এবং কখন অনুকূলিত করব?


13

'সাধারণ' ব্যবসায়িক প্রোগ্রামিং অপ্টিমাইজেশনের ধাপটি প্রায়শই সত্য প্রয়োজনের অবধি থাকে। এর অর্থ এটি অপরিহার্য হওয়া উচিত না যতক্ষণ না এটি সত্যই প্রয়োজন হয়।

ডোনাল্ড নুথ যা বলেছিলেন তা মনে রাখবেন "আমাদের ছোট কার্যকারিতা সম্পর্কে ভুলে যাওয়া উচিত, সময়ের প্রায় 97% বলুন: অকালীন অপ্টিমাইজেশন সমস্ত মন্দের মূল"

আমি চেষ্টাটি নষ্ট করছি না তা নিশ্চিত করার জন্য কখন উপযুক্ত হবে। আমি কি এটি একটি পদ্ধতি স্তর করা উচিত? ক্লাস স্তর? মডিউল স্তর?

এছাড়াও আমার অপ্টিমাইজেশনের পরিমাপ কী করা উচিত? এঁটেল? চক্রের হার? মোট সময়?

উত্তর:


18

যেখানে আমি কাজ করেছি, আমরা সর্বদা প্রোফাইলের একাধিক স্তর ব্যবহার করি; আপনি যদি কোনও সমস্যা দেখতে পান তবে কী চলছে তা নির্ধারণ না করা পর্যন্ত আপনি তালিকাটিকে আরও কিছুটা নীচে সরিয়ে নিয়েছেন:

  • "হিউম্যান প্রোফাইলার", ওরফে গেমটি খেলবে ; এটা কি মাঝে মাঝে ধীর বা "হিচিকুড়ি" অনুভব করে? জারকি অ্যানিমেশনগুলি লক্ষ্য করছেন? (একজন বিকাশকারী হিসাবে, নোট করুন যে আপনি কিছু ধরণের পারফরম্যান্স ইস্যুতে আরও সংবেদনশীল এবং অন্যদের সম্পর্কে অবহেলিত according সেই অনুযায়ী অতিরিক্ত পরীক্ষার পরিকল্পনা করুন))
  • এফপিএস প্রদর্শন চালু করুন যা স্লাইডিং-উইন্ডো 5 সেকেন্ডের গড় এফপিএস। গণনা এবং প্রদর্শনের জন্য খুব সামান্য ওভারহেড।
  • প্রোফাইল বারগুলি চালু করুন , যা কোডের প্রতিটি বিভাগের চারপাশে সাধারণ "স্টপওয়াচ" টাইমার ব্যবহার করে ফ্রেমের বিভিন্ন অংশের (যেমন, ভিবি্ল্যাঙ্ক, প্রিফ্রেম, আপডেট, সংঘর্ষ, রেন্ডার, পোস্টফ্রেম) প্রতিনিধিত্বকারী কোয়াড (রোয়জিবিআইভি রঙ) এর একটি সিরিজ মাত্র Turn । আমরা যা চাই তার উপর জোর দেওয়ার জন্য, আমরা একটি 60 স্ক্রিনের টার্গেট ফ্রেমের প্রতিনিধি হওয়ার জন্য একটি পর্দার প্রস্থের মূল্য নির্ধারণ করি, সুতরাং আপনি যদি বাজেটের অধীনে 50% (কেবলমাত্র একটি অর্ধ-বার) বা 50% ওভার (যা কেবলমাত্র অর্ধ বার) হয় তা দেখতে খুব সহজ see বারটি মোড়ানো হয় এবং দেড় বার হয়ে যায়)। সাধারণত ফ্রেমের বেশিরভাগ খাবার কী তা বলা খুব সহজ: লাল = রেন্ডার, হলুদ = আপডেট ইত্যাদি ...
  • একটি বিশেষ চালিত বিল্ড তৈরি করুন যা প্রতিটি ফাংশনকে ঘিরে "স্টপওয়াচ" কোড সন্নিবেশ করে। (মনে রাখবেন যে এটি করার সময় আপনি একটি বিশাল পারফরম্যান্স, ড্যাচে এবং আইচাচি হিট করতে পারেন, সুতরাং এটি অবশ্যই স্পষ্টভাবে উদ্বেগজনক But তবে যদি আপনার সিপিইউতে কোনও সঠিক নমুনা প্রোফাইলার বা শালীন সমর্থন না থাকে তবে এটি একটি গ্রহণযোগ্য বিকল্প। আপনিও চালাক হতে পারেন You ফাংশন তথ্য কমপক্ষে রেকর্ডিং সম্পর্কে / প্রস্থান করুন এবং পরে calltraces পুনর্নির্মাণ লিখুন।) আমরা যখন আমাদের নির্মিত, আমরা অনেক কিছুতেই নকল gprof আউটপুট ফরম্যাট এর।
  • সর্বোপরি, একটি স্যাম্পলিং প্রোফাইলার চালান ; ভিটিউন এবং কোডএনালিস্ট x86 এবং x64 এর জন্য উপলব্ধ, আপনি বিভিন্ন সিমুলেশন বা অনুকরণ পরিবেশ পেয়েছেন যা আপনাকে এখানে ডেটা দিতে পারে give

(গ্রাফিক্স প্রোগ্রামারটির বিগত বছরের জিডিসির একটি মজাদার গল্প রয়েছে যিনি নিজের চারটি ছবি তুলেছিলেন - খুশি, উদাসীন, বিরক্ত, এবং ক্রুদ্ধ - এবং ফ্রেমরেটের ভিত্তিতে অভ্যন্তরীণ বিল্ডগুলির কোণে একটি উপযুক্ত চিত্র প্রদর্শন করেছিলেন displayed সামগ্রী নির্মাতারা দ্রুত তাদের সমস্ত বস্তু এবং পরিবেশের জন্য জটিল ছায়াছবি চালু না করা শিখেছে : তারা প্রোগ্রামারকে রাগান্বিত করবে feedback প্রতিক্রিয়াটির শক্তি দেখুন))

দ্রষ্টব্য আপনি ক্রমাগত "প্রোফাইল বারগুলি" গ্রাফের মতো মজাদার জিনিসগুলিও করতে পারেন, যাতে আপনি স্পাইক প্যাটার্নগুলি দেখতে পান ("আমরা প্রতি 7 ফ্রেমে একটি ফ্রেম হারাচ্ছি") বা এর মতো।

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

  • আমাদের কি র‌্যামে ক্যাশে রাখা বা ডিস্ক থেকে প্লেয়ারের জন্য "আক্রমণ" রাষ্ট্রীয় অ্যানিমেশন ফ্রেমগুলি পুনরায় লোড করা উচিত? প্রতিটি শত্রু সম্পর্কে কি? এগুলি সব করার জন্য আমাদের কাছে র‌্যাম নেই, তবে ডিস্কের বোঝা ব্যয়বহুল! 5 বা 6 টি বিভিন্ন শত্রু একবারে পপ করলে আপনি এইচেনচেনা দেখতে পাচ্ছেন! (ঠিক আছে, বিস্ময়কর spawning সম্পর্কে?)
  • আমরা কি সমস্ত কণা জুড়ে একটি একক ক্রিয়াকলাপ, বা একটি কণা জুড়ে সমস্ত ক্রিয়াকলাপ করছি? (এটি একটি আইচি / ড্যাচে ট্রেড অফ, এবং উত্তরটি সর্বদা পরিষ্কার নয়)) সমস্ত কণা আলাদা করে রাখার এবং অবস্থানগুলি একসাথে সংরক্ষণ করার জন্য (বিখ্যাত "অ্যারেগুলির বিখ্যাত কাঠামো") বনাম সমস্ত কণার ডেটা এক জায়গায় রাখা ("" স্ট্রাক্টের অ্যারে ")।

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

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


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

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

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

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

5

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


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

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

এটি একটি ট্যাপের মতো যা ফোঁটা। কেন এই ছোট ড্রপ সংরক্ষণ সম্পর্কে চিন্তা? - "যদি আপনার কলটি প্রতি সেকেন্ডে এক ফোঁটা হারে ফোঁটা হয় তবে আপনি প্রতি বছর 2700 গ্যালন নষ্ট করার আশা করতে পারেন"।
কাজ

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

3

একবার একটি খেলা প্রস্তুত মুক্তি করা (হয় চূড়ান্ত বা বিটা), অথবা এটি লক্ষণীয়ভাবে ধীর, সেরা সময় যে সম্ভবত প্রোফাইলে আপনার অ্যাপ। অবশ্যই, আপনি সর্বদা যে কোনও সময়ে প্রোফাইলারটি চালাতে পারেন; তবে হ্যাঁ, অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল। ভিত্তিহীন অপ্টিমাইজেশনও; আপনার কিছু তথ্য ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে घूरফরফফঁকফফফফফফফফ)] এটির "অপ্টিমাইজ" করার চেষ্টা করার আগে আপনার কিছু কোড ধীর গতিতে দেখানোর জন্য আপনার প্রকৃত ডেটা দরকার। একজন প্রোফাইলার আপনার জন্য এটি করে।

আপনি যদি কোনও প্রোফাইলার সম্পর্কে না জানেন তবে এটি শিখুন! এখানে একটি ভাল ব্লগ পোস্ট একজন প্রোফাইলারের কার্যকারিতা প্রদর্শন করে।

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

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


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

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

2

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

পারফরম্যান্স বিশ্লেষণ এবং অপ্টিমাইজেশন খুব দেরিতে পর্যায়ে ফেলে রাখা খারাপ ধারণা হবে। আপনি যদি ইতিমধ্যে গেমটি তৈরি করে থাকেন এবং আপনার সিপিইউ বাজেটের চেয়ে 200% বেশি হয়ে থাকেন এবং আপনি এটি অপ্টিমাইজেশনের মাধ্যমে খুঁজে পেতে পারেন না তবে আপনি ক্ষতিগ্রস্থ হয়েছেন।

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

তাই প্রথম দিন থেকে কিছু পারফরম্যান্সের পরিসংখ্যান তৈরি করুন।

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

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


ইনগ্যাম প্রোফাইলারকে যুক্ত করতে (যার সাথে আমি সম্পূর্ণ একমত একটি প্রোফাইলার সহ।
কাজ

2

যদি নুথের উদ্ধৃতিটিকে এর প্রেক্ষাপটে দেখুন তবে তিনি ব্যাখ্যা করতে চলেছেন যে আমাদের প্রোফাইলের মতো সরঞ্জামগুলির সাথে তবে অপ্টিমাইজ করা উচিত

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

প্রোফাইলিং কেবল গতি বাড়াতে আপনাকে সহায়তা করবে না, এটি আপনাকে বাগগুলি খুঁজে পেতে সহায়তা করবে। যদি আপনার প্রোগ্রামটি হঠাৎ করে দ্রুত গতি পরিবর্তন করে, এটি সাধারণত বাগের কারণে হয়। যদি আপনার প্রোফাইলিং না হয় তবে এটি নজরে নাও যেতে পারে।

অনুকূলকরণের কৌশলটি এটি নকশা দ্বারা করা। শেষ মুহুর্ত পর্যন্ত অপেক্ষা করবেন না। নিশ্চিত করুন যে আপনার প্রোগ্রামটির নকশা আপনাকে বাজে অভ্যন্তরীণ লুপের কৌশলগুলি ব্যতীত আপনার প্রয়োজনীয় সম্পাদনা দেয় gives


1

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

নীচের লাইনটি, আমার মতে, আপনার কোডটি ইতিমধ্যে স্তন্যপান করার পরে আরও কার্যকর করার জন্য এটির হার্ড AR


0

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


0

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

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


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

0

আপনার কোডটি আপনার যতটা প্রয়োজন ততবারই অনুকূলিত করা উচিত ...

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

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

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


0

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

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