نقل قول نوشته شده توسط the king مشاهده تاپیک
سوال اینه که چرا بازدهی اومد پایینتر، نه اینکه چرا رفت بالاتر. شما دارید میگید چون پردازنده Turbo Boost داره که در موقع نیاز به پردازش بیشتر، فرکانس عملیاتی پردازشگر رو موقتا میبره بالاتر و در نتیجه پردازنده سریعتر کار می کنه.

سلامی مجدد .
خیلی ممنون استاد .
نه . منظورم رو خوب متوجه نشدین . اتفاقا برعکسِ این قضیه رو گفتم .
بحث نیاز به پردازشِ بیشتر نیست . کلا پردازنده هایی که تکنولوژی turbo boost clock رو دارن ، هر چی کارکرد و فشار کاریِ پردازنده بیشتر بشه ، کلاک شون پایین تر میاد (نه اینکه بالاتر بره) تا جایی که کلاک شون به کلاک پایه ی پردازنده نزدیک بشه .و برعکسش ، هر چی بار کاری شون کمتر باشه ، فرکانس اش افزایش پیدا میکنه تا جایی که به کلاک turbo boost اش نزدیک تر بشه .
یا به عبارتی دیگه ، بالاترین فرکانس را در صورتی دارن که (معمولا) فقط به اندازه ی یک هسته اش درگیر فعالیت باشه .

نقل قول نوشته شده توسط the king مشاهده تاپیک
چون باید سریعتر کار کنه پس کندتر کار کرده؟ حالتون خوبه؟
وقتی شما یک نخ رو به تنهایی اجرا می کردید یا این Turbo Boost فعال بوده یا نبوده. اگر در حالت تک نخی فعال بوده که در حالتی که با دو نخ کار می کردید هم فعال بوده و فرکانس کاری در بدترین شرایط همون بوده و تغییری نکرده، و در شرایط بهتر میتونسته حتی فرکانس بالاتر هم رفته باشه. اگر در حالت تک نخی Turbo Boost فعال نبوده، پس اگر در حالت دو نخی فعال شده که باید کارکرد بهتر هم بشه، چرا بدتر؟ تازه شما کل توان پردازنده رو که فعال نکردید، 50 درصدش ئه. 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) تون هم فعال شده باشه .

نقل قول نوشته شده توسط the king مشاهده تاپیک
نه فعلا با قضیه Turbo Boost پیش میریم.


شما می گید یک حافظه cache level 3 در بعضی پردازنده ها هست که بین همه هسته های فیزیکی مشترک هستند و هر کدوم بخواد ازش استفاده کنه بقیه هسته ها باید صبر کنند. اصلا کاری با درستی و نادرستی اش ندارم، با قابل قبول بودنش کار دارم.
با این فرض که دسترسی بهش بصورت همزمان میسر نیست، دارید میگید وقتی یک هسته بخواد کاری با این حافظه مشترک انجام بده، لازمه که چهار هسته دیگه صبر کنند؟
با این تعبیر که در هر لحظه فقط یک هسته از چهار هسته داره کاری با اون حافظه انجام میده و بقیه دارن صبر می کنند، چه با کد نخ شما درگیر باشن و چه نباشن.
به این مساله توجه دارید که پیش از دسترسی به حافظه اصلی RAM باید به این حافظه Cache رجوع بشه؟
Cache داخل CPU برای چیه؟ برای اینکه قبل از اینکه فرضا از حافظه اصلی چیزی خونده بشه بررسی بشه که آیا در این حافظه Cache گرانقیمت سریع کم حجم اون داده درخواستی هست که اگر باشه بجای حافظه اصلی از اون خونده بشه که کارایی بره بالا.
اون Cache اضافه شده تا سرعت رو بالاتر ببره. اگر قرار باشه هسته ها برای دسترسی شون به Cache تو صف وایستن که هم کارایی هر چهار هسته میاد پایین و هم دسترسی به حافظه کند میشه. نمیان که یک حافظه گرانقیمت و پیچیده رو قرار بدن که بجای کمک مشکل ایجاد کنه.

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


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