গড়ে, আধুনিক গেম কোডে অ্যাসেম্বলি কতবার ব্যবহৃত হয়?
বিশেষত প্ল্যাটফর্মগুলিতে যেগুলি ইতিমধ্যে x86, পিপিসি, বা এআরএম এর মতো ভাল সি ++ সংকলক রয়েছে - কারণ আমি এম্বেডেড সিস্টেমে গেমগুলি সমাবেশের ব্যাপক ব্যবহার করি বলে মনে করি।
গড়ে, আধুনিক গেম কোডে অ্যাসেম্বলি কতবার ব্যবহৃত হয়?
বিশেষত প্ল্যাটফর্মগুলিতে যেগুলি ইতিমধ্যে x86, পিপিসি, বা এআরএম এর মতো ভাল সি ++ সংকলক রয়েছে - কারণ আমি এম্বেডেড সিস্টেমে গেমগুলি সমাবেশের ব্যাপক ব্যবহার করি বলে মনে করি।
উত্তর:
উত্তরটি "গেম" দ্বারা আপনি কী বোঝাতে চান তার উপর এবং "ব্যবহৃত" এর উপরে কিছুটা নির্ভর করে। আমি ধরে নিব "ব্যবহৃত" অর্থ "নির্দিষ্ট গেম প্রকল্পের সময়" রচিত "।
আমার অভিজ্ঞতা এবং আমি যাদের সাথে কথা বলেছি তাদের উপাখ্যানের ডেটাতে:
গেমস শিল্পে কাজের জন্য অ্যাসেম্বলি ভাষার জ্ঞান আশা করা যায় না তবে আপনি যে গেমগুলি তৈরি করেন তার উপর নির্ভর করে এটি উপকারী হতে পারে।
একটি যুক্তি ছিল যে সংকলকটি হাতে লেখা অ্যাসেমব্লিকে মানুষের চেয়ে সি কোডের অনুকূলকরণে আরও ভাল কাজ করে। সাধারণত এটি সত্য, কখনও কখনও এটি মিথ্যা। তবে এই দিনগুলি ক্রমবর্ধমান সিপিইউ জটিলতার সংমিশ্রণ এবং 'আউট' (অর্থাৎ পৃথক প্রসেসরের পৃথককরণ) প্রয়োজনের অর্থ হল অপ্টিমাইজেশান প্রচেষ্টা সাধারণত অন্য কোথাও ব্যয় করা হয়।
সাম্প্রতিক বছরগুলিতে আমি কেবলমাত্র গেম কোডে __asm int 3
অ্যাসেমব্লি দেখেছি ব্রেকআপপয়েন্টগুলিকে বাধ্য করার বিবরণী এবং আমার একমাত্র ব্যক্তিগত ব্যবহারের ব্যবহার অস্বাভাবিক ক্র্যাশ বাগগুলি নির্ণয়ের জন্য কোনও ফাংশনকে ছিন্নমূল করার পক্ষে ছিল।
আধুনিক কনসোল গেমগুলিতে উচ্চ পারফরম্যান্স কোডের প্রচুর পরিমাণে সমাবেশ এবং সি ++: সংকলক অভ্যন্তরগুলির মধ্যে একটি মাঝারি স্থল ব্যবহার করে রচনা করা হয় । এই নির্মান চেহারা এবং পার্স সি ++ ফাংশন মত, কিন্তু আসলে একক মেশিন নির্দেশাবলী অনুবাদ করা হয় । সুতরাং, উদাহরণস্বরূপ, আমার "ভেক্টর ভি এর প্রতিটি মান বাতা>> এ এবং <= বি" ফাংশনটির মতো দেখায়
// for each v.x, ensure v.x >= a.x && v.x <= b.x
inline __m128 ClampSIMD( const __m128 &v, const __m128 & a, const __m128 & b )
{
return _mm_max_ps( a, _mm_min_ps( v, b ) );
}
এই জাতীয় ফাংশনগুলিতে আমি এখনও নির্দিষ্ট মেশিনের নির্দেশাবলী বিবেচনা করছি , তবে সিগুলিতে এগুলি লেখার সুবিধা আমার রয়েছে যাতে নিবন্ধের রঙিন এবং সময়সূচী এবং লোড অপ্স এবং অন্যান্য বিরক্তিকর বিশদ সম্পর্কে আমার চিন্তা করার দরকার নেই।
আপনার এখনও সিপিইউ কী নির্দেশনা সমর্থন করে সে সম্পর্কে সচেতন হওয়া দরকার, বিশেষত কারণ স্মার্ট মানুষ কাজটি কীভাবে করতে পারে তার তুলনায় আধুনিক সংকলকরা ভেক্টরাইজিং কোডে ভয়ানক। এছাড়াও কখনও কখনও আপনি কীভাবে আপনার কোডটি সাজান তার সূক্ষ্ম বিবরণে পারফরম্যান্সের জন্য বিশাল প্রভাব পড়তে পারে যা মেশিনটি কী করছে তা বোঝা ছাড়াই সুস্পষ্ট নয়।
যদিও আমরা সমাবেশে কোড নাও করতে পারি, তবুও আমরা ডিবাগ করি সমাবেশে প্রচুর পরিমাণে । সংকলকগুলি আক্রমণাত্মকভাবে কোডগুলি এমনভাবে পুনর্গঠিত করে যেগুলি ডিবাগারগুলি ধরে রাখতে পারে না, তাই প্রায়শই কোনও "রিলিজ মোড" ডিবাগ করার সময় সবচেয়ে ভাল জিনিসটি তৈরি করা পপটি কোডের মাধ্যমে বিচ্ছিন্ন করে এবং ট্রেসকে পপ করে। ক্র্যাশগুলির "ফরেনসিক ডিবাগিং" এ এই জিডিসি আলাপটি সেই স্তরে ডিবাগিংয়ের অনেকগুলি হুঁশিয়ারি এবং চিত্র তুলে ধরে।
যে সমস্ত সমস্যাগুলি হ্যান্ড রোলড অ্যাসেমব্লির প্রয়োজন ছিল তা সংখ্যায় কম হচ্ছে। আপনি গতিবেগের "কী" অর্জন করতে পারবেন তা আপনি পঠনযোগ্যতা এবং ডিবাগ করার ক্ষমতা হারাবেন। এটি কেবল কোডের বিভাগগুলিতে সর্বশেষ অপ্টিমাইজেশন পদক্ষেপগুলির একটি হিসাবে করা উচিত কারণ বেশিরভাগ ক্ষেত্রে গতির সমস্যা এমন কিছু নয় যা সমাবেশের সাথে আরও ভাল করা যায় না। এই দিনগুলিতে মেমোরির গতি না থাকায় সিপিইউ অনেক বেশি দ্রুতগতি অর্জন করেছে, প্রায়শই এটি কোনও কিছুর চেয়ে সিপিইউতে ডেটা কীভাবে প্রবাহিত হয় তা নিয়ন্ত্রণ করা আরও গুরুত্বপূর্ণ।
আধুনিক সংকলকগুলির সাথে তারা অ্যাসেম্বলি কোডটির আশেপাশে অনুকূলকরণ করাও কঠিন বলে মনে করেন তারা যেই রেজিস্টারগুলিকে স্পর্শ করেছেন তাদের মোকাবেলা করতে হবে এবং তারা সাধারণত আপনার হাতের তৈরি কারিপ্ট কোডটিতে পুনরায় অর্ডার করতে পারবেন না। সমাবেশের প্রয়োজনীয়তা হ্রাস করার জন্য, এখন অন্তর্নিবেশও রয়েছে যা নিম্ন স্তরের ধারণাগুলিতে অ্যাক্সেস পেতে সহায়তা করে, তবে এমন একটি উপায়ে যা সংকলক বান্ধব এবং তাদের পরিবর্তে বরং আপনার সাথে কাজ করার অনুমতি দেয়।
এই বলে যে, পিএস 3 এর এসপিইউ এমন একটি অঞ্চল যেখানে লোকেরা প্রসেসরের সর্বাধিক সুবিধা অর্জনের জন্য অ্যাসেম্বলি ব্যবহার করতে হচ্ছে, উদাহরণস্বরূপ এখানে বর্ণিত ম্যানুয়াল নির্দেশিকা পাইপলাইনিং সহ ।
আসল বিষয়টি হ'ল আমরা একাধিক প্ল্যাটফর্মের বিশ্বে বাস করি এবং আমাদের গেম কোডের কিছু অংশ স্থানীয় প্ল্যাটফর্মের সাথে তাল মিলিয়ে তৈরি করতে হবে - ভাল করার দরকার নেই, তবে আমরা যদি স্থানীয় হার্ডওয়্যার স্টাফের সুবিধা গ্রহণ করি তবে সুবিধা রয়েছে!
এটি গেমস বা গেম লজিকের বিষয়ে নয়, কোডটির অনুকূল পারফরম্যান্সের জন্য এটি হার্ডওয়্যার লোকালটির কথা যার উপর নির্ভর করে গেমটি লজিকের কব্জায়, আমরা প্রকৃতপক্ষে কোড বিভাগগুলি মোড়ানো করতে পারি, উদাহরণস্বরূপ ম্যাক্রো ব্যবহার করে যেমন একটি উত্স কোড রয়েছে যা কার্যকরভাবে কার্যকর করে প্ল্যাটফর্মটি এর বিপরীতে নির্মিত হয়েছিল।