اطلاعیه

Collapse
No announcement yet.

چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

    میخواستم تو این پست و چند پست بعدی در مورد چند ریسمانی، چند وظیفه ای، انواع آن و Simultaneous Multi-Threading=SMT یا همون Hyper-Thread شرکت Intel صحبتهایی بکنم. بلکه به درد بندگان خدایی بخورد.
    احتمالا تو میکرو-(پروسسور،کنترولر)-ها به دردتون میخوره.
    اگه تمایل داشتین، نظر بدین و یا حتی تو بحث ها شرکت کنین.
    ممنون.
    اگر آن کس که باید باشد، نیستی ؟
    پس چه فرقی می کند که کیستی ؟

    #2
    پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

    خیلی عالیه :wow:
    There is nothing so practical as a good theory. — Kurt Lewin, 1951

    دیدگاه


      #3
      پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

      خیلی خوبه ، ما منتظریم :agree: :applause:
      حضرت علی (ع) : خداوند از جاهلان پیمان فراگیرى علم نگرفته ، مگر آنکه قبلا از دنشمندان پیمان تعلیم دادن گرفته است .

      دیدگاه


        #4
        پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

        خوب ادامه میدیم، خلاصه و ساده (البته خلاصه برداشت نکنین، چون جای کار زیاد داره و ارزش فکر کردن هم) :

        همزمان با ارائه Win95، چند ریسمانی و چند وظیفگی رنگ و روی دیگری گرفت.
        البته همون موقع در سیستمهای سخت افزاری نیز پیاده می شد. مثلا پیاده سازی Multi-Threding درون ریز ساختار CPU ها.
        ---------------------------------------------------------------------------------------------------------------------------------------------------
        تفاوت Multi-Threading و Multi-Tasking در Windows :
        - برنامه های مختلفی در حال اجرای همزمان هستند همانند MSWord، WinAmp، ...
        = (Multi-Tasking)
        - هر برنامه احتمالا کارهای مختلفی را به طور همزمان انجام میدهد. مثلا MSWord همزمان با Type کاربر در حال غلط گیری آن و احتمالا کارهای دیگری نیز هست. (Multi-Threading)

        البته در CPU ها که مورد بحث ما نیز هست، Multi-Threadingآ‌، و اون هم عمدتا به صورتی مختصر تر از توصیف بالاست. (Instruction Level Parallelism = ILP) یعنی ... همین که تو () نوشتم. پایین واضحتر میشه.

        مقایسه ساختارهای چند ریسمانی:

        برای تحقق چند ریسمانی ساختارهای زیر پیشنهاد شده است :

        - Fine-Grain=FG
        - Coarse-Grain=CG
        - Chip Multiprocessing=CMP

        FG or Time-Slicing :
        در این ساختار در هر سیکل ماشین تنها دستورات مربوط به یک ریسمان مشخص اجرا می گردد. ترتیب انتخاب ریسمان ها در این روش به صورت چرخشی (Round-Robin) می باشد.
        خیلی ساده :
        (استفاده از اسمش :: Time-Slicing)
        فرض کنید 4 تا Subroutine تو Asm نوشتیم.
        تو این شیوه، یک دستور از Routine اول، بعدی از دوم، ... تا چهارم را اجرا میکنیم و مجددا از ابتدا به صورت چرخشی (RR). خوب معلومه که Compiler و یا برنامه نویس باید Resource-Sharing-Problem-AWARE باشه.(از فارسیش بهتر بود) مثلا Register ها یا SRAM از Thread غریبه دستکاری نشند !! به عبارتی Local باشند.(شبیه همین مشکل تو Win95 بود، که یک برنامه خرابکار میتونست راحت OS رو از کار بندازه) و خیلی مشکلات دیگه مثلا پیاده سازی دستورات Branch و... .
        ولی در کل، در خیلی حالات، با کمی دقت، تو میکروهای دم دستی خودمون مثل AVR قابل پیاده سازیه و کاربردی.

        CG :
        در این ساختار یک ریسمان خاص در حال اجرا می باشد. در صورت دریافت یک درخواست از ریسمانی با اولویت بالا تر اجرای دستور العمل ها به ریسمان با اولویت بالا تر سوییچ می شود.
        یه کمی فکر کنیم، فکرای خوبی دربارش به سرمون میزنه.

        CMP :
        در این ساختار برای هر ریسمان یک پردازنده اختصاصی و جداگانه وجود دارد. بنابراین در هر سیکل ماشین دستوراتی از ریسمان های مختلف قابل اجرا می باشد. در نتیجه سرعت اجرای دستورالعمل ها افزایش می یابد.


        * دقت کنین که استفاده از PipeLine با Multi-Threadingآ‌ کاملا فرق میکنه. (شاید بدیهی باشه.)

        تو پست بعدی از SMT میگیم.

        =;


        اگر آن کس که باید باشد، نیستی ؟
        پس چه فرقی می کند که کیستی ؟

        دیدگاه


          #5
          پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

          CG :
          در این ساختار یک ریسمان خاص در حال اجرا می باشد. در صورت دریافت یک درخواست از ریسمانی با اولویت بالا تر اجرای دستور العمل ها به ریسمان با اولویت بالا تر سوییچ می شود.
          یه کمی فکر کنیم، فکرای خوبی دربارش به سرمون میزنه.
          این مشابه همون interrupt ها ( چه نرم افزاری ، سخت افزاری ) هستن .

          مثلا توAVR 32 تا رجیسترداریم که خیلی از کمپایلر ها از یه مقدار خواصی از اونها استفاده میکنن و بقیه رو بیکار میزارن ! خوب خیلی راحت میشه از این فضای موجود استفاده کرد .

          یا اینکه میشه یه پروسه ای رو در هر زمانی متوقف کرد و محتویات stack و رجیتسر هارو در ramآ‌ ذخیره کرد و به انجام عملیات جدید پرداخت و هنگام تموم شدن پروسه دوباره اون مقادیر ذخیره شده در ram رو به cpu اورد و ...

          درضمن دیدن این دو نتیجه که در سرچ پیدا کردم هم خالی از لطف نیست .

          http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2005/acl34/kaos/index.html
          http://www.avrfreaks.net/index.php?module=Freaks%20Files&func=viewFile& amp;id=843&showinfo=1

          البطه اینا نظر شخصی من بود ، و اصلا هم درباره اینکه میشه همچین چیزی رو پیاده کرد یا نه چیزی نمیدونم . بحث شما هم جنرال هست . ادامه بدید لطفا.
          فتو بلاگ من
          کاردستی ها :
          روبات شطرنج باز ( یادگار دوران جوانی )
          فارسی نویسی مستقیم در نمایشگر های گرافیکی
          کتابچه خود آموز زبان توصیف سخت افزار Verilog

          دیدگاه


            #6
            پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

            وقفه ها مگر غیر ازاین هم میشه نام دیگری براش ساخت.
            بعدا یه جمله قشنگ مینویسم

            دیدگاه


              #7
              پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

              مرسی

              دقت کنین اینا ساده ترین پیاده سازی ها هستند.
              در واقع وقتی بحث Resource-Sharing پیش میاد، با ایجاد یک Request از طریق یک پروسه با اولویت بالاتر،
              مقدار بیشتری از منابع سخت افزاری به آن اختصاص میابد.

              برای روشن شدن موضوع کمی در مورد PipeLine و SuperPipeLining صحبت میکنیم ::

              Pipeline های 3 طبقه مثل AVR,ARM7,... که شامل Fetch,Decode,Execute هستند زیاد با این موضوع سرو کار ندارند.
              ولی 5 مرحله ای ها و بالاتر که WriteBack هم دارند، معمولا Inst.Queue,... نیز در ورودی دارند
              و همچنین سخت افزاری برای تصمیم گیری و اولویت بندی، در ورودی ALU.
              کار این طبقه آخر تقسیم منابع است. زیرا که مثلا به جای یک ALU چندین ALU و یا چندین Adder,LU,Multiplier,... دارند
              که به طور موازی پیکره بندی شده اند.
              اینجاست که می بینیم در یک پروسه Single Thread ، از ضعف در ILP رنج می بریم.
              مفهوم CG تو این حالت یک کم بیشتر Parallelism رو میرسونه.


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

              خوب. بحث اصلی ::

              SMT چیه ؟

              Simultaneous Multithreading یا SMT ساختاری است که هدف آن افزایش کارآیی پردازنده ها به وسیله بهبود توانایی های آنها
              در استفاده از کارایی سخت افزار موجود می باشد.

              ---------------------------------------------------------------------------------------------------------------------------------------------------------
              برای تحقق این هدف پردازنده SMT سعی بر ترکیب ایده هایی از دو تکنولوژی زیر دارد:

              - قابلیت انتشار دستور العمل ها به صورت موازی (Multiple Issue) یا ILP
              - قابلیت اجرای همزمان دستورالعمل ها از چندین ریسمان مختلف (Multithreading)

              ---------------------------------------------------------------------------------------------------------------------------------------------------------

              انواع ساختار های موجود در طراحی هسته پردازنده :

              -Sueprscalar
              -VLIW

              اینجاهاشو خوب دقت کنین

              پردازنده Scalar :
              - دستورالعملها به نوبت Fetch و Decode می شوند
              - چندین دستورالعمل به طور همزمان اجرا می شوند
              - اجرای آنها ممکن است خارج از نوبت کامل شود

              پردازنده Superscalar :
              چندین دستورالعمل به طور همزمان Fetch و Decode می شوند
              و به چندین واحد کاربردی (Functional Unit) صادر می شوند

              * Superscalar ها به صورت پویا از واحد های سخت افزاری برای پیدا کردن دستور العمل های نابسته استفاده می کنند.
              * VLIW ها دستور العمل های نابسته را به کمک کامپایلر شناسایی می کنند

              ---------------------------------------------------------------------------------------------------------------------------------------------------------

              با این تفاسیر :آ‌
              پردازنده SMT از یک سوپراسکالر تشکیل گردیده است که توانایی واکشی نامنظم دستورالعملآ‌ها از ریسمانآ‌های مختلف را
              خصوصا به صورت پویا دارا میآ‌باشد.

              ---------------------------------------------------------------------------------------------------------------------------------------------------------

              پردازنده SMT با استفاده از الگوریتمآ‌های خاص کمترین تغییرات را نسبت به پردازندهآ‌های سوپر اسکالر دارد.
              در واقع طراحان میآ‌توانند بر روی طراحی یک پردازنده سوپراسکالر متمرکز شده که دارای زمانآ‌بندی پویا (Dynamic Scheduling) میآ‌باشد و سپس تواناییآ‌های مربوط به چند ریسمانی را به آن اضافه میآ‌نمایند.


              ---------------------------------------------------------------------------------------------------------------------------------------------------------

              Intel اولین نمونه های تجاری این تکنولوژی رو ارائه داد و اسمش رو هم عوض کرد.
              اینم بگم که SMT اولین بار سال 95-96 عرضه شد.

              ---------------------------------------------------------------------------------------------------------------------------------------------------------

              مشخصات تکنولوژی HyperThread=HT در پردازنده های P4 شرکت Intel

              - انجام دستورالعملآ‌ها در یک محیط با چند برنامه و یا برنامهآ‌هایی که به چندین ریسمان تقسیم میآ‌شوند.

              - CPU حالتآ‌های ساختاری را برای دو ریسمان حقیقی نگه میآ‌دارد. ( PC و ... )

              - این فنآ‌آوری برای اولین بار در پردازنده تجاری Xeon ساخت شرکت Intel ارائه شد. این پردازنده نسبت به پردازندهآ‌های قبلی تنها 5٪ اضافه سطح داشت.


              ---------------------------------------------------------------------------------------------------------------------------------------
              چقدر زیاد شد. میخواستم تیکه تیکش کنم، نشد.
              ================================================== ==================

              بحث های آینده که برای روشن تر شدن موضوع میشه گفتآ‌: (که به FeedBack شما بستگی داره)

              OoO = Out of Order Execution
              Dynamic Scheduling
              Fetch, Decode,...Units


              نظرات خیلی کمه.
              خوبه ؟ بده؟ درسته یا نهآ‌؟
              لطفا بیشتر همکاری کنین. بازم ممنون.
              اگر آن کس که باید باشد، نیستی ؟
              پس چه فرقی می کند که کیستی ؟

              دیدگاه


                #8
                پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

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

                دیدگاه


                  #9
                  پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

                  نه، اصلاً به OS کاری ندارهآ‌!!
                  مثالهایی هم که از Win95 زدم برای آشنایی بود.
                  ظاهراً یا با دقت نخوندین یا من خوب توضیح ندادم که متوجه نشدین.
                  من که گفتم خلاصه و مفید مطرح میکنم.
                  اینا در حد معرفی بود.
                  بسطش که بدیم، قابل فهم تر و کاربردی تر میشه.

                  به زودی این کار رو میکنم.
                  اگر آن کس که باید باشد، نیستی ؟
                  پس چه فرقی می کند که کیستی ؟

                  دیدگاه


                    #10
                    پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

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

                    دیدگاه


                      #11
                      پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

                      همه چیو با هم قاطی کردین. C,OS, ...
                      خوب برگردیم رو بحث اول
                      پایین مطلب رو حتما بخونین که به AVRآ‌ ربط داره.

                      قبلش یه چند تا موضوع رو روشن کنیم.

                      AVRآ‌ و خیلی چیپ های مشابه فقط یک ALU دارند.
                      این به این معنیه که تنها یک Execution/Cycle.

                      Pipeline سادهآ‌ :
                      [][][][][][][][]
                      [][][][][][][][][][][][][][][][]
                      [][][][][][][][][][][][][][][][][][][][][][][][]
                      []آ‌ دستور اول
                      [] دستور دوم

                      خوب اینکه معلومه.

                      اما اون چیزی که اصرار دارین نمیشه.
                      یک CPU که چند تا ALU داره وضعش چه جوریه ؟؟

                      بعد از Fetch کردن دستور العمل،آ‌ باید به کدوم ALU دستور العمل فرستاده بشه ؟
                      یه واحد تصمیم گیری سخت افزاری این کار رو میکنه. جالبه که تو این Processor ها چندین دستور العمل همزمان
                      را به صورت خارج از نوبت (Out Of Order = OoO) رو داریم.
                      یعنی به ترتیب به ALU آ‌فرستاده میشن ولی خارج از نوبت اجرا میشن.
                      مثلا اجرای یک دستور پایین تر ممکنه زودتر تموم شه.
                      مثلا :
                      MUL R1,R2
                      LD R3,R4
                      ...

                      خوب احتمالا نتایج R3 زود تر از R1 فراهم میشه.





                      همزمانی،آ‌ بعضاً یک نیاز تلقی میشه، هر چند با معایب خاص خودش. از جمله فدا کردن سرعت و ... .

                      تو AVR میتونیم از FG, CG استفاده کنیم که در واقع شبیه ساز همزمانی و MultiThreading در پردازنده های تک ALU هست.

                      مثال برای حالت FG:

                      سه پروسه نمونه :

                      [:left]Proc1
                      add r16,r17
                      add r18,r19
                      ret

                      Proc2:
                      st z,r2
                      st z+,r3
                      ret

                      Proc3:
                      ld z,r12
                      ld z+,r13
                      ret

                      [/left]

                      عمدا این سه تا Process رو نابسته انتخاب کردم تا نیاز به Save کردن SREG, ... نباشه.

                      حالا با FGآ‌ چرخشی یا همون Round Robin داریم :


                      Round 1:
                      add r16,r17
                      st z,r2
                      ld z,r12

                      Round 2:
                      add r18,r19
                      st z+,r3
                      ld z+,r13

                      ...


                      اگه پروسه ها بلند مدت باشه با دستورات زیاد تر، به نظر نمیاد که ایندو تقریباً همزمان به پایان رسیدند ؟؟




                      راستی سرعت یه چیزیه و چند ریسمانی یه چیز دیگه !!
                      هر کدوم اهداف خودشونو دارند.

                      حالا اگه باز شما میخواین حرف خودتونو بزنین.
                      [hr]

                      اگه این سیستم رو به صورت پویا در RunTime پیاده کنیم (یا Static در زمان Compile) در واقع
                      به یک سیستم عامل، قابلیت چند ریسمانی رو اضافه کردیم.

                      در مورد CG نیز میشه همین رو پیاده کرد البته با یک پیاده سازی ساختار اولویت بندی که RoundRobin رو از بین میبره
                      مثلا به صورت 3 دستور از اولی، 1 دستور از دومی، 2 دستور از سومی چه با Interrupt چه با چیز دیگه ای.

                      تو پست های بعدی بیشتر میگیم.

                      خواهشاً چیزی اگه اشتباهه بیگن.
                      نظر هم حتماً بدین.

                      اگر آن کس که باید باشد، نیستی ؟
                      پس چه فرقی می کند که کیستی ؟

                      دیدگاه


                        #12
                        پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

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

                        دیدگاه


                          #13
                          پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

                          درباره پردازش های موازی ، و چند پردازشگر هم توضیح بدهید .

                          مثلا برای دستیابی به سرعت بالاتر چطور میتونیم از چند پردازشگر استفاده کنیم ؟! multi threading نمیخواهیم ، فقط دستیابی به سرعت بالاتر . لطفا یه توضیح کوچیکی بدید .
                          فتو بلاگ من
                          کاردستی ها :
                          روبات شطرنج باز ( یادگار دوران جوانی )
                          فارسی نویسی مستقیم در نمایشگر های گرافیکی
                          کتابچه خود آموز زبان توصیف سخت افزار Verilog

                          دیدگاه


                            #14
                            پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

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

                            دیدگاه


                              #15
                              پاسخ : چند ریسمانی و چند وظیفه ای و SMT در پردازنده ها

                              اقا چی شد ؟!

                              فتو بلاگ من
                              کاردستی ها :
                              روبات شطرنج باز ( یادگار دوران جوانی )
                              فارسی نویسی مستقیم در نمایشگر های گرافیکی
                              کتابچه خود آموز زبان توصیف سخت افزار Verilog

                              دیدگاه

                              لطفا صبر کنید...
                              X