به نام خدا
با وجود کسانی که حتی رشته دانشگاهی مرتبط با این موضوع دارند اما این مسائل فقط در سطح تئوری و کتاب ها باقی میماند
و کسانی نیستند که این مسائل را عملی کنند یا اینکه معماری های جدیدی را از این نظر بررسی نمایند
بنده حقیر تصمیم گرفتم که برای دوستان با توجه به مطالعات خودم به صورت پایه و نکات اصلی به ساده ترین شیوه ممکن توضیح دهم
همه چیز از ترانزیستور تشکیل شده که شیوه کار ان را خودتون میتوانید تحقیق کنید
نیم رسانایی که در ان ناخالصی با عدد اتمی کمتر و بیشتر اضافه شده
که الکترون اضافی ناخالصی با عدد اتمی بیشتر به سمت ناخالصی با عدد اتمی کمتر حرکت میکند
ترانزیستور سه پایه دارد که وجود جریان در پایه وسطی بیس به سمت امیتر باعث حرکت جریان از امیتر به کولکتور می شود
مثل سویچ یا کلیدی که وجود جریانی باعث بودن یا نبودن جریان دیگر میشود .
اگه وجود جریان را برابر با یک و نبود انرا برابر با صفر قرار دهیم با کنار هم قرار دادن ترانزیستور هایی میتوانیم
حالت هایی به نام GATE را ایجاد کنیم
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
که نتیجه و جریان اصلی و نهایی را با توجه به صفر یا یک بودن دو جریان دیگر و روشن یا خاموش شدن ترانزیستور تایین کرد
شکل های ابتدایی مثل ( یا و هیچ کدام و هردو و...) که با استفاده هوشمندانه از اینها میتوان اعمال اصلی ریاضی را ساخت
که با ان ALU می گویند
با کنار هم قرار دادن 32 عدد از Alu های یک بیتی می توان یک 32 بیتی را داشت
یعنی تا حرف 32 عددی باینری یا 32 تا سیم و اتصال ورودی را پشتیبانی میکند
که بزرگترین عدد باینری 32 حرفی که 32 تا یک پشت سر هم باشد به عدد ده دهی رقم 4294967295 می باشد
Register
حافظه ساخته شده از ترانزیستور است که حالت روشن یا خاموشی ترانزیستور داده های درون انرا نشان میدهد
تمام تراشه و سخت افزار تشکیل شده است ریجستر و Alu و BUS یعنی سیم کشی بین انها هست
و در حالت ها و وظایف مختلف اسامی خاصی به انها داده میشود و هیچ چیز دیگری به جز اینها وجود ندارد
و ما فقط ترانزیستور خالص داریم
حالا ممکنه بعضیا بگن چطور تیمی که مسئولین سخت افزار ان 10 نفر است و بقیه انها نرم افزار هستند
تراشه با چندین میلیون ترانزیستور رو طراحی میکنند ؟!!!!! و چقدر براشون زمان می بره!!!!
در واقع اینجا بلاک ها و قطعات اماده با مشخصات معین وجود دارد
انها تنها این قسمت ها را کنار هم قرار میدهند و کار اصلی انها این است که برای خواسته خودشان چه الگوریتم مناسبی طراحی کنند و چطور با قطعات موجود انرا پیاده کنند
امروزه توسط نرم افزار بلاک های اماده از ریجستر و ALU و باس ها را کنار هم قرار میدهند
و نرم افزار با بانک داده خوش انرا پیاده سازی میکنند و مسئولیت نیروی انسانی فقط بهینه سازی این قسمت ها است
شن ها درون کوره ها تبدیل به سیلیکون می شوند و ورق های سیلیکون توسط لیزر کنده کاری میشود
و تزریق ناخالصی و ساخت ترانزیستور و سیم کشی ها انجام می شود که یک تراشه به صورت خودکار با ماشین ساخته میشود
الکترونیت پیشرفته امروزی فقط علم چیدمان قطعات است
و خیلی از اصول معماری های غیر تجاری و پایه مطرح پردازنده ها توسط دانشگاه ها ساخته شده است
[Only registered and activated users can see links. ]
IO ریجستری است که ورودی قسمت های سخت افزاری خارجی نظیر کیبورد یا مودم در این قسمت ذخیره میشود
Cpu داده های IO را دریافت و با دستوراتی که در مموری درباره ان وجود دارد مقایسه میکند
این عملیات باعث هدر رفت وقت cpu برای IO و ممموری میشود . در این مواقع پردازنده اختصاصی به نام DMA وجود دارد
که داده های IO با مموری را خودکار مقایسه میکند و در صورت وجود دستورالعمل داده را برای CPU ارسال می نماید
Instruction Register (IR)
در محله ارسال fetch دستورات از مموری خارجی برای انجام عملیات به این ریجستر انتقال داده می شود
Program Counter (PC)شمارنده عملیات ها هربار که عملی انجام میشود عددی به مقدار اولیه اضافه میشود
و در این ریجستر ذخیره میشود تا هر بار که مموری و دیگر بخش ها بخواهند بدانند که در چه مرحله ای هستند به این ریجستر مراجعه کنند
ALU دارای یک ریجیستر است و به ان Accumulator یا ریجستر کاری می گویند
ISA instructionبرای کوتاه کردن دستورات و نام گذاری قسمت ها و عملیات مختلف سخت افزاری از نام گزاری اختصاصی و کوتاه شده به زبان باینری استفاده میشود
و زبان Assembly نشانه گزاری این علامت ها به زبان انسانی است
مثلا برای عملیات جمع عبارت 00 در باینری و Add به صورت Assembly می توان در نظر گرفت
دستورت ISA برای هر سخت افزاری متفاوت هست و ریجستر ها و قسمت های مختلف سخت افزاری نیز می توان اسم کوتاه شده داد
[Only registered and activated users can see links. ]
Decodeوظیفه این قسمت ان است که دستورات فشرده ISA را به زبان قابل فهم برای سخت افزار ترجمه کند
[Only registered and activated users can see links. ]
همان طور که در تصاویر داده شده است هر حرف باینری میتواند اشاره به یک قسمت سخت افزاری داشته باشد
[Only registered and activated users can see links. ]
یک دیکودر دو حرفی به چهار حرفی را می بینید که با قطعات ساده GATE ساخته شده است
و حالت های مختلف دو حرف اشاره به یکی از چهار قسمت سخت افزاری است
در حالت های پیشرفته تر دیکودر های دو مرحله ای یا دیکودر هایی که بخش پردازشی و ALU دارند نیز وجود دارد
که با حجم داده کم ادرس ها و عملیات های طولانی باینری را ایجاد میکند به صورتی که برای ماشین و هر بخش پردازشی قابل فهم باشد
چهار مرحله اصلی برای معماری پایه و ساده ترین شکل پردازنده RISC وجود دارد
Fetch
یعنی پرتاب و دستور العمل از حافظه به ریجستر IR کپی میشود و یک شماره به PC اضافه میشود
Decode
دستوران ترجمه میشوند و بخش های پردازشی مورد نظر فعال می گردنند و یک شماره به PC اضافه می شود که نشان میدهد در مرحله دوم پردازش قرار داریم
Execute
در این مرحله محاسبات ترجمه شده توسط واحد محاسباتی انجام میشود PC همانند قبل
Write back
نتیجه محاسبات در ریجستر اولیه ذخیره می گردد و پایان عملیات
این مراحل در پردازنده ساده مقابل به ساده ترین شکل ممکن نمایش داده شده است
[Only registered and activated users can see links. ]
100 مقدار اولیه شمارنده برنامه PC است
و ALU پایین ان وظیف اضافه کردن عدد یک به ریجستری جاری ان PC با هر بار جلو رفت مرحله پردازش است
سه BUS و سیم کشی اصلی وجود دارد. که هرکدام به بخش مخصوص خودشان متصل است داده و جریان و کنترل
IR ریجستر دستور عمل قبل از ورود به دیکود که در اینجا به ان Control Unit گفته میشود
B و C و D و E هرکدام ریجستری جانبی برای انجام عملیات داده ورودی به ALU اصلی است
A حافظه جاری یا Accumulator است
در تصویر دستور العمل اول مقدار A را برابر 10 قرار ده
[Only registered and activated users can see links. ]
دستور العمل دوم مقدار B را برابر 15 قرار ده
[Only registered and activated users can see links. ]
دستور العمل سوم مقدار A و B را جمع کن که در ریجستر جاری برابر 25 شده است
[Only registered and activated users can see links. ]
در اینجا تصاویری از معماری پیچیده تر از نوع پنج مرحله ای RISC را می بینید
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
ظهور پردازنده های Pipeline
در معماری های قبلی همیشه برای پردازش یک دستور باید تمام مراحل را می رفت و تا اتمام ان دستور دیگری ارسال نمیشد
[Only registered and activated users can see links. ]
مثلا تولید یک لباس شویی را در نظر بگیریم که یک لباس مراحل شستن و وخشک کردن و اتو کشیدن را دارد
ماشین لباس شویی 30 دقیقه و خشک کن 40 دقیقه و اتو کشیدن 20 دقیقه طول میکشد
اگر یک فرد مراحل ترتیبی را دنبال کند همیشه یک لباس 90 دقیقه طول می کشد که برای چهار لباس 6 ساعت خواهد شد
[Only registered and activated users can see links. ]
اگر فرد شیوه خط لوله را یاد بگیرد و تمام مراحل پیوسته در حال انجام باشد
و در زمانی که لباس اولی شسته شده است و به خشک کن میرود لباس شویی بیکار نباشد و لباس دومی را بندازد
می بینیم که از 6 ساعت به 3.5 ساعت برای چهار لباس می رسیم
شیوه خط لوله همانند خط تولید برای خودروها میباشد
مثلا انتظار داشتیم که حداقل cpu دیگه مثل گرافیک نباشد اما می بینیم که اینجا هم مشابه هم هستند
و الان می بینیم که تمام پردازنده های مدرن از ALU های متصل به هم استفاده میکنند
اما چطور ممکن است ؟
درسته استقلال نرم افزاری هر دستور العمل حفظ شده است و ما اینجا موازات نداریم بلکه
اسم به کار برده شده در اینجا throughput یا افزایش ضرفیت است
برای اینکار از ILP یا instruction level parallelism به شیوه متفاوت استفاده شده است
قسمت های دیگر برای این ALU های خط لوله ادرس دهی انجام میدهند بخش هایی مثل DECODE و ...
پردازش انها به این قسمت ها ارسال میشود البته ممکن است که در بعضی معماری ها قسمت اختصاصی پردازنه مخصوص خودشان را داشته باشند
طول خط لوله و تعداد قسمت های ان به اندازه مراحل پردازش است
[Only registered and activated users can see links. ]
به دلیل انکه در هر بار عملیات خط لوله تمام داده های ان بیرون داده میشود هر عملیات خط لوله را Clock Cycle می گویند
Clock cycle چرخه کلاک فقط مربوط به داده ها می شود نه دستورالعمل یک پردازش
هر رنگ نشان دهنده یک پردازش های یک دستور العمل است که به ترتیب قسمت های خط لوله را در کلاک های متفاوت می پیماید
در هر عملیات خط لوله یا چرخه کلاک داده یک دستورالعمل فقط در یکی از مراحل خط لوله وجود دارد
به تعداد مراحل خط لوله clock cycle حداقل باید انجام شود تا یک دستور العمل مرحله به مرحله به اخر برسد
[Only registered and activated users can see links. ]
دستورالعمل 1 بعد از F1 به D1 می رسد و F که فارق شده است پردازش F2 را انجام میدهد
به دلیل اینکه شیوه دسته بندی و پردازش دستور العمل موازی نیست و متفاوت است هر مرحله درون خط لوله را یک کلاک میگویند
در صورت افزایش مرحله خط لوله یا بزرگتر شدن ان کلاک پردازنده نیز افزایش می یابد اما تاخیر و چرخه و خطا نیز به همان اندازه زیاد میشود
Data Hazard
این مشکل به خاطر افزایش ضرفیت پذیرش دستورالعمل هاست و در پردازنده های غیر خط لوله این مشکل وجود ندارد
از انجایی که شیوه ارسال پردازش ها زنجیری و پشت سر هم است در صورتی که نیاز به داده ای داشته باشد که هنوز پردازش نشده است
در خط لوله بحران صورت میگیرد که در اینجا Stall به شیوه هایی که قبلا شنیده اید صورت نمی گیرد
bubble
خط لوله به کار خودش ادامه میدهد اما برای ان دستورالعمل پردازش درون خط لوله bubble یا حباب ایجاد میشود
که خالی از پردازش خواهد ماند تا زمانی که از تمام مراحل خط لوله خارج شود
[Only registered and activated users can see links. ]
به همین خاطر در این پردازنده ها برای جلوگیری از این اتفاقات اولویت کد نویسی خیلی اهمیت دارد و از قبل داده ها باید تعریف و پردازش شوند
البته سیستم هایی وجود دارد که پردازش را با نادیده گرفتن مقدار مورد نیاز انجام میدهند
که به ان out-of-order execution یا پردازش خارج از دستور می گویند
Branch
یا شاخه حالت هایی در الگوریتم است که نتیجه نهایی مشخص نیست و وابسته به حالت های دیگری است
و در برنامه نویسی مثال ان IF است و دوراهی هایی که پاسخ ان بله یا خیر است و با توجه به پاسخ مسیر تغییر میکند
شاخه ها حالت بحرانی یا Hazard می باشند برای حل این موضوح branch prediction در پردازنده ها ساخته شده است
در صورتی که نتیجه شاخه را به درستی پیشبینی کند باعث میشود که پردازنده کار کمتری انجام دهد و از زمان جلوتر بیفتد
اما در صورتی که نتیجه به درستی پیش بینی نشود تاخیر بیشتری میدهد یا حتی ممکن است داده های کل خط لوله پاک سازی شود
پردازنده های RISC انعطاف کمتری در شاخه ها و الگوریتم های IF دار دارند
برای حل این موضوع پردازنده های CISC که مخصوص شاخه ها و Branch و بحران ها طراحی شده اند ایجاد شد
Complex instruction set computing
ساده ترین نوع این پردازنده دو قسمت اضافه در خط لوله دارند که بعد از دیکود و مشخص شدن دستورالعمل
[Only registered and activated users can see links. ]
دسترسی به ریجستری در مراحل خط لوله دارند و و میتوانند داده را در ریجستری ایجاد یا بخوانند
پردازنده های CISC نسبت به RISC ازادی برنامه نویسی بیشتری دارند اما ساختمان و خط لوله بزرگتر با مصرف بیشتر و تاخیر بیشتر هستند
شکل امروزی اخرین پردازنده های اینتل و ZEN به این صورت است
[Only registered and activated users can see links. ]
بعد از دیکود و مشخص شدن دستور العمل به خط لوله های اختصاصی و مجزا حرکت میکنند
خط لوله داده های شناور Floating point همان SIMD های کلاسیک برای پردازش های درکلاس گرافیک است
که اینتل AVX و SSE را را برای ان توسعه داده است
این داستان ادامه دارد .....