আধুনিক গেম কোডে সত্যিকার অর্থে কতটি সমাবেশ ব্যবহৃত হয়? [বন্ধ]


21

গড়ে, আধুনিক গেম কোডে অ্যাসেম্বলি কতবার ব্যবহৃত হয়?

বিশেষত প্ল্যাটফর্মগুলিতে যেগুলি ইতিমধ্যে x86, পিপিসি, বা এআরএম এর মতো ভাল সি ++ সংকলক রয়েছে - কারণ আমি এম্বেডেড সিস্টেমে গেমগুলি সমাবেশের ব্যাপক ব্যবহার করি বলে মনে করি।


4
সি ++ সমাবেশে সংকলন করে না - এটি মেশিন কোডে সংকলন করে। সংসদীয় ভাষা হ'ল সরাসরি কোন মেশিন কোডটি আপনি উত্পন্ন করতে চান তা নির্দিষ্ট করার একটি উপায় is
কাইলোটন

6
সি ++ আসলে (সাধারণত) অ্যাসেমব্লিতে সংকলিত হয় না, এটি সরাসরি মেশিন কোডে সংকলিত হয়। প্রশ্নটি সম্ভবত হস্তচালিত সমাবেশটি কোনও প্রকল্পের সাথে সংযুক্ত বা ইনলাইন অ্যাসেমব্লিং হিসাবে লিখিত হওয়ার বিষয়ে উল্লেখ করছে।

1
নির্বিশেষে, আমি মনে করি না যে এই প্রশ্নের একটি ব্যবহারিক, দরকারী উত্তর আছে। এটি মূলত একটি কারণের উপর নির্ভর করে, যার অনেকগুলি বিষয়গত (যেমন, কোডের লেখকদের মতামত)।

1
এসপিইউ প্রোগ্রামিংয়ের মতো কিছু ব্যতিক্রম ব্যতীত আজকের দিনে এত বেশি রচনা সমাবেশ গুরুত্বপূর্ণ নয়, তবে এটি পড়তে সক্ষম হওয়া ক্র্যাশ ডাম্পগুলি বিশ্লেষণের জন্য গুরুত্বপূর্ণ
মাইক সেমদার

4
@ লেজিওন - আপনি সংকলক / আইডিইতে অ্যাসেম্বলি নির্গত করতে পারেন , তবে এর অর্থ এই নয় যে সংকলকটি একটি সাধারণ সংকলন প্রক্রিয়ার অংশ হিসাবে সমাবেশ তৈরি করে। এটি করার জন্য এটি প্রয়োজনীয় নয় এবং ফলস্বরূপ, বেশিরভাগ ক্ষেত্রে তা হয় না।

উত্তর:


29

উত্তরটি "গেম" দ্বারা আপনি কী বোঝাতে চান তার উপর এবং "ব্যবহৃত" এর উপরে কিছুটা নির্ভর করে। আমি ধরে নিব "ব্যবহৃত" অর্থ "নির্দিষ্ট গেম প্রকল্পের সময়" রচিত "।

আমার অভিজ্ঞতা এবং আমি যাদের সাথে কথা বলেছি তাদের উপাখ্যানের ডেটাতে:

  • ব্রাউজার ভিত্তিক গেমসে? কোনটিই নয়।
  • সাধারণ পিসি গেমসে? কোনটিই নয়। (তবে আপনি নিম্ন স্তরের গ্রন্থাগারে কিছু দেখতে পাবেন))
  • আইওএস এবং অ্যান্ড্রয়েড গেমসে? কোনটিই নয়।
  • "এএএ" পিসি গেমস এবং কনসোল গেমস? সম্ভবত সামান্য, সম্ভবত কোড বেসের 0.05%। (লাইব্রেরিতে আরও কিছু সহ।

গেমস শিল্পে কাজের জন্য অ্যাসেম্বলি ভাষার জ্ঞান আশা করা যায় না তবে আপনি যে গেমগুলি তৈরি করেন তার উপর নির্ভর করে এটি উপকারী হতে পারে।

একটি যুক্তি ছিল যে সংকলকটি হাতে লেখা অ্যাসেমব্লিকে মানুষের চেয়ে সি কোডের অনুকূলকরণে আরও ভাল কাজ করে। সাধারণত এটি সত্য, কখনও কখনও এটি মিথ্যা। তবে এই দিনগুলি ক্রমবর্ধমান সিপিইউ জটিলতার সংমিশ্রণ এবং 'আউট' (অর্থাৎ পৃথক প্রসেসরের পৃথককরণ) প্রয়োজনের অর্থ হল অপ্টিমাইজেশান প্রচেষ্টা সাধারণত অন্য কোথাও ব্যয় করা হয়।

সাম্প্রতিক বছরগুলিতে আমি কেবলমাত্র গেম কোডে __asm int 3অ্যাসেমব্লি দেখেছি ব্রেকআপপয়েন্টগুলিকে বাধ্য করার বিবরণী এবং আমার একমাত্র ব্যক্তিগত ব্যবহারের ব্যবহার অস্বাভাবিক ক্র্যাশ বাগগুলি নির্ণয়ের জন্য কোনও ফাংশনকে ছিন্নমূল করার পক্ষে ছিল।


1
এসএসই নির্দেশাবলী সম্পর্কে কি?
সৈন্যবাহিনী

4
@ লেজিওন, লোকেরা সাধারণত এসএসই কোড লিখতে হয় অন্তর্নিহিতগুলি ব্যবহার করে, বা গণিতের লাইব্রেরিগুলি যা এসএসই স্টাফগুলিকে আবৃত করে, বা বিশেষত এসএসইতে সংকলন করার জন্য বিশেষত ডিজাইন করা একটি ছোট ভাষায়, যেমন আইএসপিসি । সরাসরি সমাবেশ রচনা এখনও বেশ বিরল।
নাথান রিড

1
আইওএস গেম সম্পর্কিত: আমি যদি সঠিকভাবে মনে রাখি তবে 3 ডি / ম্যাথ গ্রন্থাগার ওলং কিছু ইনলাইন এআরএম সমাবেশ ব্যবহার করে। অ্যাপল এক্সিলারেট ফ্রেমওয়ার্ক প্রকাশের পর থেকে এটি আর দরকার নেই।
নিকোলাস মিয়ারি

নাথনের সাথে একমত - এসএসই এবং অনুরূপ নির্দেশ-নির্দিষ্ট অপ্টিমাইজেশান সাধারণত গ্রন্থাগারগুলির মধ্যেই থাকে (যেহেতু তারা সাধারণত একমাত্র জায়গা যেখানে মোট বেনিফিট অর্জিত প্রচেষ্টা মূল্যবান হয়)।
কাইলোটন

26

আধুনিক কনসোল গেমগুলিতে উচ্চ পারফরম্যান্স কোডের প্রচুর পরিমাণে সমাবেশ এবং সি ++: সংকলক অভ্যন্তরগুলির মধ্যে একটি মাঝারি স্থল ব্যবহার করে রচনা করা হয় । এই নির্মান চেহারা এবং পার্স সি ++ ফাংশন মত, কিন্তু আসলে একক মেশিন নির্দেশাবলী অনুবাদ করা হয় । সুতরাং, উদাহরণস্বরূপ, আমার "ভেক্টর ভি এর প্রতিটি মান বাতা>> এ এবং <= বি" ফাংশনটির মতো দেখায়

// 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
+1 কেবল কারণ ক্র্যাশ ওয়ার্কস এসও হিসাবে "গেমসের জন্য সত্যই নিম্ন-স্তরের অপ্টিমাইজড কোড লেখেন" নামে পরিচিত হিসাবে পরিচিত - যদি কেউ এই বিষয় সম্পর্কে জানেন তবে তিনিই।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

@ ব্লুরাজা-ড্যানিপ্লুঘুফুট "সুপরিচিত"? আমি চাটুকার! =) নাথন রিডের মন্তব্যের আলোকে একটি মজার কাকতালীয় ঘটনাটি হ'ল আমি দুষ্টু কুকুরটিতে আমার নিম্ন-স্তরের অপ্টিমাইজেশন দক্ষতা শিখেছি।
ক্রাশ ওয়ার্কস

অন্যত্র আমি ডিবাগিংয়ে সমাবেশের গুরুত্বও শুনেছি। সুতরাং আমি এটি শিখতে যাচ্ছি। অন্তর্দৃষ্টি এবং লিঙ্কগুলির জন্য ধন্যবাদ।
সৈন্যবাহিনী

7

যে সমস্ত সমস্যাগুলি হ্যান্ড রোলড অ্যাসেমব্লির প্রয়োজন ছিল তা সংখ্যায় কম হচ্ছে। আপনি গতিবেগের "কী" অর্জন করতে পারবেন তা আপনি পঠনযোগ্যতা এবং ডিবাগ করার ক্ষমতা হারাবেন। এটি কেবল কোডের বিভাগগুলিতে সর্বশেষ অপ্টিমাইজেশন পদক্ষেপগুলির একটি হিসাবে করা উচিত কারণ বেশিরভাগ ক্ষেত্রে গতির সমস্যা এমন কিছু নয় যা সমাবেশের সাথে আরও ভাল করা যায় না। এই দিনগুলিতে মেমোরির গতি না থাকায় সিপিইউ অনেক বেশি দ্রুতগতি অর্জন করেছে, প্রায়শই এটি কোনও কিছুর চেয়ে সিপিইউতে ডেটা কীভাবে প্রবাহিত হয় তা নিয়ন্ত্রণ করা আরও গুরুত্বপূর্ণ।

আধুনিক সংকলকগুলির সাথে তারা অ্যাসেম্বলি কোডটির আশেপাশে অনুকূলকরণ করাও কঠিন বলে মনে করেন তারা যেই রেজিস্টারগুলিকে স্পর্শ করেছেন তাদের মোকাবেলা করতে হবে এবং তারা সাধারণত আপনার হাতের তৈরি কারিপ্ট কোডটিতে পুনরায় অর্ডার করতে পারবেন না। সমাবেশের প্রয়োজনীয়তা হ্রাস করার জন্য, এখন অন্তর্নিবেশও রয়েছে যা নিম্ন স্তরের ধারণাগুলিতে অ্যাক্সেস পেতে সহায়তা করে, তবে এমন একটি উপায়ে যা সংকলক বান্ধব এবং তাদের পরিবর্তে বরং আপনার সাথে কাজ করার অনুমতি দেয়।

এই বলে যে, পিএস 3 এর এসপিইউ এমন একটি অঞ্চল যেখানে লোকেরা প্রসেসরের সর্বাধিক সুবিধা অর্জনের জন্য অ্যাসেম্বলি ব্যবহার করতে হচ্ছে, উদাহরণস্বরূপ এখানে বর্ণিত ম্যানুয়াল নির্দেশিকা পাইপলাইনিং সহ ।


1
এমনকি PS3 এ, লোকেরা সাধারণত খালি সমাবেশে বেশিরভাগ প্রোগ্রাম করে না। একটি সরঞ্জাম রয়েছে যা আপনাকে সমাবেশ-জাতীয় সিনট্যাক্সে কোড লিখতে দেয়, যেখানে আপনি মেশিনের নির্দেশাবলী নির্দিষ্ট করে থাকেন তবে এটি আপনার জন্য রেজিস্টার বরাদ্দ, নির্দেশের সময়সূচী এবং লুপ পাইপলাইনিং করে। ঠিক আছে, সম্ভবত দুষ্টু কুকুর এটি সমস্ত কিছু হাতে হাতে করে, তবে বেশিরভাগ PS3 এসপিইউ বিকাশকারীরা আমার অভিজ্ঞতায় নেই। :)
নাথান রিড

1
@ নাথানরিড পিএস 2 দিনে, ম্যানুয়াল লুপ পাইপলাইনিং আসলে দুষ্টু কুকুর প্রোগ্রামার সাক্ষাত্কারের অংশ ছিল।
ক্রাশ ওয়ার্কস

-1

আসল বিষয়টি হ'ল আমরা একাধিক প্ল্যাটফর্মের বিশ্বে বাস করি এবং আমাদের গেম কোডের কিছু অংশ স্থানীয় প্ল্যাটফর্মের সাথে তাল মিলিয়ে তৈরি করতে হবে - ভাল করার দরকার নেই, তবে আমরা যদি স্থানীয় হার্ডওয়্যার স্টাফের সুবিধা গ্রহণ করি তবে সুবিধা রয়েছে!

এটি গেমস বা গেম লজিকের বিষয়ে নয়, কোডটির অনুকূল পারফরম্যান্সের জন্য এটি হার্ডওয়্যার লোকালটির কথা যার উপর নির্ভর করে গেমটি লজিকের কব্জায়, আমরা প্রকৃতপক্ষে কোড বিভাগগুলি মোড়ানো করতে পারি, উদাহরণস্বরূপ ম্যাক্রো ব্যবহার করে যেমন একটি উত্স কোড রয়েছে যা কার্যকরভাবে কার্যকর করে প্ল্যাটফর্মটি এর বিপরীতে নির্মিত হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.