در قسمت قبلی با MIPS و فرمول آن آشنا شدیم.
حالا می ریم سراغ یادگیری قانون آمدال، مثل همیشه یادگیری رو با یک مثال شروع می کنیم:
مثال: اگر 40 درصد زمان اجرای یک برنامه ، 5 برابر سریع شود ، کل برنامه چقدر سریع می شود؟
اگر زمان کل اجرای برنامه رو قبل از تسریع t در نظر بگیریم ، بعد از اینکه تسریع رو انجام دادیم 60 درصد t بدون تغییر باقی می ماند ، و 40 درصد آن به علت اینکه 5 برابر سریع شده ، زمانش تقسیم بر 5 خواهد شد.
بنابراین زمان جدید اجرای برنامه برابر است با :
after improvement: 0.4*(t/5) + 0.6*t = 0.68t
before improvement: t
برای بدست آوردن نسبت اینکه برنامه پس از بهبود چقدر سریع شده کافی ست ، زمان قبل از بهبود رو به زمان پس از بهبود تقسیم کنیم:
ratio : t / 0.68t = 100/68
یعنی برنامه ما به میزان 100/68 سریع تر از قبل شده است.
در قانون آمدال داریم که اگر کسر fraction از برنامه ، که این کسر باید بین صفر و یک باشد ، به اندازه speedup سریع تر شود ، کل برنامه به اندازه زیر سریع تر می شود:
همانطور که می بینید ، فرمول بالا چیزی برای حفظ کردن نداره و ما خودمون تونستیم مثال قبل رو بدون دونستن قانون آمدال حل کنیم.
بیاید با همدیگه یک مثال دیگه حل کنیم:
مثال: فرض کنید 50 درصد زمان اجرای یک برنامه ، مربوط به محاسبات ممیز شناور است ، و 30 درصد زمان مربوط به ضرب اعداد صحیح و 20 درصد بقیه هم مربوط به عملیات های دیگر.
برای بهبود برنامه دو پیشنهاد داریم ، شما کدوم رو پیشنهاد می کنید:
الف) سرعت میز شناور را 2 برابر کنیم.
ب) سرعت ضرب صحیح را 6 برابر کنیم.
برای بدست آوردن تسریع برنامه پس از بهبود برای هر دو قسمت قانون آمدال رو می نویسیم:
a) 1/(0.5t) + (0.5t/2) = 100/75
b) 1/ (0.7t) + (0.3t/6) = 100/75
همانطور که می بینید ، هر دو روش به یک میزان سرعت برنامه را افزایش می دهند و فرقی نمی کند کدام یک را انتخاب کنیم.
حالا میریم سراغ مفهوم جدیدی به نام FLOPS که مخفف floating point operations per second هست یعنی متوسط تعداد دستور ممیز شناور در ثانیه ، مثل MIPS یک پارامتر ارزیابی کارآیی می باشد. و بیشتر در پردازنده هایی کاربرد دارد که در آن ها محاسبات علمی زیادی انجام می شود.
مقدار FLOPS از تقسیم تعداد دستور ممیز شناور بر زمان اجرا بدست می آید.
در محاسبه FLOPS باید به یک نکته مهم توجه کرد ، که اون نکته رو در قالب یک مثال بیان می کنم:
مثال: فرض کنید در یک برنامه 200 میلیون عمل ممیز شناور انجام شده است ، زمان اجرای برنامه 10 ثانیه است که از این زمان 50 درصد آن صرف اجرای دستورات ممیز شناور شده است و سایر زمان صرف سایر عملیات ها شده است . FLOPS رو بیابید:
FLOPS: 200*10^6 / 10s = 20 * 10^6 flops or 20 Mflops
نکته مثال در این جاست که باید تعداد دستور ممیزشناور را بر زمان اجرای کل برنامه تقسیم کرد ، نه زمانی که فقط صرف انجام دستورات ممیز شناور شده است ، همانطور که در مثال بالا ما بر ده تقسیم کردیم نه بر 5!
معنای Mflops به معنای تعداد میلیون دستور ممیز شناور در ثانیه است و از تقسیم flops بر 6^10 بدست می آید.
پایان فصل دوم
در قسمت بعدی باهم فصل 3 معماری کامپیوتر رو شروع می کنیم.