কোড ঘনত্ব এবং এর সংজ্ঞা সম্পর্কে


9

আমার একটি ধারণাগত প্রশ্ন আছে: "উচ্চ" কোডের ঘনত্বটির অর্থ কী? এবং কেন এটি এত গুরুত্বপূর্ণ?

উত্তর:


24

কোডের ঘনত্বটি কোনও অনুরোধিত ক্রিয়া সম্পাদন করতে কত মাইক্রোপ্রসেসর নির্দেশিকা গ্রহণ করে এবং প্রতিটি নির্দেশিকা কতটা জায়গা নেয় তা শিথিলভাবে উল্লেখ করে। সাধারণভাবে বলতে গেলে কোনও নির্দেশিকা যত কম জায়গা নেয় এবং কোনও মাইক্রোপ্রসেসর যে নির্দেশনা তত বেশি কাজ করতে পারে তার কোডটি তত বেশি ঘন হয়।

আমি লক্ষ্য করেছি যে আপনি আপনার প্রশ্নটিকে 'বাহু' ট্যাগ দিয়ে ট্যাগ করেছেন; আমি এআরএম নির্দেশাবলী ব্যবহার করে কোড ঘনত্ব চিত্রিত করতে পারি।

ধরা যাক আপনি মেমরির এক স্থান থেকে অন্য জায়গায় ডেটা ব্লকের অনুলিপি করতে চান। ধারণাগতভাবে, আপনার উচ্চ স্তরের কোডটি এর মতো দেখতে লাগবে:

void memcpy(void *dest, void *source, int count_bytes)
{
    char *s, *d;

    s = source; d = dest;
    while(count_bytes--) { *d++ = *s++; }
}

এখন সাধারণ মাইক্রোপ্রসেসরের জন্য একটি সাধারণ সংকলক এটিকে নিম্নলিখিতগুলির মতো কিছুতে রূপান্তর করতে পারে:

movl r0, count_bytes
movl r1, s
movl r2, d
loop: ldrb r3, [r1]
strb [r2], r3
movl r3, 1
add r1, r3
add r2, r3
sub r0, r3
cmp r0, 0
bne loop

(আমার এআরএম কিছুটা মরিচা, তবে আপনি ধারণাটি পাবেন)

এখন এটি একটি খুব সাধারণ সংকলক এবং খুব সাধারণ মাইক্রোপ্রসেসর হবে তবে আপনি উদাহরণ থেকে দেখতে পারবেন যে আমরা লুপটির পুনরাবৃত্তির জন্য 8 টি নির্দেশনা দেখছি (7 যদি আমরা '1' কে অন্য রেজিস্টারে স্থানান্তরিত করি এবং বোঝা সরিয়ে নিই) লুপ বাইরে)। আসলেই মোটেও ঘন নয়। কোডের ঘনত্বও কার্য সম্পাদনকে প্রভাবিত করে; কোডটি ঘন না হওয়ার কারণে যদি আপনার লুপগুলি দীর্ঘ হয় তবে লুপটি ধরে রাখতে আপনার আরও নির্দেশের ক্যাশে লাগতে পারে। আরও ক্যাশে মানে আরও ব্যয়বহুল প্রসেসর, তবে আবার জটিল নির্দেশনা ডিকোডিংয়ের অর্থ অনুরোধকৃত নির্দেশটি বোঝার জন্য আরও বেশি ট্রানজিস্টর থাকে, সুতরাং এটি একটি সর্বোত্তম প্রকৌশল সমস্যা।

এআরএম এই ক্ষেত্রে খুব সুন্দর। প্রতিটি নির্দেশ শর্তসাপেক্ষ হতে পারে, বেশিরভাগ নির্দেশাবলী রেজিস্টরের মান বৃদ্ধি বা হ্রাস করতে পারে এবং বেশিরভাগ নির্দেশাবলী allyচ্ছিকভাবে প্রসেসরের পতাকাগুলি আপডেট করতে পারে। এআরএমে এবং একটি পরিমিতরূপে দরকারী সংকলক সহ, একই লুপটি দেখতে এরকম কিছু দেখতে পারে:

movl r0, count_bytes
movl r1, s
movl r2, d
loop: ldrb r3, [r1++]
strb [r2++], r3
subs r0, r0, 1
bne loop

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

এখন নেটিভ এআরএম কোডে প্রায়শই অভিযোগ ছিল যে এটি অতি ঘন নয়; এটি দুটি মূল কারণের কারণে: প্রথমত, 32 বিটগুলি একটি ভয়ঙ্কর "দীর্ঘ" নির্দেশনা, তাই সহজ নির্দেশাবলীর জন্য প্রচুর পরিমাণে বিটগুলি নষ্ট হয়ে যায় বলে মনে হয় এবং দ্বিতীয়ত, এআরএমের প্রকৃতির কারণে কোডটি ফুলে যায়: প্রতিটি নির্দেশ 32 টি বিট দীর্ঘ, ব্যতিক্রম ছাড়া। এর অর্থ হ'ল এখানে 32-বিট আক্ষরিক মানগুলির একটি বিশাল সংখ্যা রয়েছে যা আপনি কেবল একটি রেজিস্টারটিতে লোড করতে পারবেন না। যদি আমি "0x12345678" আর-তে লোড করতে চাইতাম, তবে আমি কীভাবে এমন একটি নির্দেশকে কোড করব যেটিতে কেবল 0x12345678 নেই, তবে "আরএলকে আর -0 লোড করুন" এর বর্ণনাও দেওয়া আছে? প্রকৃত ক্রিয়াকলাপটি কোড করার জন্য কোনও বিট নেই। এআরএম লোডের আক্ষরিক নির্দেশ একটি আকর্ষণীয় ছোট্ট জন্তু এবং এআরএম এসেম্ববলারও অবশ্যই সাধারণ এসেম্বেবলারদের চেয়ে কিছুটা স্মার্ট হতে হবে, কারণ এটি "ধরা" দিতে হয়

যাইহোক, এই অভিযোগগুলির উত্তর দিতে, এআরএম থাম্ব মোড নিয়ে এসেছিল। প্রতি নির্দেশে 32 বিটের পরিবর্তে, নির্দেশের দৈর্ঘ্য এখন প্রায় সমস্ত নির্দেশাবলীর জন্য 16 বিট এবং শাখার জন্য 32 বিট। থাম্ব মোডের সাথে কয়েকটি ত্যাগ ছিল, তবে এবং বৃহত্তর এই ত্যাগগুলি করা সহজ ছিল কারণ থাম্ব আপনাকে কেবলমাত্র নির্দেশের দৈর্ঘ্য হ্রাস করে কোডের ঘনত্বের 40% উন্নতির মতো কিছু পেয়েছিল।


দুর্দান্ত উত্তর। সত্যিই দুর্দান্ত।
পিংসওয়েপ করেছে

থাম্ব 2 উল্লেখ করতে ভুলবেন না, যা বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য আরও বড় উন্নতি।
ইয়ান রামিন

খুব আকর্ষণীয় পড়া। আমি এই সাইটে কেবল প্রশ্ন এবং উত্তর পড়তে অনেক কিছু শিখছি।
onaclov2000

আপনাকে অনেক ধন্যবাদ অ্যান্ড্রু, দুর্দান্ত উত্তর, এটি আমার সন্দেহ নিয়ে আমাকে অনেক সাহায্য করেছে :)
কোয়ারেমজ

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

1

কোনও নির্দেশের সেটটির "কোড ঘনত্ব" হ'ল একটি পরিমাপ যা আপনি প্রদত্ত পরিমাণ প্রোগ্রাম মেমোরিতে পেতে পারেন বা প্রোগ্রাম মেমরির কতগুলি বাইট আপনাকে প্রদত্ত পরিমাণ কার্যকারিতা সঞ্চয় করতে হবে।

অ্যান্ড্রু কোহলস্মিথ যেমন উল্লেখ করেছেন, এমনকি একই এমসিইউতেও বিভিন্ন সংকলক বিভিন্ন কোডের ঘনত্ব পেতে পারেন।

আপনি মিরো সামেকের "কম্পিউটার ওয়ার্ল্ডের কীটপতঙ্গ" পড়ে উপভোগ করতে পারেন , যা বিভিন্ন MCUs এর সাথে তুলনা করে।

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