اولا واحد بزرگی بکار نبرید، میلی ثانیه در مقایسه با فرکانس پردازنده واحد بزرگیه، از تیک استفاده کنید که ارزیابی دقت کافی داشته باشه.
ثانیا شما که اصلا کاری با سند و مدرک ندارید، مستندات خود Intel رو که قبول ندارید هیچ نتیجه محاسبات خودتون رو هم جوری که نیست تفسیر می کنید.
سوالی که نوشتم رو که خوندید؟ ازتون پرسیدم "شما که مدعی هستید این نخ ها هر کدوم میتوانند در هسته مجزایی اجرا بشن و دیگه Turbo Boost هم تداخلی در محاسبات نداره دیگه برای کاهش کارایی شون چه دلیلی دارید؟"
چه جوابی برای سوالم دارید؟
تقریبا زمان شون یکی هست؟ مگه نمی گید تقریبا برابر هستند با اختلاف 2 الی 3 ثانیه، چرا پس نمی گید وقتی تعداد نخ ها رو بیشتر می کنم تقریبا برابر هستند با اختلاف 7 ثانیه؟ چه معیاری گذاشتید برای اینکه 2 الی 3 ثانیه اختلاف ناچیزی است و 7 ثانیه هست؟
اسناد شما میگه وقتی شما تعداد نخ بیشتری ساختید که بنا به گفته خودتون هر کدوم در هسته فیزیکی مستقل اجرا شدن کارکرد اومد پایینتر. مستقل اجرا شدن و اجراشون کندتر شد؟ اون اختلاف 2 الی 3 ثانیه رو ضرب کنید در فرکانس پردازنده تون ببینید چند سیکل میشه؟
اون 10000000000 بار تکرار حلقه تون رو 5.68 درصدش رو حساب کنید ببینید چند بار تکرار حلقه تون میشه. مقداری نیست؟ شما که میگید پردازنده تون داره هر نخ رو در هسته مجزا اجرا میکنه چطور اینقدر سیکل ساعت و اونقدر تعداد بار تکرار حلقه تون رو از دست دادید؟
خوب که این خیلی طبیعیه، وقتی تعداد نخ ها زیاد میشه، هسته دائم در حال سوئیچ شدن بین نخ ها میشه و سربار اجرای سوئیچ هم فشار روی اون هسته ایجاد میکنه و هم سایر هسته ها و هم فعالیت بیشتر نخ های مدیریتی سیستم و در نتیجه کارایی بخاطر تعدد و ترافیک درخواست ها میاد پایین. وقی از یک در یک صف آدم به نوبت رد میشن نرخ عبور (آدم بر ثانیه) از در بیشتره یا وقتی 16 نفر آدم حمله میکنن سمت در و ترافیک ایجاد میشه؟
اتفاقا این سوال رو شما باید توضیح بدید، مگه شما نمی گید که نخ های من روی چهار هسته فیزیکی همزمان اجرا میشن؟
مرحله 1 - سه یا چهار نخ هر کدوم روی یک هسته شروع به اجرا می کنند. حالا بین شون سوئیچ هم ممکنه بشه، مهم نیست.
مرحله دوم - چند نخ در اجرای مرحله اول کارشون تموم شده و سیستم عامل پرونده اون سه یا چهار نخ رو میبنده میذاره کنار و هسته ها می توانند نخ های دیگری از برنامه تون رو که در صف باقی موندن اجرا کنند.
با فرض شما وقتی به مرحله دوم میرسیم همه اون هسته ها با اختلاف زمانی کم کارشون با یک نخ برنامه تموم شده.
حالا چطوری بین 5 نخی و 6 نخی اختلاف زمانی زیاد دارید؟ چه فرقی می کنه 5 نخی و 6 نخی؟ مرحله دوم شون رو تصور کنید. در هر دو وضعیت 5 نخی و 6 نخی وقتی به مرحله دوم رسیدیم به تعداد نیاز نخ های باقی مونده هسته بیکار هست.
مستندات شما میگه بین اجرای 5 نخی و 6 نخی پردازنده 8 ثانیه سکته کرده که اینقدر اختلاف زمانی دارن؟
با توصیفی که شما از اجرای نخ هاتون دارید، هیچ توضیحی نمیشه داد، شما با فرض اشتباه یک سوالی طرح می کنید که چون فرض مساله غلطه نه من و نه خودتون نمی تونید با فرمول ریاضی توضیحش بدید.
وقتی فرض رو بر این گرفتید که هر نخ میتونه مستقل روی هسته ای مجزا همزمان با نخ دیگری از برنامه تون اجرا بشه، باید به این نتیجه برسید که در پردازنده 4 هسته ای که بار کاری عادی اش در حد 25 درصد نیست و کمتره،
سه هسته همواره اونقدر آزاد و بیکار هستند که بتوانند سه نخ برنامه شما رو در زمان n ثانیه تموم کنند و بعد سه نخ دیگه رو و عملا در بدترین شرایط زمان اجرای کامل 6 نخ تون با 5 نخ تون باید برابر باشه و نباید بیشتر طول بکشه.
چون وقتی سه هسته سرش خلوت ئه، اجرا کردن یک نخ و دو نخ و سه نخ باقی مونده زمان متفاوتی میخواد؟ مستنداتون این مساله رو تایید می کنه؟ نمیکنه.
وقتی 4 نخ میساختید پردازنده تون با حداکثر توان پاسخگویی اش درگیر شده، دائم در حال سوئیچ کردن بین نخ های برنامه و سایر برنامه ها است، اون نخ های دیگه کارشون کم ئه و زود تموم میشه ولی نخ های شما که ول کن نیستن و حالا حالا ها پردازش میخوان.
وقتی نخ جدیدی به صف درخواست ها اضافه میکنید مجالی هست برای پاسخگویی؟ نیست. صف درخواست پردازنده از سیستم عامل به حد اشباع رسیده، پردازنده گلوگاه شده. سیستم عامل دستش بسته است. حالا هی شما نخ جدید اضافه کنید، پردازنده که نمیتونه کاری برای افزایش سرعت بکنه. نخ گرامی تون باید صبر کنه تا نوبت اش برسه، به عبارتی دیگه نخ دیگری از برنامه تون کارش تموم بشه. اون نخ ها رو می بینید در Task Manager که سایر برنامه دارن؟ همه شون همواره در حال اجرا نیستن ولی به کررات درخواست در کم دارن.
الات مظلوم و کم صدا کار میکنن چون فرصت پردازش دارن. اما وقتی ترافیک برای پردازنده ایجاد بشه همون نخ هایی که کارشون کم ئه میشن سربار سیستم و در بین اجرای نخ های شما دائم نوبت اجرا میگیرن. اینطوریه که سوئیچ شدن سربار زیادی ایجاد میکنه.
چون طبق مستندات Intel Turbo Boost سقف فرکانسی که به پردازنده اختصاص داده میشه و طبعا متغیر ئه به اینها وابستگی داره، در همون صفحه ای نوشته شده که ازش نقل قول کرده بودم :
اینطوری که پردازنده بر اساس اینکه چند هسته فعال و غیر فعال هست، حرارت پردازنده چقدر ئه، چقدر برق مصرف میکنه و چقدر جریان میکشه و چقدر درخواست پردازش روی پردازنده هست فرکانس رو تغییر میده.Type of workload
Number of active cores
Estimated current consumption
Estimated power consumption
Processor temperature
وقتی فقط یک هسته رو فعال کنید، هسته های دیگه از مدار خارج میشن و مصرف انرژی پردازنده به میزان متناسب کم میشه، جریانی که پردازنده میکشه به میزان متناسب کم میشه، حرارت پردازنده هم که موثر از اینها است کم میشه.
در نتیجه همه اون موارد که سقفی پایین تر از حداکثر میزان فرکانس ایجاد میکردن از بین میرن، خود بار کاری الان تعیین کننده فرکانس میشه که اونم یک پارامتر جدا است، سقف نیست.
شما در Intel proccessor identification utility میخواهید سقف فرکانس پردازنده رو بخونید، نه فرکانس متغیری که در این لحظه توسط Turbo Boostبرای CPU تعیین شده.
اگر همه هسته ها فعال باشند، احتمال داره با توجه به مشخصات پردازنده یا مادربورد و سیستم خنک کننده سقف های مضاعف تحمیل بشن و سقف فرکانسی که Intel proccessor identification utility اعلام میکنه کمتر از چیزی باشه که در بهترین شرایط سخت افزاری و به عنوان حداکثر فرکانس Turbo Boost برای پردازنده بدست میاد. دقت کنید که صحبت از حداکثر فرکانس پردازنده با Turbo Boost ئه، نه حداکثر فرکانس وقتی همه هسته ها رو فعال کردید و بصورت عادی از سیستم استفاده می کنید.
ممکنه بخاطر محدودیت های سخت افزاری سایر پارامتر ها هیچوفت نتوانید در عمل از اون سقف فرکانس استفاده کنید، مگر در همون حالتی که سیستم تک هسته ای یا حتی دو هسته ای شده.
میتوانید امتحان کنید، ممکنه با هر چهار هسته فعال هم به اون حداکثر فرکانس در عمل برسید، اما تا وقتی که پردازنده زیادی داغ نشده.