سلامی مجدد .
خیلی ممنون استاد .
نه . منظورم رو خوب متوجه نشدین . اتفاقا برعکسِ این قضیه رو گفتم .
بحث نیاز به پردازشِ بیشتر نیست . کلا پردازنده هایی که تکنولوژی turbo boost clock رو دارن ، هر چی کارکرد و فشار کاریِ پردازنده بیشتر بشه ، کلاک شون پایین تر میاد (نه اینکه بالاتر بره) تا جایی که کلاک شون به کلاک پایه ی پردازنده نزدیک بشه .و برعکسش ، هر چی بار کاری شون کمتر باشه ، فرکانس اش افزایش پیدا میکنه تا جایی که به کلاک turbo boost اش نزدیک تر بشه .
یا به عبارتی دیگه ، بالاترین فرکانس را در صورتی دارن که (معمولا) فقط به اندازه ی یک هسته اش درگیر فعالیت باشه .
بنابراین در پردازنده ی من (که فرکانس پایه اش 3.2 و فرکانس turbo boost اش 3.4 هست) ، وقتی یک برنامه (یک پروسه با یک نخ) را اجرا میکنم ، فقط یک هسته یعنی 25 درصد را اشغال میکنه (البته 5 تا 10 درصد هم بقیه ی پروسه ها و نخ هاشون پردازش میخوان که کلا میشه 30 تا 35 درصد پردازنده اشغال میشه) که در این صورت ، فرکانس پردازنده بین 3.33 تا 3.35 گیگاهرتز هست (این ، همونی هه که cpu usage اش 98 درصد بود) .
اما وقتی دو تا برنامه (پروسه) باز میکنم که هر کدوم شون یک نخ را اجرا میکنن یا اینکه یک برنامه با دو نخ را اجرا میکنم که در هر کدوم از این دو حالت ، 50 درصد از توان پردازنده مصرف میشه (البته 5 تا 10 درصد هم بقیه ی پروسه ها و نخ هاشون پردازش میخوان که کلا میشه 55 تا 60 درصد پردازنده اشغال میشه) ، طبق همون قضیه ی turbo boost که گفتم ، چون بار کاری و درصد استفاده ی پردازنده بالاتر رفت ، فرکانس اش کمتر میشه (تا به فرکانس پایه ی پردازنده ، نزدیک و نزدیک تر بشه) و در این میزان از بار کاری (بار کاری 55 تا 60 درصد) ، فرکانس پردازنده ام بین 3.23 تا 3.25 هست . (همونطور که گفتم ، نمیدونم میانگین فرکانس همه ی هسته ها این مقدار میشه یا فرکانس همه ی هسته ها همین فرکانسی که اعلام میکنه هست . اما فکر کنم میانگین شون باشه . باز هم دقیق نمیدونم) بنابراین در این حالت ، عملکرد هسته هام کاهش پیدا میکنه (به نسبت تک پروسه ی قبلی که فرکانسش 3.33 تا 3.35 بود) (این ، همونی هه که یه پروسه ، cpu usage اش 94 و یه پروسه ی دیگه ، cpu usage اش 92 درصد شده بود) .
الان ، اغلب پردازنده های روز ، turbo boost رو دارن . فلسفه اش هم اینه که این تکنولوژی اومد تا عملکرد تک هسته ای رو بالاتر ببره . حالا واسه ی من اختلاف کلاک پایه و کلاک بوست پردازنده ام 200 مگاهرتز هه اما پردازنده های روز ، اختلاف شون به 400 مگاهرتز و گاها تا 1 گیگاهرتز (و حتی گاها بیشتر) میرسه .
توی لپتاپ تاپ ها ، اختلاف کلاک پایه و کلاک بوست ، معمولا زیاد هه . به احتمال بسیار زیاد ، پردازنده ی شما هم این قابلیت را داره (البته من اینترنت بین الملل ندارم نمیتونم تحقیق کنم) .
استاد ، شما همین برنامه ای رو که نوشتین رو اجرا کنین . اول یکی نخ بسازید و در task manager در سربرگ performance اش ببینین کلاک (speed) اش چقدره . بعد دوباره دو نخ را پشت سر هم اجرا کنین و ببینین این بار چقدره . و همین جوری تا 8 نخ پشت سر هم اجرا کنین . اگه دیدین هر بار که نخ های بیشتری ایجاد میکنین (و کلا بار کاری و درصد اشغال پردازنده تون بیشتر میشه) ، کلاک تون پایین تر میاد ، پردازنده تون از turbo boost پشتیبانی میکنه . البته قابلیت turbo boost ، باید در بایوس (یا uefi) تون هم فعال شده باشه .
منظورم را دقیق متوجه نشدین . درباره ی این قضیه ، چیز خاصی نمیدونم . واسه ی همین گفتم شاید کش l3 مشترک باشه در همه ی هسته های فیزیکی . (نمیدونم دقیق) . در صورت صحت ، باز هم منظورم برای یه قضیه ی دیگه یعنی لحظه ی سوئیچ نخ پروسه مون بین دو هسته ی فیزیکی مختلف بود (که داشتیم درباره اش صحبت میکردیم) . به هر حال گفتم که ، این قضیه ی کش l3 که گفتم ، یه چیز علمی و مستند نبود و اطلاع کافی ندارم واسه ی همین گفتم شاید . کلا بگذریم .
اما استاد ، وقتی که اطلاعات نخ (که متوقف شده بود) و (وضعیت اش) در هسته ی فیزیکی ای در رجیستر ثبت شده بود ، حالا قراره به هسته ی فیزیکی دیگه ای پاس داده بشه ، نیاز داره که اطلاعات اون نخ که در رجیستری ثبت شده ، اول به حافظه ای مشترک بین این هسته های فیزیکی منتقل بشه و بعد به حافظه ی رجیستریِ هسته ی فیزیکی جدید برای ادامه ی عملیات و اجرای نخ ، منتقل بشه دیگه . درسته؟ (حافظه ی کش l3 هم کلا مشترک هست بین تمام هسته های فیزیکی دیگه . درسته؟)