প্রশ্নোত্তর: কোড প্রোফাইলিংয়ের জন্য আপনি কোন সরঞ্জামগুলি ব্যবহার করছেন (প্রোফাইলিং, বেঞ্চমার্কিং নয়)?
প্রশ্ন 2: আপনি কোডটি কতক্ষণ চলতে দিন (পরিসংখ্যান: কত সময় পদক্ষেপ)?
প্রশ্ন 3: কেসগুলি বড় হয় (যদি কেসটিতে কেস ফিট হয় তবে সলভার দ্রুততার মাত্রার অর্ডার হয় তবে আমি মেমরি সম্পর্কিত প্রক্রিয়াগুলি মিস করব)?
আমি এটি কীভাবে করি তার একটি উদাহরণ এখানে।
আমি প্রোফাইলিং (এটি কীভাবে আরও দ্রুত তৈরি করতে হয় তা সনাক্তকরণ) থেকে বেঞ্চমার্কিং (এটি কতক্ষণ সময় নেয়) তা পৃথক করি। প্রোফাইলার দ্রুত হওয়া গুরুত্বপূর্ণ নয়। এটি আপনাকে কী ঠিক করতে হবে তা গুরুত্বপূর্ণ।
আমি "প্রোফাইলিং" শব্দটিও পছন্দ করি না কারণ এটি কোনও চিত্রকে হিস্টোগ্রামের মতো কিছু করে তোলে, যেখানে প্রতিটি রুটিনের জন্য একটি ব্যয়-বার বা "বাধা" রয়েছে কারণ এটি বোঝায় যে কোডটিতে খুব সামান্য জায়গা রয়েছে যা দরকার স্থির করেছি। এই উভয় জিনিসই কিছু ধরণের সময় ও পরিসংখ্যান বোঝায়, যার জন্য আপনি যথাযথতা গুরুত্বপূর্ণ বলে মনে করেন। সময়ের যথার্থতার জন্য অন্তর্দৃষ্টি ছেড়ে দেওয়া উচিত নয়।
আমি যে পদ্ধতিটি ব্যবহার করি তা এলোমেলোভাবে বিরতি দেওয়া হয় এবং এখানে একটি সম্পূর্ণ কেস স্টাডি এবং স্লাইড শো রয়েছে । প্রোফাইলার-বাটনেলেকের বিশ্ব দর্শনের অংশটি হ'ল আপনি যদি কিছু না পান তবে খুঁজে পাওয়া যাবার মতো কিছুই নেই, এবং যদি আপনি কিছু খুঁজে পান এবং একটি নির্দিষ্ট শতাংশ গতি অর্জন করেন তবে আপনি বিজয় ঘোষণা করেন এবং প্রস্থান করবেন। প্রোফাইল ফ্যানরা প্রায় কখনই তা বলে না যে তারা কতটা দ্রুতগতি পায় এবং বিজ্ঞাপনগুলি কেবল কৃত্রিমভাবে কনট্রাইভড সমস্যাগুলি সন্ধান করার জন্য নকশাকৃতভাবে দেখায়। এলোমেলোভাবে বিরতি দেওয়া সমস্যাগুলি সহজ বা শক্ত কিনা তা খুঁজে পায়। তারপরে একটি সমস্যা সমাধান করা অন্যকে প্রকাশ করে, ফলে প্রক্রিয়াটি পুনরাবৃত্তি করা যেতে পারে, আরও জটিল গতি অর্জনের জন্য।
অসংখ্য উদাহরণ থেকে আমার অভিজ্ঞতাতে এটি এখানে যায়: আমি একটি সমস্যা খুঁজে পেতে পারি (এলোমেলোভাবে বিরতি দিয়ে) এবং এটি ঠিক করতে পারি, কিছু শতাংশের দ্রুত গতি পেয়ে 30% বা 1.3x বলি। তারপরে আমি এটি আবার করতে পারি, অন্য একটি সমস্যা খুঁজে পেতে এবং এটি ঠিক করতে, আরেকটি স্পিডআপ পেয়ে, সম্ভবত 30% এরও কম, সম্ভবত আরও বেশি। তারপরে আমি আবারও এটি করতে পারি, যতক্ষণ না আমি সত্যিই ঠিক করার মতো অন্য কিছু খুঁজে পাই না। চূড়ান্ত গতিপ্রণালী ফ্যাক্টর হ'ল স্বতন্ত্র কারণগুলির চলমান পণ্য এবং এটি আশ্চর্যরকমভাবে বড় হতে পারে - কিছু ক্ষেত্রে আকারের ক্রম।
অন্তর্ভুক্ত: কেবল এই শেষ পয়েন্টটি বর্ণনা করার জন্য। স্লাইড শো এবং সমস্ত ফাইল সহ এখানে একটি বিশদ উদাহরণ রয়েছে যা দেখায় যে কীভাবে 730x এর দ্রুতগতি সমস্যা অপসারণের একটি সিরিজে অর্জন করা হয়েছিল। প্রথম সংস্করণটি প্রতি ইউনিট 2700 মাইক্রোসেকেন্ড নিয়েছিল। সমস্যা এটিকে সরানো হয়েছিল, সময়টি 1800 এ নামিয়ে আনা হয়েছিল এবং 1.5x (2700/1800) দ্বারা অবশিষ্ট সমস্যার শতাংশ বৃদ্ধি করা হয়েছিল। তখন বি সরানো হয়েছিল। এই প্রক্রিয়াটি ছয়টি পুনরাবৃত্তির মাধ্যমে অব্যাহত ছিল, ফলস্বরূপ প্রায় 3 টি আকারের গতিবেগের আদেশ orders তবে প্রোফাইলিং কৌশলটি সত্যই কার্যকর হতে হবে, কারণ যদি এই সমস্যাগুলির কোনওটি না পাওয়া যায়, যেমন আপনি যদি এমন একটি জায়গায় পৌঁছে যান যেখানে আপনি ভুলভাবে ভাবেন যে আরও কিছু করা যায় না, প্রক্রিয়াটি থেমে থাকে।
অন্তর্ভুক্ত: এটিকে অন্য উপায়ে বলতে গেলে, ক্রমাগত সমস্যাগুলি সরানো হওয়ায় মোট স্পিডআপ ফ্যাক্টরের একটি গ্রাফ এখানে রয়েছে:
সুতরাং কিউ 1 এর জন্য, একটি সাধারণ টাইমার পর্যাপ্ত পরিমাণে বেঞ্চমার্কিংয়ের জন্য। "প্রোফাইলিং" এর জন্য আমি এলোমেলোভাবে বিরতি ব্যবহার করি।
প্রশ্ন 2: আমি এটিকে পর্যাপ্ত কাজের চাপ দিয়েছি (বা এটির চারপাশে একটি লুপ রেখেছি) তাই এটি বিরতি দেওয়ার জন্য যথেষ্ট দীর্ঘ চলে।
Q3: যে কোনও উপায়ে, এটিকে বাস্তবিকভাবে বড় কাজের চাপ দিন যাতে আপনি ক্যাশের সমস্যাগুলি মিস না করেন। এগুলি কোডটিতে নমুনা হিসাবে প্রদর্শিত হবে মেমরিটি আনছে।