معماری پردازنده

شروع موضوع توسط SajjadKhati ‏8 می 2018 در انجمن سخت افزار

  1. SajjadKhati

    SajjadKhati کاربر فعال <A href="http://forum.majidonline.com/f

    ارسال‌ها:
    1,028
    تشکر شده:
    350
    امتیاز دستاورد:
    83
    سلام
    استاد علی ، در ادامه ی بحثی که اینجا میکردیم :

    گفتگو هایی در باب سی شارپ

    ببینید قبلا گفتید که پردازنده هر موقع تشخیص داد (معمولا موقعی که نخ رو متوقف کنیم یا به هر نحوی پردازنده حس کنه که نخ داره معطلش میکنه بیخودی و ...) ، یه نخ را رها میکنه ، نخ دیگه ای رو اجرا میکنه و بعد میاد ادامه ی نخ قبلی را اجرا میکنه (برداشت کلی رو گفتم)
    خوب . حالا منظورتون اینه که این سوئیچ کردن بین نخ ها ، زمان درخواست پردازنده برای خوندن و نوشتن اطلاعات از رم ، اتفاق نمیافته . مثا زمانی که پردازنده درخواست خوندن اطلاعات متغییر x را از حافظه میده ، به طبع چون سرعت رم خیلی پایینه ، پردازنده باید منتظر بمونه . در این لحظه ای که منتظر خوندن (یا نوشتن) اطلاعات در رم هست ، دیگه نمیره نخ دیگه ای (از یه پروسه ی دیگه یا از همون پروسه) را اجرا کنه . منتظر میمونه تا اطلاعات از رم برسه و ادامه ی نخ را اجرا کنه . منظورتون اینه . درسته؟
    اما زمانی سوئیچ بین نخ ها انجام میشه که غیر از زمان انتظار برای خوندن و نوشتن اطلاعات از رم باشه . مثلا وقتی خودمون نخ را متوقف کنیم . درسته؟
    حالا فرض میکنم اینها درست باشن ؛ حالا زمان منتظر موندن پردازنده برای دریافت اطلاعات متغییر x (هر میلی یا میکروثانیه که هست ، باشه) ولی ما فرض میکنیم این زمان انتظار ، فرضا 10 ثانیه هست . توی این 10 ثانیه انتظار ، در task manager اینو نشون میده که اون نخ ، در حال اشغال یک هسته از پردازنده هست؟ مثلا اگه پردازنده 4 هسته ای باشه ، توی task manager اون نخ رو نشون میده که 25 درصد از پردازنده را اشغال کرد؟
     
    نوشته شده توسط SajjadKhati در ‏8 می 2018
  2. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,571
    تشکر شده:
    10,564
    امتیاز دستاورد:
    113

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


    در نظر بگیرید که توقف نخ دلایل و اشکال متفاوتی داره، و از طرف دیگه توقف دقیقا در هر لحظه که اراده کنین که اتفاق نمی افته. کد ها بصورت اتمیک اجرا میشه، مثل اتمیک بودن تراکنش بانکی. وقتی پول از حسابی به حساب دیگه منتقل میشه باید از حساب مبدا پولی کسر بشه و به حساب مقصد پولی اضافه بشه. وسط این دو تا مرحله توقف اتفاق نمی افته چون به اصطلاح این تراکنش بانکی اتمیک ئه. یعنی یا باید کامل انجام بشه یا اصلا نشه، وسط مراحل نمیتونه نیمه کاره قطع بشه. شما هم نمی توانید اجرا کد رو وسط یک انتظار نگه دارید. اون کد باید تا پایان انتظار و خاتمه کد ادامه پیدا کنه تا پشت سرش کدی اجرا بشه که فرضا نیت توقف اجرا رو داشته باشه.
    شرایطی که توصیف می کنید یک پردازنده است که 4 هسته داره، ولی نه معماری و تکنولوژی هاش مشخصه و نه روال کد های داخل اون یک نخ و نه تعداد و روال کد سایر نخ های در صف اجرا مشخصه. اینکه هسته پردازنده مشغول اجرای یک کد مرتبط با حافظه RAM باشه که فرضا 10 ثانیه طول می کشه مشکلی نیست، فرض ئه، مشکلی با 10 ثانیه اش ندارم، اما پردازنده ای که تصور کردید نمیتونه کد دیگری رو که کاری با حافظه RAM نداره اجرا کنه؟ اگه بتونه اجرا کنه که ممکنه حداقل 12.5 درصد اشغالی باشه. اگه قابلیتشو نداره حداقل 25 درصد ئه. شما نمی توانید برای محیطی با شرایط نامعین یک نتیجه مشخص تعیین کنید.
     
    نوشته شده توسط the_king در ‏8 می 2018
    SajjadKhati از این پست تشکر کرده است.
  3. SajjadKhati

    SajjadKhati کاربر فعال <A href="http://forum.majidonline.com/f

    ارسال‌ها:
    1,028
    تشکر شده:
    350
    امتیاز دستاورد:
    83
    ممنونم از توضیحات مفصل تون استاد علی :rose:
    منظورتون از هسته های مجازی ، همون نخ فیزیکی برای هر هسته هست دیگه؟ یعنی مثلا یه پردازنده ای که 2 هسته و 4 نخ فیزیکی داره (برای هر هسته ، دو نخ فیزیکی) مثل i3 4150 و ...
    حالا اگه هسته ای ، قابلیت تقسیم شدن به هسته ی مجازی (نخ فیزیکی) را داشته باشه (یعنی ، یک هسته ، چند نخی باشه) ، چه فرقی داره؟ قبلا گفتید فرقی نداره با پردازنده ی معمولی (پردازنده هایی که به ازای هر هسته ، یک نخ دارن) جز اینکه سرعت سوئیچ کردن نخ ها (نخ های پروسه ها) در پردازنده های چند نخی ، سریع تره



    منظورتون از گذرگاه داده ای ، همون تعداد کانال های رم هست که پردازنده باهاش در تماس هه؟ مثلا اغلب مادربردها و پردازنده و رم های سوکت های معمولی امروزی ، دو کاناله (dual channel) هستن ، منظورتون اینه؟
    اگه آره ، یعنی همزمان ، پردازنده ، فقط دو دستور را میتونه بخونه یا بنویسه؟ چون کم پیش میاد که کدی یا تابعی ، نخواد از رم اطلاعاتی بخونه یا بنویسه . وهمچنین بخاطر اینکه برای سوکت های معمولی ، دو کانال بیشتر وجود ندارن . پس ، یه پردازنده ی 4 هسته ای که 4 نخِ همزمان را میتونه اجرا کنه ، چی؟ چون نمیتونه همزمان 4 مقدار را از رم بخونه یا بنویسه در یک سوکت دو کاناله (البته این سئوالات در صورتی هه که جواب پاراگراف بالا ، درست باشه)


    آها ممنون

    عجیبه !
    اصلا پردازنده از کجا میدونه که کدوم کد نتیجه اش به کدوم کدِ دیگه ربط داره یا نه؟ اونم قبل از اجرا
    هر چند فکر کنم کم پیش بیاد (اگه این قضیه ، توضیح زیادی لازم داره ، لازم نیست توضیح بدین استاد علی)


    آها ممنون


    این تیکه ای که قرمز کردم ، به این معنی هه که فقط بعضی از پردازنده ها این قابلیت را دارن که کدهایی که با حافظه ی رم در ارتباط نیستن را اجرا کنه؟ و بعضی هاز پردازنده های دیگه ، این قابلیت را ندارن؟
    بعد اینکه محاسبه تون چجوری هه؟ پردازنده ، نمیدونم چه تفاوتی دارن؟ شما نسل های خیلی قبل ، منظورتونه؟ مثلا یه پردازنده ی نسل 4 ام core i از اینتل . یا نسل های بالاتر (مثلا نسل آخر یعنی 8) رو در نظر بگیرید
    بالاخره چه بتونه کدهای نامرتبط با رم را اجرا کنه یا نه ، این نخ فعلی (که 10 ثانیه منتظر میموند برای گرفتن اطلاعات از رم) ، یک هسته را درگیر میکنه دیگه . درسته؟
    بعد هم اینکه پس حالا بیایم توی شرابط واقعی . یعنی واقعا یه نخی 10 ثانیه طول بکشه تا بخواد اطلاعات مورد نظرش از رم به پردازنده برسه . همون لحظه ، یه نخ دیگه هم باشه که 1 ثانیه اجراش طول بکشه . قطعا در این حالت ، پردازنده ، سربار را میپذیره و نخ جاری (که 10 ثانیه) طول میکشه را متوقف میکنه و میره سراغ اون نخی که اجراش 1 ثانیه طول میکشه و دوباره میاد سروقت نخ فعلی . درسته؟
    غیر از اینکه این نخ را متوقف نمیکنه و سراغ نخ دیگه ای نمیره که هر دو نخ ، اجراشون یه زمان ببرن (در اینجا مثلا هر دو ، 10 ثانیه زمان ببرن) . درسته؟
    پس با این حساب ، پردازنده هیچ وقت از 50 درصد ، بیشتر برای رم یا هارد زمان صرف نمیکنه . یعنی اگه قرار باشه بیشتر از 50 درصد برای نخ ای زمان بذاره برای خوندن یا نوشتن از رم ، قطعا سربار را میپذیره و سراغ نخ دیگه ای میره . درسته؟
    پس ، اون مقاله ای که نشون داده بودم :

    چرا نمی‌توان به Task Manager ویندوز اعتماد کرد؟

    اشتباه حساب کرده بود . چون توی شکل نشون داد که وقتی در task manager نشون میده که 90 درصد از پردازنده مشغول هه ، ممکنه این طور نباشه و حدود 25 درصد مشغول باشه . که طبق روند بالا ، این طور نیست . درسته؟

    بعد اینکه ، طبق چیزی که اون مقاله گفت ، با پایش کننده‌های کارایی (PMC) مثل perf در سیستم عامل لینوکس ، میشه به مشغول بودن واقعی پردازنده پی برد؟ یعنی این برنامه ، مقداری که نخِ پردازنده ، منتظر خوندن و نوشتن اطلاعات از رم میشه را در نظر نمیگیره؟
     
    نوشته شده توسط SajjadKhati در ‏15 می 2018
  4. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,571
    تشکر شده:
    10,564
    امتیاز دستاورد:
    113

    منظورتون درسته ولی اینکه بگید هسته مجازی همون نخ فیزیکیه برای هر هسته است اشتباهه، مثل اینه که بگید سیخ کباب همون کوبیده است، هسته مجازی کد یک نخی رو اجرا می کنه، خودش که نخ نیست. وقتی CPU خاموشه نخی دیگه وجود نداره اما اون هسته های مجازی همچنان سر جاشه.
    همه رو قاطی کردین با هم. سوئیچ نخ و سوئیچ پروسه و ... همون مطالب قبلی رو گفته بودم رو لطفا دوباره مطالعه کنین. پردازنده چند نخی دیگه چیه، اصطلاحات جدید اختراع می کنین. هسته مجازی با هسته فیزیکی خیلی فرق داره، هسته فیزیکی تمامی منابع عملیاتی خودشو مستقلا داره وقتی بخواد یک کدی رو اجرا کنه مستقل از اینکه نوع کد چیه میتونه انجامش بده، اما هسته مجازی مثل هم اتاقی هایی هستند که وسایل مشترکی دارند. هسته مجازی صرفا میتونه کدی رو اجرا کنه که هسته مجازی شریکش مانع اجراش نشه، فرضا هسته مجازی شریک درخواست داده از حافظه کرده، تو این فاصله که اون داده بیاد بخش اجرایی هسته بیکاره، اون یکی هسته مجازی تو این زمان فرصت داره یک کد اجرایی که کاری با حافظه نداره رو اجرا کنه، وگرنه اونقدر دستش که باز نیست مثل هسته فیزیکی هر کدی خواست همون لحظه اجرا کنه. همزمان که نمی توانند کار مشابهی رو انجام بدن.
    گذرگاه bus ئه، گذرگاه داده صرفا یک نوع از گذرگاه ئه. پردازنده هم که فقط با RAM در ارتباط نیست، در صورت تمایل در مورد گذرگاه و پل جنوبی و پل شمالی و ... مطالعه کنید.
    کد منظور متد یا Function و ... نیست، کد منظور یک عدد کد ماشین ئه یعنی یک دستور به زبان ماشین که پردازنده میفهمه و معادل یک کد زبان اسمبلی ئه. کم هم پیش نمیاد، خیلی هاشون هیچ ارتباطی با حافظه RAM ندارند.
    شما قبل از اینکه دو تا کد AX = 1 و BX = BX + 1 اجرا بشه نمیتونید تشخیص بدید که نتیجه این دو تا کد ربطی بهم ندارند و با هر ترتیبی اجرا بشوند نتیجه یکسانه؟ بعد از اینکه اجراشون کردید چطور نتیجه می گیرید که بهم ربط داشتند یا نه؟

    خیر. عرض کردم هسته پردازنده مشغول اجرای یک کد مرتبط با حافظه RAM باشه، در این شرایط که هسته فیزیکی پردازنده منتظر اجرای درخواستی از گذرگاه ئه، فقط برخی پردازنده ها میتوانند در این حالت کد مستقل دیگری رو روی اون هسته اجرا کنند. همه پردازنده ها که قابلیتی مثل Hyper-Threading ندارند.


    مگه شما مشغول بودن پردازنده رو با درصد نمیسنجید؟ این درصد نسبت به چیه؟ مگه نسبت به تعداد هسته هایی که داره نمی سنجید؟ مگر غیر از اینه که در یک پردازنده دو هسته ای یک هسته نصف توانشه. پس چطور میگید شرایط هسته ای فیزیکی ای که فقط میتونه یک کد رو در هر لحظه اجرا کنه توانش با هسته ای فیزیکی ای که دو هسته مجازی حساب میشه و میتونه همزمان دو تا کد رو با شرایطی همزمان اجرا کنه یکی ئه؟ شما نصفی از توان اون هسته رو صرف کد تون کردید، نیمه دیگه توانش رو که نه. اینکه نصفش اش مشغول باشه و یا کل اش فرقی نداره؟


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

    اصلا میزان مشغول بودن واقعی پردازنده چه اهمیتی داره؟ چه کم باشه یا زیاد که از بیرون پردازنده نمی توانید برایش کاری بکنید. میتوانید تنظیمش کنید توانش تغییر کنه؟ نه. فرض کنید درصد مشغول بودن واقعی پردازنده حداکثر 20 درصد بشه، شما می توانید از اون 80 درصد باقی استفاده کنید؟ خوب معلومه که نه. این درصد واقعی چه چیزیش واقعی محسوب میشه وقتی ارتباط معنا داری با توان سیستم نداره. پردازنده چه مفید و چه غیر مفید، وقتی منتظر باشه در هر حال از دید بیرون پردازنده مشغول ئه. واقعیت چیزیه که به عنوان منبع سیستم مشهود باشه، واقعیت اینه که چه مشغول باشه و چه منتظر باشه برای سیستم عامل busy حساب میشه. اینکه داخلش چه چیزی دلیل busy بودن بوده که یا پردازنده اتلاف انرژی کم داره یا زیاد برای سیستم عامل که اهمیتی نداره. وقتی مشخصات یک خودرو رو مطالعه می کنید به این توجه میشه که با سرعت مشخص چقدر سوخت مصرف می کنه. حالا چه اهمیتی داره که چقدر از این سوخت واقعا برای حرکت صرف شده و چقدرش به اشکال مختلف اتلاف شده؟ مهم اینه که اونقدر سوخت رو بصورت مشهود مصرف میکنه.
     
    نوشته شده توسط the_king در ‏16 می 2018
    SajjadKhati از این پست تشکر کرده است.
  5. SajjadKhati

    SajjadKhati کاربر فعال <A href="http://forum.majidonline.com/f

    ارسال‌ها:
    1,028
    تشکر شده:
    350
    امتیاز دستاورد:
    83

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



    من که آخر متوجه نشدم . اصلا هسته ی مجازی گفتین چیزی را نمیتونه اجرا کنه . هسته ی واقعی گفته بودین که اجرا میکنه .
    الان تفاوت پردازنده های چند نخی (مثل i3 6100) با پردازنده های معمولی (مثل i5 6400) اینه که در پردازنده های چند نخی ؛ در نخ فیزیکی شون (که 2 نخ فیزیکی در هر هسته وجود دارن) ، اگه یه نخ فیزیکی ، یه کدی که مربوط به خوندن یا نوشتن اطلاعات از رم هست را اجرا کنه ، یه نخ دیگه ای وجود داره که میتونه کدی که مربوط به خوندن و نوشتن از رم نباشه را اجرا کنه؟ منظورتون اینه؟
    اما قبلا گفتین هسته ی فیزیکی فقط کد را اجرا میکنه و همزمانی فقط برای هسته ها معنا داره . یعنی در یک هسته ، همزمان ، یک کد اجرا میشه



    در مورد بقیه ی توضیحات هم ممنون
    :rose:
     
    نوشته شده توسط SajjadKhati در ‏16 می 2018
  6. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    10,571
    تشکر شده:
    10,564
    امتیاز دستاورد:
    113

    مثل همون نمونه قبلی هسته مجازی همون نخ فیزیکیه شد که اشتباهه، پردازنده ها Hyper Thread نیستند، میتوانند تکنولوژی Hyper-Threading رو داشته باشند، ولی نه اینکه پردازنده Hyper Thread یا هر جور دیگری از Thread باشه. پردازنده چند هسته ای داریم، ولی پردازنده چند نخی معنی نداره. پردازنده نخ نداره که تک نخی باشه یا چند نخی.


    دستورات زبان ماشین مشخص هستند دیگه، نکته مبهم و ناشناخته ای نداره که پردازنده نفهمه این دستور از چه نوعیه، دستوراتی که با حافظه RAM در ارتباطند مشخص هستند، دستوراتی هم که کاری با حافظه RAM ندارند هم مشخص اند. اگه پردازنده جزئیات دستور رو تشخیص نمیداد که نمیتونست اجراش کنه.

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

    این جمله یعنی چی؟ از مطالعه چه مطلبی به این همچین سوالی رسیدید؟ چه برداشتی از نقش پل شمالی دارید؟

    عجب. لطفا اون بخشی از مطالبم که همچین عبارتی رو گفتم بمن نشون بدید.

    پردازنده چند نخی دیگه چیه؟ از اساس اشتباهه، یا مفهوم نخ رو متوجه نشدید یا پردازنده رو یا هر دو. پردازنده که برنامه و پروسه نیست نخ داشته باشه. نخ فیزیکی هم متعلق به سیستم عامله، وقتی کدی برای اجرا نباشه نخی وجود نداره. پردازنده که خودش نه کدی داره و نه کاری برای انجام. وقتی سوالتون اشتباه باشه و فرقی بین هسته و نخ قائل نشید جوابی بهش نمیشه داد.
    سوال میپرسید ولی توجهی به جواب ها نمی کنید، یک مطلب رو بارها هم توضیح میدم ولی همچنان یک قاعده و استدلال از خودتون اختراع می کنید و نهایتا میگید من اونطور گفتم. صحبت هسته فیزیکی یا مجازی نبوده، این مطالب که جدید نیست :
     
    نوشته شده توسط the_king در ‏17 می 2018
    SajjadKhati از این پست تشکر کرده است.

به اشتراک بگذارید