আমি সর্বদা শব্দটি "মাইক্রো-অপ্টিমাইজেশন" পেয়েছিলাম, বরং অস্পষ্ট। মেমোরি লেআউট এবং অ্যাক্সেস প্যাটার্নগুলিতে কিছু নির্দেশ-স্তরের পরিবর্তন যদি অ্যালগরিদমিক জটিলতায় কোনও হ্রাস না করে তাদের হটস্পটগুলি পরিমাপ করে শৃঙ্খলাবদ্ধ পেশাদার থেকে কিছুটা 80 গুণ দ্রুত করে তোলে, এটি কি "মাইক্রো-অপ্টিমাইজেশন"? আমার কাছে এটি একটি "মেগা-অপ্টিমাইজেশন" যা বাস্তব-বিশ্বের ব্যবহারের ক্ষেত্রে 80 গুণ বেশি দ্রুত তৈরি করতে পারে। এই ধরনের অপ্টিমাইজেশনের সাথে মাইক্রোস্কোপিক প্রভাব থাকে যেমন লোকেরা এই বিষয়ে কথা বলতে ঝোঁক।
আমি আর গেমদেদে কাজ করছি না তবে আমি পথের সন্ধানের মতো অঞ্চলে ভিএফএক্স-এ কাজ করি এবং আমি সেখানে বিভিএইচ এবং কেডি গাছের অনেকগুলি বাস্তবায়ন দেখেছি যা একটি জটিল দৃশ্যে প্রতি সেকেন্ডে ~ 0.5 মিলিয়ন রশ্মি প্রক্রিয়াকরণ করে (এবং এটি দিয়ে মাল্টিথ্রেডেড মূল্যায়ন)। মোটামুটিভাবে বলতে গেলে আমি একাধিক রে / সেকেন্ডের নীচে মাল্টিথ্রেড মূল্যায়ন সহ এক মিলিয়ন রে / সেকেন্ডের নিচে রাইসট্র্যাকিং প্রসঙ্গে একটি বিভিএইচ-এর প্রত্যক্ষ বাস্তবায়ন দেখতে পাই। এম্ব্রির একটি বিভিএইচ রয়েছে যা একই हार्डवेयर সহ একই দৃশ্যে 100 মিলিয়ন রশ্মি প্রসেস করতে পারে।
এটি পুরোপুরি "মাইক্রো-অপ্টিমাইজেশনের" কারণে যে এম্ব্রি 200 গুণ দ্রুত (একই অ্যালগোরিদম এবং ডেটা কাঠামো), তবে অবশ্যই এটি এত দ্রুত কারণ হ'ল এর পিছনে ইন্টেলের ডেভেলপাররা পেশাদার যারা তাদের প্রোফাইল এবং পরিমাপের উপর ঝুঁকছেন এবং সত্যিই গুরুত্বপূর্ণ যে ক্ষেত্রগুলি সুরক্ষিত। তারা হানির বাইরে কোড উইলি-নিলি পরিবর্তন করছে না এবং পরিবর্তন করেছে যা উল্লেখযোগ্যভাবে অবনমিত রক্ষণাবেক্ষণের জন্য 0.000000001% উন্নতি করেছে। এগুলি বিচার্য হাতে প্রয়োগ করা খুব নির্ভুল অপটিমাইজেশন ছিল - এগুলি ফোকাসের ক্ষেত্রে মাইক্রোস্কোপিক হতে পারে তবে কার্যক্ষেত্রে ম্যাক্রোস্কোপিক।
স্বাভাবিকভাবেই গেমগুলির আসল-সময় ফ্রেমের হারের প্রয়োজনীয়তার সাথে, আপনি কতটা উচ্চ-স্তরের বা নিম্ন-স্তরের গেম ইঞ্জিনের সাথে কাজ করছেন তার উপর নির্ভর করে (এমনকি ইউই 4 দিয়ে তৈরি গেমগুলি প্রায়শই কমপক্ষে আংশিকভাবে উচ্চ-স্তরের স্ক্রিপ্টে প্রয়োগ করা হয়, তবে বলুন না, পদার্থবিজ্ঞানের ইঞ্জিনের সবচেয়ে গুরুত্বপূর্ণ অংশ), মাইক্রো অপ্টিমাইজেশান নির্দিষ্ট কিছু ক্ষেত্রে ব্যবহারিক প্রয়োজন হয়ে ওঠে।
আমাদের প্রতিদিনের চারপাশের আরও একটি প্রাথমিক ক্ষেত্রটি হ'ল চিত্র প্রক্রিয়াকরণ, যেমন রিয়েল-টাইমে উচ্চ-রেজোলিউশন চিত্রগুলি ঝাপসা করা এবং সম্ভবত এমন একটি রূপান্তরের অংশ হিসাবে তাদের উপর অন্যান্য প্রভাব করা যা আমরা সম্ভবত কোথাও দেখেছি, এমনকি কোনও ওএস প্রভাবও। আপনি অগত্যা কোনও চিত্রের সমস্ত পিক্সেলের মাধ্যমে স্ক্র্যাচ লুপিং থেকে এ জাতীয় চিত্র অপারেশনগুলি বাস্তবায়িত করতে পারবেন না এবং ফ্রেম হারের সাথে মিলে এমন বাস্তব সময়ের ফলাফল আশা করতে পারেন expect যদি এটি সিপিইউ হয় আমরা সাধারণত সিমড এবং কিছু মাইক্রো-টিউনিং খুঁজছি, বা আমরা জিপিইউ শেডারগুলিতে খুঁজছি যা কার্যকরভাবে লেখার জন্য একটি মাইক্রো স্তরের ধরণের মানসিকতার প্রয়োজন হয়।
যদি হ্যাঁ, হার্ডওয়্যার উন্নত হওয়ায় আমাদের কি উচ্চ স্তরের ভাষাগুলি গেমিংয়ের শিল্প গ্রহণের প্রত্যাশা করা উচিত?
আমি বরং সন্দেহ করি যে হার্ডওয়ারের অগ্রগতিগুলি একাই করতে পারে, কারণ হার্ডওয়্যার যেমন অগ্রসর হয়, তেমনি নির্দেশনা এবং প্রযুক্তিও (যেমন: জিপিইউতে পদার্থবিজ্ঞান), এবং কৌশলগুলি এবং গ্রাহকরা কী দেখতে চান তার প্রত্যাশা এবং প্রতিযোগিতা করে in ডেভেলপাররা প্রায়শই নিম্ন-স্তরের দিকে যেতে পারে এমন উপায়গুলি যেমন ওয়েব ডেভেলপারদের ক্ষেত্রেও এখন ওয়েবজিএলে নিম্ন-স্তরের জিএলএসএল শেডার লিখছেন (এই নির্দিষ্ট ধরণের ওয়েব ডেভলপমেন্টটি তর্কিতভাবে এমনকি আরও এক দশক বা দুই দশকের তুলনায় আরও নিম্ন-স্তরের, যেহেতু জিএলএসএল একটি অত্যন্ত নিম্ন-স্তরের সি-এর মতো ভাষা, এবং আমি কখনও এক-দু'দিক আগেও অনুমান করতে পারি নি যে কিছু ওয়েব বিকাশকারী এই জাতীয় নিম্ন স্তরের জিপিইউ শেডার লিখতে অভ্যস্ত)।
যদি পারফরম্যান্স-সমালোচনামূলক অঞ্চলগুলিকে উচ্চ-স্তরের ভাষাগুলিতে স্থান দেওয়ার উপায় হয়ে থাকে, তবে সফ্টওয়্যার এবং সংকলক এবং সরঞ্জামগুলি যেগুলি আমরা দেখতে পেয়েছি সেগুলি থেকে আরও আসতে হবে। যে কোনও অদূর ভবিষ্যতে আমার কাছে সমস্যাটি হার্ডওয়্যার পর্যাপ্ত শক্তিশালী হচ্ছে না। এর সাথে আরও কীভাবে করা যায় তার সাথে আমরা আরও কার্যকরভাবে কথা বলার উপায়গুলি খুঁজে পাচ্ছি না যতবার এটি পরিবর্তিত হয় এবং প্রতিবারের মতো নিজের ভাষায় ফিরে আমাদের কাজ না করে অগ্রসর হয়। এটি আসলে সেই দ্রুত গতি যার সাথে হার্ডওয়্যার পরিবর্তিত হয় যা উচ্চ-স্তরের প্রোগ্রামিংগুলিকে এই অঞ্চলগুলির জন্য বরং অধরা বলে মনে করে, যেহেতু অনুমানকভাবে যদি আমাদের হার্ডওয়্যার নীচের দশক ধরে নীল থেকে অগ্রসর হওয়া বন্ধ করে দেয়,
আনন্দের সাথে আজকাল, আমি যখন সত্যিকারের পারফরম্যান্স-সমালোচনামূলক ক্ষেত্রে কাজ করছি তখন আমার কিছুটা কম ভাবতে হবে আমার চেয়ে বেশি (যদিও আমি বোরল্যান্ড টার্বো সি ডস যুগে শুরু করেছি)। কারণ আগে সিপিইউ ক্যাশে প্রায় অস্তিত্ব ছিল। এটি বেশিরভাগই কেবল ডিআআআআএম এবং নিবন্ধভুক্ত ছিল, যার অর্থ আমি অ্যালগরিদমিক জটিলতায় আরও বেশি মনোনিবেশ করতে পারি এবং গাছের মতো সংযুক্ত কাঠামোগুলি খুব পারফরম্যান্সের দিকে না নিয়েই খুব সোজা পদ্ধতিতে লিখতে পারি। এই দিনগুলিতে সিপিইউ ক্যাশের নিম্ন-স্তরের বিশদগুলি আমার চিন্তাকে প্রায় অ্যালগরিদমের মতোই প্রাধান্য দেয়। এবং একইভাবে আমাদের কাছে মাল্টি-কোর মেশিন রয়েছে যা আমাদের মাল্টিথ্রেডিং এবং অ্যাটমিক্স এবং মাইটেক্সেস এবং থ্রেড সুরক্ষা এবং একই সাথে উপাত্ত কাঠামো এবং আরও অনেক কিছু সম্পর্কে ভাবতে বাধ্য করে, যা আমি বলব, অনেক দিক থেকে অনেক নিচু স্তরের ফোকাস (যেমন আমি যখন শুরু করেছি তার চেয়ে বেশি, এতটা স্বজ্ঞাত নয়)।
অদ্ভুতভাবে এখন এটি আমার কাছে খুব সত্য বলে মনে হচ্ছে। আমার মনে হয় আমি 30 বছর আগের তুলনায় আজ অন্তর্নিহিত এবং নিম্ন-স্তরের জটিলতা এবং হার্ডওয়্যারের বিশদ দ্বারা আরও বেশি প্রভাবিত হয়েছি, নস্টালজিয়া চশমাটি সরিয়ে দেওয়ার জন্য যথাসাধ্য চেষ্টা করছি। অবশ্যই আমরা এখানে সমাবেশের জন্য কিছুটা কথা বলতে পেরেছিলাম এবং এক্সএমএস / ইএমএসের মতো কিছু বিব্রত বিবরণ নিয়ে কাজ করতে হয়েছিল। তবে বেশিরভাগ অংশে আমি বলব যে জটিলতা এবং হার্ডওয়্যার এবং সংকলক সচেতনতা আমার তখনকার চেয়ে প্রয়োজন ছিল যখন আমি পারফরম্যান্স-সমালোচনামূলক ক্ষেত্রে কাজ করছি তখন আমার আজকের চেয়ে বেশি ছিল। এবং এটি প্রায় পুরো শিল্পের ক্ষেত্রে সত্য বলে মনে হয় যদি আমরা লেখার মতো করে রাখিif/else
কিছুটা মানবিকভাবে পঠনযোগ্য উপায়ে বিবৃতি দেওয়া এবং বিবেচনা করুন যে এই দিনগুলিতে সাধারণ মানুষ হার্ডওয়ারের নিম্ন-স্তরের বিশদ সম্পর্কে আরও চিন্তাভাবনা করছে (একাধিক কোর থেকে জিপিইউ থেকে সিমডি থেকে সিপিইউ ক্যাশে এবং কীভাবে তাদের সংকলক / দোভাষী / তার অভ্যন্তরীণ বিবরণগুলি লাইব্রেরি কাজ এবং তাই)।
উচ্চ স্তর! = কম দক্ষ
এই প্রশ্নে ফিরে আসা:
যদি হ্যাঁ, হার্ডওয়্যার উন্নত হওয়ায় আমাদের কি উচ্চ স্তরের ভাষাগুলি গেমিংয়ের শিল্প গ্রহণের প্রত্যাশা করা উচিত?
আমার কাছে এটি হার্ডওয়্যার সম্পর্কিত নয়। এটি অপ্টিমাইজার এবং সরঞ্জাম সম্পর্কে। আমি যখন লোকেরা কার্যত সমস্ত কনসোল গেমসকে সমাবেশে লিখতে শুরু করি এবং তখন একটি আসল পারফরম্যান্স সুবিধা ছিল বিশেষত 6502 মানের মানের সংকলক তৈরির অভাবের কারণে।
সি সংকলনকারীরা যখন তাদের অপ্টিমাইজেশনে চৌকস হয়ে উঠল, তখন তারা এমন একটি জায়গায় পৌঁছতে শুরু করেছিল যেখানে সি-তে লেখা উচ্চ স্তরের কোডটি প্রতিদ্বন্দ্বী ছিল এবং মাঝে মাঝে এমনকি অনেকগুলি ক্ষেত্রে (যদিও সর্বদা নয়) সেরা সমাবেশের বিশেষজ্ঞরা রচিত কোডকেও ছাড়িয়ে গিয়েছিল এবং এটি এটি তৈরি করেছে তাই কোনও গেমের জন্য কমপক্ষে বেশিরভাগ কোডিংয়ের জন্য সি গ্রহণ করা কোনও মস্তিষ্কের ছিল। এবং সি অনুরূপ শিফট ধীরে ধীরে সি ++ এর সাথে এক পর্যায়ে ঘটেছিল। সি ++ গ্রহণটি ধীর ছিল কারণ আমি মনে করি যে সমাবেশ থেকে সিতে যাওয়ার উত্পাদনশীলতা বৃদ্ধির বিষয়টি সম্ভবত গেমদেবদের কাছ থেকে সিএস থেকে সি ++ যাওয়ার বিপরীতে সম্পূর্ণরূপে তুচ্ছ গেমগুলি লেখার জন্য সর্বসম্মত চুক্তিতে পৌঁছে যেতে পারে।
তবে এই শিফটগুলি হার্ডওয়্যারটি এত বেশি শক্তিশালী হয়ে ওঠে নি যতটা এই ভাষাগুলির জন্য অপ্টিমাইজারগুলি নিম্ন স্তরে চলে আসে (যদিও সর্বদা সম্পূর্ণ নয়, কিছু অস্পষ্ট ক্ষেত্রে রয়েছে) অপ্রচলিত।
আপনি যদি এমন একটি অনুমানমূলক দৃশ্য কল্পনা করতে পারেন যেখানে আমরা মাল্টিথ্রেডিং বা জিপিইউ বা ক্যাশে মিস করা বা এর মতো কোনও কিছু (সম্ভবত নির্দিষ্ট ডেটা স্ট্রাকচারও নয়) নিয়ে কোনও উদ্বেগ ছাড়াই উচ্চ-স্তরের কোডে কল্পনাযোগ্য কোডটি লিখতে পারি এবং অপ্টিমাইজারটি কৃত্রিম বুদ্ধিমত্তার মতো ছিল স্মার্ট এবং আমাদের ডেটাটিকে পুনরায় সাজানো এবং কমপ্যাক্ট করার জন্য সবচেয়ে দক্ষ মেমরি লেআউটগুলি বের করতে পারে, এটি এখানে এবং সেখানে কিছু জিপিইউ ব্যবহার করতে পারে, কিছু সিমডি ব্যবহার করতে পারে, সম্ভবত নিজেই প্রোফাইল তৈরি করতে পারে এবং আমাদের মানুষ হিসাবে এর আইআরটিকে আরও অনুকূল রাখতে পারে প্রোফাইলার হটস্পটগুলিতে প্রতিক্রিয়া জানায় এবং এটি এমনভাবে করেছে যে বিশ্বের সেরা বিশেষজ্ঞদেরকে পরাজিত করে, তবে এটি সবচেয়ে বেশি পারফরম্যান্স-সমালোচনামূলক ক্ষেত্রে কাজ করা লোকদের পক্ষে এটি গ্রহণ করাও বুদ্ধিমান হতে পারে না ... এবং এটি একটি অগ্রগতি হাস্যকর স্মার্ট অপ্টিমাইজার থেকে আসছে, দ্রুত হার্ডওয়্যার নয়।