অপ্টিমাইজেশানগুলি স্থানীয় রাখুন, সেগুলি সুস্পষ্ট করুন, সেগুলি ভাল করে নথি করুন এবং উত্স কোড এবং রান-টাইম পারফরম্যান্স উভয় ক্ষেত্রে একে অপরের সাথে এবং অপরিশোধিত সংস্করণের সাথে অপ্টিমাইজড সংস্করণগুলির তুলনা করা সহজ করে তুলুন।
পুরো উত্তর
যেমন optimisations সত্যিই যদি হয় যে আপনার পণ্যে হওয়া গুরুত্বপূর্ণ, তাহলে আপনি জানেন যে না শুধুমাত্র কেন optimisations সামনে দরকারী ছিল, কিন্তু এছাড়াও সাহায্যের বিকাশকারীদের কাছে পর্যাপ্ত তথ্য প্রদান জানি কিনা তারা ভবিষ্যতে কাজে লাগবে প্রয়োজন।
আদর্শভাবে, আপনাকে আপনার বিল্ড প্রক্রিয়াতে পারফরম্যান্স টেস্টিং সন্নিবেশ করা দরকার, সুতরাং নতুন প্রযুক্তিগুলি পুরানো অপ্টিমাইজেশনকে অকার্যকর করার সময় আপনি খুঁজে পেতে পারেন।
মনে রাখবেন:
প্রোগ্রাম অপ্টিমাইজেশনের প্রথম বিধি: এটি করবেন না।
প্রোগ্রাম অপ্টিমাইজেশনের দ্বিতীয় বিধি (কেবল বিশেষজ্ঞদের জন্য!): এটি এখনও করবেন না ""
- মাইকেল এ। জ্যাকসন
এখন সময় বেঞ্চমার্কিং এবং পরীক্ষার প্রয়োজন কিনা তা জানতে ।
আপনি যেমন উল্লেখ করেছেন, অত্যন্ত অনুকূলিত কোডের সাথে সবচেয়ে বড় সমস্যা হ'ল এটি বজায় রাখা কঠিন, যতদূর সম্ভব আপনার অপটিমাইজ করা অংশগুলি অপরিশোধিত অংশগুলি থেকে আলাদা রাখা দরকার। আপনি সংকলন সময় সংযোগ, রানটাইম ভার্চুয়াল ফাংশন কল বা এর মধ্যে কিছু কিছু করার মধ্য দিয়ে এটি করেন কিনা। গুরুত্বপূর্ণ বিষয় হ'ল আপনি যখন পরীক্ষা চালাবেন, আপনি বর্তমানে আগ্রহী সমস্ত সংস্করণগুলির বিরুদ্ধে পরীক্ষা করতে সক্ষম হতে চান ।
আমি এমনভাবে একটি সিস্টেম তৈরির দিকে ঝুঁকে যাব যে কোড কোডের উদ্দেশ্য বুঝতে সর্বদা প্রোডাকশন কোডের বেসিক অনিচ্ছাকৃত সংস্করণ ব্যবহার করা যেতে পারে , তারপরে অপ্টিমাইজড সংস্করণ বা সংস্করণগুলি সহ এটির পাশাপাশি বিভিন্ন অপ্টিমাইজড মডিউলগুলি তৈরি করুন, স্পষ্টতই যেখানেই ডকুমেন্টিং করা উচিত অনুকূলিত সংস্করণটি বেস-লাইন থেকে পৃথক। যখন আপনি আপনার পরীক্ষাগুলি (ইউনিট এবং ইন্টিগ্রেশন) পরিচালনা করেন, আপনি এটি অরক্ষিত সংস্করণে এবং সমস্ত বর্তমান অপ্টিমাইজড মডিউলগুলিতে চালান ।
উদাহরণ
উদাহরণস্বরূপ, ধরুন আপনার কাছে একটি ফাস্ট ফুরিয়ার ট্রান্সফর্ম ফাংশন রয়েছে। হতে পারে আপনার মধ্যে একটি মৌলিক, অ্যালগরিদমিক বাস্তবায়ন fft.c
এবং এর মধ্যে পরীক্ষা রয়েছে fft_tests.c
।
তারপরে পেন্টিয়ামের পাশাপাশি আসে এবং আপনি এমএমএক্স নির্দেশাবলীfft_mmx.c
ব্যবহারের ক্ষেত্রে নির্দিষ্ট পয়েন্ট সংস্করণ প্রয়োগ করার সিদ্ধান্ত নেন । পরে পেন্টিয়াম 3 বরাবর আসে এবং আপনি স্ট্রিমিং সিমডি এক্সটেনশানগুলি ব্যবহার করে এমন একটি সংস্করণ যুক্ত করার সিদ্ধান্ত নেন ।fft_sse.c
এখন আপনি CUDA যুক্ত করতে চান , তাই আপনি যুক্ত করুন fft_cuda.c
তবে আপনি বছরের পর বছর ধরে যে টেস্ট ডেটাসেটটি ব্যবহার করে চলেছেন তা দিয়ে সিউডিএ সংস্করণটি এসএসই সংস্করণটির চেয়ে ধীরতর! আপনি কিছু বিশ্লেষণ করেন এবং একটি ডেটাসেট যোগ করেন যা 100 গুণ বড় এবং আপনি প্রত্যাশিত গতি অর্জন করেন তবে এখন আপনি জানেন যে CUDA সংস্করণটি ব্যবহারের জন্য সেট আপের সময়টি তাৎপর্যপূর্ণ এবং ছোট ডেটাসেটের সাহায্যে আপনার একটি ব্যবহার করা উচিত সেট আপ ব্যয় ছাড়াই অ্যালগরিদম।
এই প্রতিটি ক্ষেত্রেই আপনি একই অ্যালগরিদম বাস্তবায়ন করছেন, সবার একই আচরণ করা উচিত, তবে বিভিন্ন আর্কিটেকচারে পৃথক দক্ষতা এবং গতি দিয়ে চলতে হবে (যদি তারা কিছুটা চালাবে)। যদিও কোড দৃষ্টিকোণ থেকে, একই ইন্টারফেসটি কেন বিভিন্ন উপায়ে প্রয়োগ করা হয় এবং সাধারণত, সবচেয়ে সহজ উপায়টি মূল অনিচ্ছাকৃত সংস্করণে ফিরে যাওয়া সন্ধানের জন্য আপনি যে কোনও উত্স ফাইলের তুলনা করতে পারেন।
এর সবগুলিই ওওপি বাস্তবায়নের জন্য যায় যেখানে একটি বেস ক্লাস যা অরক্ষিত অ্যালগরিদম প্রয়োগ করে এবং উত্পন্ন ক্লাসগুলি বিভিন্ন অপ্টিমাইজেশন প্রয়োগ করে।
গুরুত্বপূর্ণ বিষয় হ'ল একই জিনিসগুলি একই রাখুন , যাতে পার্থক্য সুস্পষ্ট হয় ।