আমি ইমেজ প্রসেসিং এবং raytracing মত খুব কর্মক্ষমতা-সমালোচনামূলক এলাকায় কাজ পক্ষপাতমূলক হতে পারে, কিন্তু আমি এখনও নিখুত বলতে চাই "প্রয়াত যতটা সম্ভব" । আপনার প্রয়োজনীয়তা কতটা পারফরম্যান্স-সমালোচনামূলক তা বিবেচনাধীন নয়, পূর্বের চেয়ে আপনি পরিমাপ করার পরে সবসময়ই পূর্বের দৃষ্টিতে অনেক বেশি তথ্য এবং স্পষ্টতা থাকে যার অর্থ এমনকি সবচেয়ে কার্যকর অপ্টিমাইজেশান সাধারণত এ জাতীয় জ্ঞান অর্জনের পরে প্রয়োগ করা হয়।
অদ্ভুত মামলা
তবে কখনও কখনও "যথাসম্ভব দেরি" কিছু অদ্ভুত ক্ষেত্রে খুব তাড়াতাড়ি খুব খারাপ is আমরা যদি অফলাইনে রেন্ডারগুলির সাথে কথা বলি, উদাহরণস্বরূপ, কার্য সম্পাদন করতে আপনি যে ডেটা স্ট্রাকচার এবং কৌশলগুলি ব্যবহার করেন সেটি আসলে ব্যবহারকারীর শেষ নকশায় প্রবেশ করে। এটি ঘৃণ্য মনে হতে পারে তবে ক্ষেত্রটি এতটাই কাটিয়া এবং এত কার্য সম্পাদন-সমালোচক যে ব্যবহারকারীরা কোনও নির্দিষ্ট রেট্রেসার (উদাহরণস্বরূপ: ইরেডিয়েন্স ক্যাচিং বা ফোটন ম্যাপিং) এর জন্য প্রযোজ্য অপ্টিমাইজেশান কৌশলগুলির জন্য নির্দিষ্ট ব্যবহারকারী-প্রান্ত নিয়ন্ত্রণগুলি গ্রহণ করে, যেহেতু তাদের কয়েকটি ব্যবহার করা হয় কোনও চিত্র রেন্ডার করার জন্য অপেক্ষা করার সময়, এবং অন্যরা রেন্ডারিংয়ের জন্য উত্সর্গীকৃত মেশিনগুলির সাথে ভাড়া দেওয়ার জন্য বা রেন্ডার ফার্মের মালিকানার জন্য প্রচুর পরিমাণে অর্থ সংগ্রহ করতে অভ্যস্ত। যদি কোনও প্রতিযোগিতামূলক অফলাইন রেন্ডারার সময় ব্যয়িত সময়গুলিতে একটি অপ্রয়োজনীয় হ্রাস করতে পারে তবে সেই ব্যবহারকারীদের জন্য সময় এবং অর্থের ব্যাপক হ্রাস রয়েছে। এটি এমন এক ধরণের অঞ্চল যেখানে সময়কালে ৫% হ্রাস আসলে ব্যবহারকারীদের উত্তেজিত করে।
এই ধরণের অদ্ভুত ক্ষেত্রে আপনি কেবল একটি রেন্ডারিং কৌশল উইলি-নিলি বাছাই করতে পারবেন না এবং পরে এটি অপ্টিমাইজ করার আশা করতে পারেন, যেহেতু ব্যবহারকারীর শেষ নকশা সহ পুরো নকশাটি আপনার ব্যবহৃত ডেটা স্ট্রাকচার এবং অ্যালগরিদমের চারপাশে ঘোরে। আপনি অগত্যা এখানে যেমন অন্য ব্যক্তিদের পক্ষে ভাল কাজ করেছেন কেবল তার সাথে যেতে পারেন না, আপনি, ব্যক্তি হিসাবে এবং আপনার বিশেষ শক্তি এবং দুর্বলতাগুলি, একটি প্রতিযোগিতামূলক সমাধান সরবরাহের পক্ষে ভারী কারণ। আর্নল্ডের পিছনে মূল বিকাশকারীদের মানসিকতা এবং সংবেদনশীলতা ভিআরএতে কাজ করা ব্যক্তিদের থেকে পৃথক যারা খুব ভিন্ন পদ্ধতির ব্যবহার করেছিলেন; তারা অগত্যা জায়গা / কৌশলগুলি অদলবদল করতে এবং সর্বোত্তম কাজ করতে পারে না (যদিও তারা উভয় শিল্পপতি)। আপনাকে এক ধরণের পরীক্ষা-নিরীক্ষা এবং প্রোটোটাইপ এবং বেঞ্চমার্ক করতে হবে এবং আপনি কী খুঁজে বের করতে হবে ' আপনি যদি এমন কোনও প্রতিযোগিতামূলক জিনিস বিক্রি করতে চান যা বাস্তবে বিক্রি হবে এমন প্রত্যাশা সেখানে কাটানো প্রান্ত কৌশলগুলির অফুরন্ত অ্যারে দেওয়াতে বিশেষভাবে ভাল। সুতরাং এই অদ্ভুত ক্ষেত্রে, পারফরম্যান্স উদ্বেগগুলি সামনে অগ্রসর হওয়া পর্যন্ত সম্ভবত সবচেয়ে গুরুত্বপূর্ণ উদ্বেগ এমনকি বিকাশ শুরু করার আগেই।
তবুও এটি প্রয়োজনীয় "যতদূর সম্ভব দেরী" অনুকূলিতকরণের লঙ্ঘন নয় , এই চরম এবং অদ্ভুত ক্ষেত্রে এটি কেবল "যতদূর সম্ভব দেরি" হওয়া উচিত তাড়াতাড়ি। কখন এবং কখন কী প্রাথমিক পর্যায়ে পারফরম্যান্স উদ্বেগের প্রয়োজন হয় না তা নির্ণয় করা সম্ভবত বিকাশকারীদের পক্ষে প্রধান চ্যালেঞ্জ। কোন বিকাশকারীদের ক্যারিয়ারে শিখতে এবং শেখা চালিয়ে যাওয়ার জন্য সবচেয়ে মূল্যবান জিনিসগুলির মধ্যে কোনটি অপ্টিমাইজ না করা হতে পারে, যেহেতু আপনি নিখুঁত বিকাশকারীদের কোনও ঘাটতি খুঁজে পাচ্ছেন না যে সমস্ত কিছু অনুকূল করতে চান (এবং দুর্ভাগ্যক্রমে এমন কিছু অভিজ্ঞ ব্যক্তিও যে কোনওভাবে তাদের চাকরিটি চালিয়ে গেছেন তাদের পাল্টা উত্পাদনশীলতা সত্ত্বেও)।
যতটা সম্ভব লেট
সম্ভবত সবচেয়ে কঠিন অংশটি এর অর্থ বোঝার চেষ্টা করা। আমি এখনও শিখছি এবং আমি প্রায় তিন দশক ধরে প্রোগ্রামিং করছি। তবে বিশেষত এখন আমার তৃতীয় দশকে, আমি বুঝতে শুরু করেছি যে এটি এতটা কঠিন নয়। এটি রকেট বিজ্ঞান নয়, আপনি যদি প্রয়োগের চেয়ে ডিজাইনের দিকে বেশি মনোনিবেশ করেন। আপনার নকশাগুলি নকশায় কোনও পরিবর্তন ছাড়াই যথাযথ অপ্টিমাইজেশনের জন্য যত বেশি শ্বাস প্রশ্বাসের ঘর ছেড়ে যায়, আপনি পরবর্তীকালে অনুকূলিত করতে পারেন। এবং আরও বেশি বেশি উত্পাদনশীলতা আমি এই জাতীয় নকশাগুলি সন্ধান করেছি যা আমাকে সেই শ্বাসকষ্টের সাধ্য দেয়।
পরে অনুকূলিত করার জন্য কোনটি শ্বাস প্রশ্বাসের ঘরটি ডিজাইন করুন
এই ধরণের ডিজাইনগুলি আসলে বেশিরভাগ ক্ষেত্রে অর্জন করা এত কঠিন নয় যদি আমরা কিছু "সাধারণ জ্ঞান" প্রয়োগ করতে পারি। একটি ব্যক্তিগত গল্প হিসাবে আমি শখ হিসাবে ভিজ্যুয়াল আর্টের মধ্যে আছি (আমি এটি শিল্পীদের জন্য তাদের প্রয়োজনগুলি বুঝতে এবং তাদের ভাষা বলতে কিছুটা হলেও নিজেকে সফটওয়্যার প্রোগ্রাম করতে সহায়তা করি) এবং আমি 2000 এর দশকের গোড়ার দিকে ওকাকি অ্যাপলেট ব্যবহার করে কিছুটা সময় ব্যয় করেছি ডুডল এবং আমার কাজ ভাগ করে নেওয়ার এবং অন্য শিল্পীদের সাথে সংযুক্ত হওয়ার দ্রুত উপায় হিসাবে অনলাইনে।
বিশেষত আমার পছন্দের সাইট এবং অ্যাপলেটটিতে পারফরম্যান্সের ত্রুটিগুলি ছড়িয়ে পড়েছিল (কোনও তুচ্ছ ব্রাশের আকার কোনও ক্রলকে ধীরে ধীরে কমিয়ে দেয়), তবে খুব সুন্দর একটি সম্প্রদায় ছিল। পারফরম্যান্স সম্পর্কিত সমস্যাগুলির বিষয়ে কাজ করার জন্য আমি কিশোরী 1 বা 2-পিক্সেল ব্রাশগুলি খুব কম ব্যবহার করেছি এবং কেবল আমার কাজটি এরকমভাবে লিখেছি:
এদিকে আমি কার্যকারিতা উন্নত করার জন্য সফ্টওয়্যারটির লেখককে পরামর্শ দিয়েছি, এবং তিনি লক্ষ্য করেছেন যে আমার পরামর্শগুলি বিশেষত প্রযুক্তিগত প্রকৃতির ছিল যা মেমরি অপটিমাইজেশন এবং অ্যালগরিদম এবং তারপরে আরও কিছু কথা বলে। সুতরাং তিনি আসলে জিজ্ঞাসা করেছিলেন আমি কোনও প্রোগ্রামার কিনা এবং আমি হ্যাঁ বলেছি এবং তিনি আমাকে উত্স কোডে কাজ করার জন্য আমন্ত্রণ জানিয়েছেন।
সুতরাং আমি উত্স কোডটি দেখেছিলাম, এটি চালিয়েছি, এটি প্রোফাইল করেছি এবং আমার ভয়াবহতার জন্য তিনি একটি "অ্যাবস্ট্রাক্ট পিক্সেল ইন্টারফেস" ধারণাটির চারপাশে সফ্টওয়্যারটি তৈরি করেছিলেন, যেমন IPixel
, যা গতিশীল সহ সমস্ত কিছুর শীর্ষস্থানীয় হটস্পটের পিছনে মূল কারণ হয়ে দাঁড়িয়েছিল প্রতিটি একক চিত্রের প্রতিটি পিক্সেলের জন্য বরাদ্দ এবং প্রেরণ। তবুও পুরো সফ্টওয়্যারটির নকশাকে পুনর্বিবেচনা না করেই এটি অপ্টিমাইজ করার কোনও ব্যবহারিক উপায় ছিল না কারণ ডিজাইনটি তাকে এমন এক কোণে আটকে রেখেছে যেখানে আমাদের বিমূর্তাগুলি যখন একক বিমূর্ত পিক্সেলের দানাদার স্তরে কাজ করছে তখন মাইক্রো-অপ্টিমাইজেশনের সবচেয়ে তুচ্ছ ঘটনা ছাড়াই সেখানে নেই not এবং সবকিছু এই বিমূর্ত পিক্সেলের উপর নির্ভর করে।
আমি মনে করি এটি "সাধারণ জ্ঞান" এর লঙ্ঘন তবে স্পষ্টতই এটি বিকাশকারীদের পক্ষে সাধারণ জ্ঞান ছিল না। তবে এটি এমন গ্রানুলার স্তরে জিনিসগুলি বিমূর্ত না করার মতো যেখানে সর্বাধিক প্রাথমিক ব্যবহারের ঘটনাগুলি লক্ষ লক্ষ দ্বারা তাত্ক্ষণিকভাবে চলতে চলেছে যেমন পিক্সেল, বা কণা বা জিনোমাস আর্মি সিমুলেশনের ক্ষুদ্র ইউনিটগুলির সাথে। সমর্থন করুন IImage
বা (আপনার সমস্ত ইমেজ / পিক্সেল ফরম্যাটের আপনি যে bulkier সমষ্টিগত পর্যায়ে প্রয়োজন সব ব্যবস্থা করতে সক্ষম) IParticleSystem
করতে IPixel
বা IParticle
, এবং তারপর আপনি সবচেয়ে মৌলিক এবং দ্রুত-টু-লেখ এবং সহজ-থেকে-বুঝতে যেমন ইন্টারফেসগুলি পিছনে বাস্তবায়নের এবং লাগাতে পারেন সমস্ত সফটওয়্যার রুম আপনার পুরো সফ্টওয়্যার ডিজাইনের পুনর্বিবেচনা না করে পরে কখনই অনুকূলিতকরণ করতে হবে।
আমি লক্ষ্য হিসাবে এই দিন এটি লক্ষ্য। উপরের অফলাইন রেন্ডারগুলির মতো অদ্ভুত মামলাগুলি বাদ দিয়ে, যতটা সম্ভব দুর্যোগের তথ্য (পরিমাপ সহ) সাথে যতটা সম্ভব দেরী করে নেওয়ার জন্য পর্যাপ্ত শ্বাসকষ্টের নকশা করুন এবং যত তাড়াতাড়ি সম্ভব প্রয়োজনীয় অপ্টিমাইজেশন প্রয়োগ করুন।
অবশ্যই আমি প্রয়োজনীয়ভাবে ইনপুটগুলিতে চতুর্ভুজ জটিল জটিলতা অ্যালগরিদম ব্যবহার শুরু করার পরামর্শ দিচ্ছি না যা সাধারণ ব্যবহারকারীর শেষের ক্ষেত্রে সহজেই একটি তুচ্ছ আকারে পৌঁছায়। তা কে করে? তবে বাস্তবায়ন যদি পরে পরিবর্তন করা সহজ হয় তবে আমি এটিকে এত বড় বিষয় মনে করি না। আপনার যদি কোনও ডিজাইনের পুনর্বিবেচনা না করতে হয় তবে এটি এখনও গুরুতর ভুল নয়।