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