قابل توجه کاربران گرامی: تاپیک معرفی اعضاء برای آشنایی بیشتر با یکدیگر (حتما شرکت کنید) لینک

MSI Notebook
Green MSI


نمایش نتایج: از 1 به 6 از 6
Like Tree10Likes
  • 3 Post By asdaf
  • 3 Post By asdaf
  • 4 Post By asdaf

موضوع: بررسی پایه های معماری پردازنده اصلی و کامپیوتر

  1. #1
    Active Member
    asdaf آواتار ها
    تاریخ عضویت
    Oct 2013
    محل سکونت
    qom
    نام واقعی
    Mohammad.Ali
    نوشته ها
    201
    تشکر شده 1,529 بار در 206 پست
    asdaf آنلاین نیست.

    بررسی پایه های معماری پردازنده اصلی و کامپیوتر

    به نام خدا

    با وجود کسانی که حتی رشته دانشگاهی مرتبط با این موضوع دارند اما این مسائل فقط در سطح تئوری و کتاب ها باقی میماند
    و کسانی نیستند که این مسائل را عملی کنند یا اینکه معماری های جدیدی را از این نظر بررسی نمایند
    بنده حقیر تصمیم گرفتم که برای دوستان با توجه به مطالعات خودم به صورت پایه و نکات اصلی به ساده ترین شیوه ممکن توضیح دهم

    همه چیز از ترانزیستور تشکیل شده که شیوه کار ان را خودتون میتوانید تحقیق کنید
    نیم رسانایی که در ان ناخالصی با عدد اتمی کمتر و بیشتر اضافه شده
    که الکترون اضافی ناخالصی با عدد اتمی بیشتر به سمت ناخالصی با عدد اتمی کمتر حرکت میکند
    ترانزیستور سه پایه دارد که وجود جریان در پایه وسطی بیس به سمت امیتر باعث حرکت جریان از امیتر به کولکتور می شود
    مثل سویچ یا کلیدی که وجود جریانی باعث بودن یا نبودن جریان دیگر میشود .

    اگه وجود جریان را برابر با یک و نبود انرا برابر با صفر قرار دهیم با کنار هم قرار دادن ترانزیستور هایی میتوانیم
    حالت هایی به نام 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 را را برای ان توسعه داده است

    این داستان ادامه دارد .....
    Olesius, TERRORIST and mohammad72 like this.


    Motherboard Processor
    Main Memory Graphics Card
    Cooling Power Supply

  2. 9 کاربر بابت این ارسال مفید از asdaf تشکر کرده اند:

    a.aryaiee (23rd October 2016),amirsss (23rd October 2016),ErfanDL (23rd October 2016),golabettruter (23rd October 2016),mohammad72 (23rd October 2016),Olesius (23rd October 2016),overclock990 (23rd October 2016),Reza Y (30th October 2016),TERRORIST (23rd October 2016)



  3. #2
    Moderator
    TERRORIST آواتار ها
    تاریخ عضویت
    Sep 2012
    محل سکونت
    هر جایی که عملیات تروریستی باشه.
    نام واقعی
    Behzad
    نوشته ها
    1,990
    تشکر شده 14,820 بار در 2,069 پست
    TERRORIST آنلاین نیست.
    درود

    بسیار مطلب خوبی قرار دادید، یک نکته ای هستش این که پردازنده های Intel بر خلاف IBM و دیگر شرکتهای سازنده واحد پردازشی مرکزی ، بایت را از سمت چپ به راست شماره گذاری می کند ولی پردازنده های ساخت IBM و ... بایتها از سمت راست به چپ شماره گذاری


    Motherboard : Asus X99-Deluxe-USB 3.1 Processor : Intel Core i7 6900K
    Main Memory : GSkill Ripjaws 4 | 4×4GB=16GB DDR4 2800MHz Graphics Card : XFX DD AMD RADEON 2* R9 390X
    Cooling : Cooler Master MasterAir Maker 8 Power Supply : GREEN GP850B-OC+ Evo 80Plus Platinum


  4. 3 کاربر بابت این ارسال مفید از TERRORIST تشکر کرده اند:

    asdaf (23rd October 2016),golabettruter (23rd October 2016),mohammad72 (23rd October 2016)



  5. #3
    Moderator
    Olesius آواتار ها
    تاریخ عضویت
    Aug 2012
    محل سکونت
    Overclockingheroes.com
    نام واقعی
    Ali
    سن
    30
    نوشته ها
    1,272
    تشکر شده 10,311 بار در 1,365 پست
    Olesius آنلاین نیست.
    ممنون محمد علی جان مثل همیشه عالی بود و لذت بردیم


    Motherboard Processor
    Main Memory Graphics Card
    Cooling Power Supply
    this is my life homie, you decide yours

    چارلی چاپلین: آدم خوبــــــــــی باش
    ولی وقتت رو برای اثباتش به دیگران تلف نکن... !

    همیشه آنچه که درباره "من" می دانی باور کن،
    نه آنچه که پشت سر "من" شنیده ای "من" همانم که دیده ای نه آنکه شنیده ای... !


  6. 4 کاربر بابت این ارسال مفید از Olesius تشکر کرده اند:

    a.aryaiee (23rd October 2016),asdaf (23rd October 2016),golabettruter (23rd October 2016),mohammad72 (23rd October 2016)



  7. #4
    Assistant
    a.aryaiee آواتار ها
    تاریخ عضویت
    Aug 2016
    سن
    29
    نوشته ها
    89
    تشکر شده 379 بار در 94 پست
    a.aryaiee آنلاین نیست.
    عالی بود عزیز


    Motherboard : Not Specified Processor : Not Specified
    Main Memory : Not Specified Graphics Card : Not Specified
    Cooling : Not Specified Power Supply : Not Specified

  8. 3 کاربر بابت این ارسال مفید از a.aryaiee تشکر کرده اند:

    asdaf (23rd October 2016),mohammad72 (23rd October 2016),Olesius (23rd October 2016)



  9. #5
    Active Member
    asdaf آواتار ها
    تاریخ عضویت
    Oct 2013
    محل سکونت
    qom
    نام واقعی
    Mohammad.Ali
    نوشته ها
    201
    تشکر شده 1,529 بار در 206 پست
    asdaf آنلاین نیست.
    برای کسانی که به نظرشون این تاپیک خیلی نا مفهوم است . پیشنهاد میکنم قبل از اینجا این تاپیک را نیز مطالعه کنند
    [Only registered and activated users can see links. ]
    برای درک بهتر
    مشابه VLIW داده تولید میکند و هر بخشی داده مخصوص خودش را دارد
    اما دستور العمل های پردازش CPU در یک بخش پردازشی ثابت نمی مانند بلکه به صورت ضربدری و مورب جابه جا میشوند ..
    هربار که بخشی از خط لوله را میرود در واقع بخشی از دستورالعمل پردازش شده است و مانند یک کلاک میماند
    کلاک خط لوله clock cycle با کلاک دستورالعمل کاملا متفاوت هستند بر خلاف گرافیک ها که به خاطر موازات یکی هستند

    توضیحات اضافه هم بدم که ترتیب برنامه نویسی همیشه مهم است و ضرورت کلی است
    اما در مسئله خط لوله حساسیت بیشتری وجود دارد . و باید زمان خیلی زودتری تعاریف را انجام بدهند .
    دلیلش ام این بود که در غیر خط لوله تا نتیجه نهایی مشخص نشده دستور دیگری نمیاید و این مشکلات را ندارد .
    اما مشکلات جدید همش به خاطر بهره کشی بیشتر از سخت افزار پدید امده است. .
    مثال شرایط بحرانی خط لوله مانند این است که تا من نتیجه نهایی دستورالعملی را نبینم نمی تونم تصمیم گیری کنم
    اما اگه دستور من وارد خط لوله شود در صورتی که نتیجه نهایی ان دستورالعمل هنوز مراحل خط لوله را میگزراند
    و هنوز داخل ریجستری ثبت نشده باعث ایجاد حباب میشود
    و تاخیر به اندازه ای خواهد بود تا نتیجه ای که به ان نیاز دارم در ریجستری ثبت شود
    و تا پردازش بتواند ادامه کار خود را بکند .
    هرچقدر خط لوله طولانی تر باشد احتمال ایجاد حباب بیشتر میشود و عمق فاجعه و تاخیر نیز به میزان حداکثر طول خط لوله افزایش می یابد .
    خط لوله بزرگتر cock cycle کندتری به خاطر بیشتر بودن حجم تولید داده ها نیز دارد
    در پردازنده های CISC دستوراتی برای برنامه نویسی همانند load و store وجود دارند که پیغام میدهند
    که نتیجه این پردازش برای دستوات بعدی ذخیره شود و بعدا برای پردازش دیگری بار گذاری شود .

    در این معماری ها همیشه بعد از دیکود شدن دستورات از خودشان نشانه ای برای دستورات دیگری که در خط لوله هستند باقی می گزارند
    همون طور که گفتم تمام این مشکلات و راه حل ها فقط برای بهره گیری بیشتر و افزایش ضرفیت cpu ایجاد شده است.

    یک تصویر از خط لوله jaguar ببینید .

    [Only registered and activated users can see links. ]

    در بالا مقیاسی برای کلاک هست و برابر یک مرحله یا یک قسمت از خط لوله می باشد
    همون طور که گفتم هر قسمت یک پردازش یا جلو رفت از دستور العمل هست و یک کلاک به حساب میاید
    کل خط لوله هم زمان داده های مختلفی به روش ILP بیرون میدهند برابر یک clock cycle
    در بخش هایی از خط لوله پردازشی به قسمت های دیگری و خط لوله های دیگر اختصاصی ارجاء داده میشوند
    عملیات دیکود و پردازش از قسمت ها و مراحل زیادی تشکیل شده .

    [Only registered and activated users can see links. ]

    یک تصویر از پردازش دستور منطقی از معماری Amd 64 می بینیم
    Fetch از دو قسمت و مرحله و ارسال داده به دو قسمت مجزا تشکیل شده
    در بخش decode ابتدا داده برداشت و سپس در دو مرحله به زبان ماشین ترجمه میشود
    در مرحله pack دستوراتی که ادرس سخت افزاری یا همان op code یکسانی دارند در یک بسته قرار می گیرند
    یک دیکود دیگر نیز در پایان انجام میشود
    Dispatch به معنای اعزام و ارسال است و بعد از ان مرحله دسته بندی
    AGU و ALU مرحله اجرا دستورات است .
    AGU به مرحله برای دستورات Hazard یا Branch که احتیاج به عمل ذخیره یا دریافت ریجستری دارند گفته میشود
    در پایان مرحله ذخیره در کش است

    داده های floating point رو صریح بگم که اطلاعی ندارم
    همان قدر که خودتون در مطالب بیرون می توانید پیدا کنید
    و مربوط به عالم ریاضیات و و برنامه نویسی میشود و بیشتر وارد نمی شوم .

    اما بگویم که در بخش سخت افزاری ALU های 128 یا 256 بیتی وجود دارد
    به نام Multiply و ADD که تر کیب این دو یک محاسبه داده های شناور را انجام میدهد

    [Only registered and activated users can see links. ]

    طبق تصویر مرحله B مرحله ضرب و MUL و مرحله C بخش جمع و ADD می باشد

    [Only registered and activated users can see links. ]

    در این تصویر نمونه یک عملیات شناور را می بینید
    عدد باینری که قرار است در عدد شماره 1 ضرب شود
    مرحله 2 طبق عدد 1 میزان اولیه را تکثیر و MUL میکند
    و مرحله 3 جمع ADD انها است

    [Only registered and activated users can see links. ]

    داده شناور اگر در یک مرحله برای یک بخش 128 بیتی انجام نشد می تواند در دو مرحله انجام دهد تا 256 بیتی شود
    یا اگر دو بخش 128 بیتی داشت می تواند با ترکیب اینا یک 256 بیتی را انجام دهد


    *************************************************

    در معماری CISC های پیشرفته امروزی همون طور که در اخرین تصویر پست قبلی قرار دادم خط لوله های اختصاصی برای دستور العمل ها وجود دارد
    و اگر فرض کنیم هر بار که پردازشی میاید فقط یکی از خط لوله های اختصاصی را مشغول میکند و دیگر خط لوله ها بیکار باقی می مانند .
    برای افزایش ضرفیت بیشتر و بهره گیری بیشتر اینتل SMT را ایجاد کرد
    که همانند معماری superscalar هر خط لوله اختصاصی thread و نخ خودشان را داشته باشند
    مثلا اگر دیکود دستورالعملی برای بخش های منطقی integer فرستاد دیگر بکار نماند و دستور دیگری را برای Floating point بفرستد .
    هر خط لوله اختصاصی همانند چند پردازنده مستقل هستند که همگی شان decode و fetch مشترک دارند
    البته هم زمان از decode استفاده نمی شود بلکه نوبتی برای خط لوله ها استفاده میشود

    در اینجا amd تصمیم گرفت با مشارکت مهندسین گرافیک خودش با cpu فلک را سقف بشکافند و طرحی نو در اندازند

    [Only registered and activated users can see links. ]

    تصویر تبلیغاتی و فرقی که با هم دارند را مشاهده بفرمایید
    اینجا amd یک مسیر و فلسفه کاملا متفاوت از هدف اینتل از SMT را در پیش گرفت

    تصمیم گرفتند که دو هسته داخلی ماژولار قرار دهند که نخ هایی با بیشترین دسترسی منابع سخت افزاری برای چند نخی داشته باشد
    طبق ادعای amd به هسته هایی با نصف اندازه قبلی اما با 80 درصد قدرت قبلی رسیدند .
    که از طریق افزایش خط لوله و در نتیجه افزایش کلاک و ضریب خطای خط لوله بتوانند 20 درصد کمبود را جبران کنند
    و وقتی که ان دو بخش را کنار هم قرار دهند به پیروزی برسند و بیشترین قدرت در اندازه باشد

    اما چرا بولدوزر شکست خورد .
    طبق بررسی سایت ها سیستم عامل نمی توانسته تشخیص بدهد که دستور العمل متعلق به کدام هسته است و نتیجه را از کدام هسته بگیرد .
    سیستم cache هسته ها از نوع white through بود یعنی به صورتی ساخته شده بود تا داده بین هسته ها مشترک باشد
    اما سرعت پایین تری داشت .که تاثیر در سرعت تک هسته ای دارد
    به خاطر مشکل سیستم عامل در شناسایی هسته ها باعث شده بود که میزان اشتباه و گم شدن اطلاعات کش افزایش پیدا کنه .
    به همین خاطر میزان کش رو افزایش دادن.

    در SISD یا نخ یک اسکالر X و Y مشخص هستند
    در واقع در گرافیک ها این مشکل وجود ندارد چون در SIMT نخ ها همگی به صورت قفل شده هستند
    و وقتی یک مختصات ادرس دهی در میان نخ ها مشترک باشد از طریق مختص دیگر در میان کش می توان به اطلاعات رسید

    در بولدوزر یک بعد دیگر به اطلاعات نخ ها اضافه شده بود و ان هم ادرس کدام هسته از ماژول هست .
    در steamroller این مشکل با اضافه کردن یک decode مستقل و کد نویسی و ادرس دهی مستقل برای هر هسته تا حدود زیادی حل شد .
    در excavator هم کش به میزان زیادی کاهش پیدا کرده است

    اما دو مسئله هنوز باقی هستند
    اول که floating point و داده های شناور به خاطر اشتراکی بودن بازدهی پایینی دارد
    دوم. حتی اگه همه قسمت های هسته ها را مستقل کنند که کلا دلیل اولیه ماژولار بودن و صرفه جویی در اندازه سیلیکون زیر سئوال میرود.
    حالا بگوییم دوهسته واقعی داریم که هر نخ ان در واقع تمام یک هسته را می گیرد و چند نخی بالایی داشته باشیم .
    یک هسته قوی را می شود به دو قسمت نرم افزاری تقسیم کرد و هرموقع لازم بود کل هسته به یک نخ داده شود
    اما ایا میتوان قدرت دو هسته ضعیف را با هم جمع کرد ؟ در مواقعی که قدرت تک هسته ای بالایی لازم داریم؟

    یک تصویر که خود AMD اعلام کرده که 4 هسته jaguar برابر یک ماژول و دو هسته steamroller است

    [Only registered and activated users can see links. ]



    یک بار دیگه بر اسلاید های معماری zen خودتون نگاهی بیندازید
    اما اینبار با مطالب این تاپیک در تاریکی نور خواهید دید ....
    به بخش ها و اسامی اشنایی که می بینید بماند .

    [Only registered and activated users can see links. ]

    فقط نکاتی رو اشاره کنم
    Branch prediction با استفاده از نتایج دستور العمل های قبلی و ادرس دهی op code دستورات جدید
    نتیجه شاخه را پیش بینی میکند .

    Integer rename تکنیکی برای افزایش پاسخ دهی و کاهش تاخیر و نوعی موازات برای دستورالعمل هاست
    به صورتی که با تغییر نام ادرس ریجستر ها در کد نویسی دستورالعمل ها باعث میشود
    که مثلا دستوری که احتیاج به نتیجه ای دارد به جای اینکه بعد از اجرای کامل ان دستورالعمل اجرا شود
    با تغییر نام ان کمیت به ادرس نتیجه دستور العمل اصلی با هم یا بلافاصله در خط لوله بعد از ان اجرا شوند
    AGU برای ذخیره یا بارگزاری داده هایی است که لازم دارد
    اینبار Amd فلسفه SMT اینتل را درک کرده و برای هر بخش اختصاصی نخ تعیین کند. معماری Superscalar

    و یا با clock Gating می تواند قسمت هایی که برای پردازش لازم نیستند را کاهش مصرف دهد
    و برای افزایش کلاک بخش های مورد استفاده بهره ببرد


    Motherboard Processor
    Main Memory Graphics Card
    Cooling Power Supply

  10. 4 کاربر بابت این ارسال مفید از asdaf تشکر کرده اند:

    First.Last (31st October 2016),golabettruter (28th November 2016),Olesius (30th October 2016),TERRORIST (30th October 2016)



  11. #6
    Active Member
    asdaf آواتار ها
    تاریخ عضویت
    Oct 2013
    محل سکونت
    qom
    نام واقعی
    Mohammad.Ali
    نوشته ها
    201
    تشکر شده 1,529 بار در 206 پست
    asdaf آنلاین نیست.
    [Only registered and activated users can see links. ]

    بلاخره تصمیم به نوشتن اطلاعاتم از کتاب کلفت 500 صفحه ای معماری کامپیوتر نوشته موریس مانو ترجمه مجید نادری رو کردم
    البته خیلی از قسمت ها از قبل برام اشنا بود و خودم بهش رسیده بودم که خوندن مجدد اونها باید اشک رو در چشمانم می اورد
    خیلی از نکات عملیاتی و روش اصلی و چیزی که واقعا اتفاق می افتد رو نشون داده بود
    که پرداختن به جزئیات دقیق اجرایی خیلی زمان بره
    نسخه pdf کتاب موریس مانو البته با ترجمه دیگری رو اینجا می تونید بگیرید.
    [Only registered and activated users can see links. ]

    خواستم که بعضی اصلاحیه هایی رو انجام بدم و مطالب تکمیلی رو بگم


    Flip flop/latch

    چیزی که معمولا به نام ریجستر شناخته میشه در واقع بخش سخت افزاری ساده ای هست
    که از گیت هایی تشکیل شده برای دریافت یک بیت و یک بیت دیگر یا سیم دیگری برای پالس ساعت یا سیگنال
    و یک سیم یا ورودی برای ریست شدن یا به حالت اولیه برگشتن
    به این گیت ها فلیپ فلاپ یا لچ (flip-flop/latch) می گویند
    مدار های ترکیبی مدار هایی هست که در ان عملیات ها با زمان های متفاوت انجام می شود
    و برای هماهنگی زمانی بعضی قسمت ها از یک منبع تولید پالس ساعت و سیگنال برای همزمانی در کلاک ریجستر های ان استفاده می شود

    فلیپ فلاپ ها انواع مختلفی دارند . نوعی وجود دارد که مثلا یک بیت را که دریافت میکند اگر پالس را دریافت کند برعکس ان را بیرون میدهد
    مثلا اگر ورودی چیزی دریافت نکند و 0 باشد با دریافت پالس ساعت خروجی 1 را می دهد .
    نوعی دیگری مثلا اگر ورودی 1 دریافت کند هنگام پاس ساعت به صورت باینری به مقدار قبلی افزوده می شود
    که از ان برای ساخت کنتور یا شمارنده باینری استفاده میشود .
    نوعی به نام D یا Delay وجود دارد که با دریافت پالس دقیقا همام ورودی را خروجی میدهد
    که اگر تعدادی از انرا کنار هم قرار دهند و پالس ساعت مشترک داشته باشند به ان ریجستر یا حافظه میگویند
    که در ساخت حافظه و رم پرسرعت و موقتی استفاده میکنند

    [Only registered and activated users can see links. ]

    تصویر یک ریجستر چهار بیتی یا یک پالس ساعت و کلاک ساخته شده از فلیپ فلاپ
    که به صورت سریال و از طریق یک ورودی می تواند در چهار کلاک اطلاعات سری را ذخیره کند
    و به صورت موازی در یک کلاک چهار بیت را بیرون دهد

    سیستم اعداد و حروف

    برای اینکه اعداد ده دهی رو به باینری تبدیل کنند انها را تا باقی مانده کمتر از دو به دو تقسیم می کنند.

    برای اینکه بفهمند یک تعداد مشخصی از اعداد پشت سرهم چه تعداد حالت متفاوت عدد را تشکیل میدهند
    از این فرمول استفاده میکنند . R به توان N .
    R دایره یا شعاع اعداد است که مثلا ده دهی تعداد ده نماینده مختلف برای یکان می تواند باشد و دو دویی فقط دو نماینده برای یکان میتواند باشد .
    N تعداد عددی هست که پشت سرهم هستند مثلا 10 دو عدد پشت سرهم و 100 سه عدد پشت سرهم
    باینری به صورت دو رقمی فقط چهار حالت را میتواند نشان دهد
    باینری به صورت سه رقمی . دو به توان سه . فقط هشت حالت را میتواند نشان دهد

    برای اینکه هر عدد یا حالتی از دودویی بتواند نمایش دهنده ی عددی از ده دهی باشد
    باید رقم پشت سرهم به تعدادی داشته باشیم که بتواند 10 نوع رقم دهدهی را پوشش دهد .
    اما در دودویی تعداد دقیق تعین شده برای ده رقم نیست .
    سیستم اعداد هشتی و شانزدهی استفاده اصلی ان مربوط به علوم کامپیوتر میشود. که تعداد نماینده فیکس شده باینری هستند

    برای اینکه مثلا در یک ماشین حساب بتوانند اعداد ده دهی را پوشش دهند حداقل به سیستم شانزدهی نیاز دارند
    در باینری یکان یک برابر عدد یک و دهگان یک برابر دو و صدگان یک برابر عدد چهار و هزارگان برابر عدد هشت است

    هر چهار رقم باینری برای نمایش یک رقم ده دهی نیاز است و اگر مثلا عدد دو رقمی ده دهی را بخواهند نمایش دهد
    باید چهار تا چهار تا رقم جدا کنند تا مورد قبول کد گزاری باشد و غیر از ان در سیستم قبول نیست
    برای محاسبات بانری ده دهی به چهار برابر نمایش دهنده ده دهی مثلا در ماشین حساب ورودی یا سیم برای ALU نیاز است
    یک ALU با توان 32 بیتی بزرگترین عدد ده دهی صحیح و حقیقی که میتواند محاسبه کند 8 رقمی است!!

    از انجا که سیستم چهار رقمی باینری یا شانزدهی فقط ده حالت باینری ان مورد نیاز است و بقیه بی استفاده می مانند
    بقیه ان را میتوانند برای نمایش دیگر اعداد شانزدهی A B C D E F استفاده کنند یا اینکه برای نمایش کد گزاری دستوات مثلا برای دستور جمع یا ضرب یا تقسیم یا و... استفاده کنند
    یکی از سیستم اعداد ده دهی برای باینری BCD است

    [Only registered and activated users can see links. ]

    برای نمایش اعداد منفی اولین بیت سمت چیپ را به عنوان بیت علامت در نظر می گیرند
    که اگر صفر باشد عدد مثبت است و اگر یک باشد یعنی منفی
    اعداد اعشاری یک محاسبه دیگر برای مکان ممیز اعشاری نیز نیاز دارند و دو مرحله یا دو کلاک پردازشی نیاز می برند
    محاسبات عدد اعشاری کامل همانند عدد صحیح انجام می شود
    اما عدد ممیز شناور یعنی مکان نقطه اعشاری در بین است و نه کاملا اعشاری است و نه کامل صحیح
    مکان عدد اعشاری به صورت محاسبه عدد توان E از فرمول زیر محاسبه میشود

    [Only registered and activated users can see links. ]

    استاندارد حروف اسکی ASCII
    حتما تا حالا شنیده اید که هشت بیت یک بایت میشود
    Ascii استاندارد حروف انگلیسی و اعداد صفحه کلید است که به هفت بیت نیاز دارد
    یک بیت فضای خالی هم برای بیت علامت در نظر گرفته شده است

    [Only registered and activated users can see links. ]

    احتمالا اگر با برنامه نویسی C اشنا باشد حتما شنیده اید که با توجه به نوع اطلاعات ورودی ضرفیت خاصی برای ریجستر
    یا پشتیبانی از ان وجود دارد
    Char برای حروف و int برای اعداد صحیح .float اعداد ممیز شناور

    [Only registered and activated users can see links. ]

    روش محاسبه تفریق و ضرب اعداد

    به صورت عادی برای تفریق اعداد اگر مثلا عددی که از یکان میخواهم کم کنیم از ان بزرگتر باشد
    از دهگان یک عدد کم میکنیم اما در کامپیوتر انجام این عمل کمی مشکل است و میزان سخت افزار را افزایش میدهد
    برای حل این مشکل از نظریه اعداد کمک گرفته اند که عددی را به صورت مکمل تبدیل میکنند
    و اگر عددی را که می خواهند کم کنند را با ان جمع کنند تبدیل به عددی میشود که اگر بزرگترین بیت انرا حذف کنند
    تبدیل به حاصل تفریق انها خواهد شد .
    فقط سطحی بگم که در کامپیوتر تفریق نیز همانند جمع است

    روش ضرب کردن اعداد بزرگ همانند روش ضرب بر روی کاغذ است
    که هر بار عدد رقم بعدی در انتها به ستون بعدی یک رقم به سمت چپ شیف داده میشود
    و در اخر نتیجه تمام ستون ها همانند ضرب بر روی کاغذ جمع می گردد

    به انتقال تمام اطلاعات باینری به یک رقم کناری شیفت SHIFT می گویند
    عمل شیفت توسط مداری درون ریجستر انجام می شود

    مدار شیف برای یک ریجستری چهار بیتی

    [Only registered and activated users can see links. ]

    همچنین انجام مکمل نمودن اعداد و یا منفی و مثبت کردن و اعمال ریاضی ساده توسط مدارهای خود ریجستر انجام میشود
    و فقط اطلاعات اماده و اصلی توسط ALU انجام می شود

    Multiplexer مولتیپلکسر

    قطعه ساخته شده از گیت ها که به منظور انتخواب ورودی به یک خروجی مشترک استفاده میشود
    در مدل دو به چهار که با حالت های باینری دو رقمی میتوان یکی از چهار ورودی را به یک خروجی و برعکس ان متصل کرد
    یکی از روش های معمول برای ایجاد BUS یا گذرگاه مشترک برای صرفه جویی در سیم کشی استافده از مالتیپلکسر است
    در این تصویر با استفاده از چهار ماتلیپلکسر، چهار ریجستری چهار بیتی را به یک باس چهار بیتی متصل کرده اند

    [Only registered and activated users can see links. ]

    حالت های دسترسی به داده سه نوع است
    Immediate mode
    یعنی حالت سریع و همان عددی که در دستور قرار دارد را پردازش میکند و مناسب داده های کوچکتر از پهنای بیت است
    Direct mode
    عددی که در دستور قرار دارد در واقع یک ادرس از ریجستری برای اطلاعات اصلی برای پردازش است
    Indirect mode
    به نظرم برای صرفه جویی در پهنای بیت دستور و استفاده از ضرفیت بیشتر حافظه، حالت غیر مستقیم وجود دارد
    که اشاره به بخشی از حافظه که ان هم اشاره به قسمت دیگری از حافظه برای دستور اصلی دارد

    [Only registered and activated users can see links. ]

    استاندارد IEEE
    که در ALU های گرافیک ها برای ممیز شناور شهرت دارد
    برای پشتیبانی از انواع مختلف حروف و اعداد که حالت های باینری متفاوتی دارند
    دو بخش دستور و اطلاعات جدا شده اند به بخش اطلاعات Mantisa و به بخش دستور Exponent می گویند
    این شیوه عمومی و غیر اختصاصی استفاده از ضرفیت ریجستر و ALU باعث می شود که بخشی از حالت های باینری بدون استفاده باقی بمانند و نمایش دهنده حرف یا عدد یا دستوری نباشد
    در این نوع استاندارد اولین بیت سمت چپ نمایش دهنده حالت دسترسی مستقیم یا غیر مستقیم اطلاعات است

    [Only registered and activated users can see links. ]

    خط لوله

    از انجایی که تعریف خط لوله در جاهای زیادی با اشکال مختلف استفاده میشود خیلی نیاز به توضیح می رفت
    دقیقا طبق کتاب موریس مانو . تبدیل یک عملیات به چندین مرحله کوچک به صورتی که در هر مرحله بخشی از ان انجام شود
    را خط لوله میگویند .
    نیاز اصلی مراحل یا روش تشخیص ان وجود ریجستری خیلی ساده در بین مراحل است که به ان latch می گویند
    پردازنده غیر خط لوله بین مراحل latch ندارد و مستقیم همه ورودی و خروجی قسمت ها به هم متصل اند
    برای داشتن کمترین تاخیر این ریجستری باید مستقیم ترین و سریع ترین حالت عملکرد را داشته باشد

    برای داشتن زمان کلاک یکسان بین مراحل latch/flip flop ها را به یک منبع تولید پالس ساعت متصل کرده اند
    زمان انجام محاسبات خط لوله توسط کند ترین مرحله ان تعیین میشود

    [Only registered and activated users can see links. ]

    این تصویر که قرار داده بودم در واقع یک خط لوله به حساب میاد



    به علت اینکه پردازش به صورت سریال باعث ایجاد تاخیر به خاطر پیمودن مدار های ان می شود
    از SIMD و روش ILP برای کاهش تاخیر به کمترین میزان با ارائه همزمان دستورات استفاده می برند
    پس در واقع SIMD ربط مستقیم به خط لوله ندارد
    به خاطر استفاده شدن تمام بخش SIMD و ALU ان توسط مراحل ، کمترین تاخیر زمانی خواهد بود که نوع داده های مراحل و ALU ان یکسان باشد.
    مثل خط لوله های اختصاصی .
    اما مراحل پردازش یک دستور العمل ان است که از ابتدا شروع میشود
    و ممکن است فقط بخشی از یک خط لوله اختصاصی را برود و به خط لوله های دیگری انتقال پیدا کند تا پایان

    AGU نوعی از ALU است که قابلیت دسترسی مستقیم و قوی به ریجستر دارد و به خاطر دستور خواندن یا نوشتن
    یک کلاک بیشتر از یک ALU تکی زمان میبرد اما هنوز هم از خط لوله های جانبی ان سریع تر است

    RISC و CISC

    طبق این کتاب جمعی از دانشمندان پیشنهاد کردند که فقط 20 درصد ریز عملیات خط لوله ها که باعث تاخیر میشود ضروری هستند
    و بقیه را میتواند از ترکیب ان 20 درصد دستور اصلی به ان رسید

    یک مقیاس خاصی از ریز عملیات ها برای پردازنده در نظر گرفته شده است که کمتر از ان یعنی RISC و بیشتر از ان تبدیل به CISC می شود
    پردازنده های RISC خارج از AGU دسترسی به ریجستری ندارند
    فشار و تاکید اصلی بر روی کامپایلر و تبدیل کردن کد های برنامه نویسی و توجه برنامه نویس به معماری پردازنده است
    پردازنده ای که بیشترین بهینگی اما کمترین انعطاف نرم افزاری و تاکید زیاد روی کامپایلر دارد
    کامپایلر باید تمام دستورات را از ترکیب ان 20 درصد ریز عملیات اصلی به دست بیاورد

    در CISC تاکید اصلی ان است که برای هر نیاز برنامه نویسی یک دستور ماشین و ریز عملیات وجود داشته باشد
    به صورتی که کامپایلر کمترین اهمیت و فشار را دارد و هردستور برنامه نویس مستقیما به ریز عمیلات ماشین تبدیل میشود
    ویرایش توسط asdaf : 17th January 2017 در ساعت 11:13 AM
    Olesius, ErfanDL, magiteq and 1 others like this.


    Motherboard Processor
    Main Memory Graphics Card
    Cooling Power Supply

  12. 8 کاربر بابت این ارسال مفید از asdaf تشکر کرده اند:

    amirsss (17th January 2017),ErfanDL (16th January 2017),golabettruter (17th January 2017),magiteq (16th January 2017),mahdi8063 (17th January 2017),mmb2014 (17th January 2017),Olesius (17th January 2017),TERRORIST (17th January 2017)



کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •