نقل قول نوشته شده توسط the king مشاهده تاپیک
شما وقتی در یک برنامه یک نخ رو آزادانه برای اجرا روی هر هسته ای انتخاب می کردید بهتون cpu usage و total usage بین 98 الی 100 درصد میده. درسته؟ حالا در دو برنامه رسیده به 94 و 92 درصد.
طبق ادعای شما برای اجرای این دو برنامه فقط دو هسته درگیر شدن، هر هسته برای یک نخ در یک برنامه و اون دو هسته دیگه پردازنده تون الان بیکار ئه و 25 + 25 درصد توان پردازنده مشغول ئه و 25 + 25 درصد بیکار ئه.
پس چطور این مساله رو توضیح میدید که یک هسته که 25 درصد توان پردازنده بود تونسته بود 98 الی 100 درصد کارایی بده ولی حالا که دو تا هسته شد با 50 درصد توان پردازنده کارایی شون شده 94 + 92 درصد؟
مگه شما مدعی نیستید که اون دو تا هسته دیگه الان بیکار هستند و کاری به اون دو تا نخ ندارند برای سایر کارهای سیستم عامل آزادند هر کاری لازمه بکنند؟ چطور توان دو هسته ای موازی تون اومد پایین؟
این چطور پردازش موازی ای در دو هسته فیزیکی مستقل ئه که دو تا پروسه جدا دارن ولی اجرای همزمان شون نتونسته کارایی اجرای تکی رو ارائه کنه؟
خیلی ممنون استاد
اگه منظورتون از اینکه من گفتم بیکار هستن ، یعنی سوئیچ پروسه هام روی اون هسته ها انجام نمیشه و اون هسته ها ، به این جهت بیکار هستن که چنین چیزی نگفتم و توضیح دادم دیگه .

بله . کارایی یک نخ با یک پروسه (در واقع cpu usage اش) ، برای من 98 درصد بود . و وقتی دو تا پروسه که هر کدوم شون یک نخ را توشون اجرا کردم ، این مقدار ، در یک پروسه 94 و در اون یکی پروسه ، 92 شده بود .

علت اش هم تا جایی که میدونم بخاطر قضیه ی turbo clock در پردازنده ی من هست (اگه اشتباه نکنم ها) . بعضی از پردازنده ها توربو کلاک دارن . در واقع علاوه بر کلاک پایه (که واسه ی من 3.2ghz هست) ، یه کلاک توربو (که واسه ی من 3.4ghz هست) هم دارن . فرکانس پایه ، که همیشه ثابت هست و هیچ هسته ی ای از اون پردازنده ، حق نداره از کلاک پایه ی اون پردازنده ، کلاکش کمتر بشه . یعنی اگه پردازنده ای با تمام توان اش (توان و اشغالِ 100 درصد از تمام هسته ها) کار کنه و حتی زمانی که اور کلاک میشه ، هیچ هسته ای حق نداره فرکانسش کمتر از فرکانس پایه اش بشه . اما وقتی پردازنده با توان کمتری کار کنه (مثلا وقتی با 15 درصد از توان اش کار کنه) ، پردازنده ، اتوماتیک کلاک هسته رو افزایش میده تا به کلاک توربو بوست ای که مشخص کرده بود برای اون پردازنده ، نزدیک تر بشه و هر چقدر میزان کارکرد پردازنده بیشتر بشه ، کلاک توربو بوست اش کم و کمتر میشه تا به فرکانس پایه اش نزدیک بشه .
مثلا برای من ، وقتی پردازنده ام 15 درصد مشغول هست ، با کلاک 3.35 تا 3.37 کار میکنه . وقتی 25 درصد ازش مشغول هست ، با کلاک 3.3 تا 3.5 کار میکنه . وقتی 50 درصدش مشغول هست ، با کلاک 3.25 کار میکنه و از 50 درصد به بالاتر (تا 100 درصد) با کلاک 3.19 کار میکنه .
تا اینجا را که مطمئنم اما حالا اینکه مثلا وقتی 25 درصد اش مشغول هست ، میانگین کلاک هسته ها بشه 3.5 (یعنی کلاک هر هسته با هم متفاوت باشه و در نتیجه میانگین شون بشه 3.5) یا اینکه همه ی هسته ها با کلاک 3.5 کار کنن را نمیدونم ولی اگه اشتباه نکنم ، میانگین کلاک هسته ها میشه 3.5 و بنابراین باز هم اگه اشتباه نکنم ، هسته ها با کلاک های متفاوتی کار میکنند و در نتیجه ، وقتی یک پروسه رو اجرا میکنیم ، مقدار cpu usage اش 98 درصد میشه اما وقتی دو تا پروسه را اجرا میکنیم این مقدار در یک پروسه ، 94 و در پروسه ی دیگه 92 میشه .
البته اینی که کلاک هسته ها در پردازنده های دارای تکنولوژی turbo boost clock ، متفاوت خواهد بود یا نه را باید تحقیق بشه (من فعلا اینترنت بین الملل ندارم) ولی به احتمال بسیار زیاد (95 درصد) ، همینطور هست.



نقل قول نوشته شده توسط the king مشاهده تاپیک
این هم مثل همون یکی. با فرض شما که مدعی هستید وقتی نخ بین CPU0 و CPU1 سوئیچ میشه سایر هسته ها آزاد هستند و درگیر نیستن، چه توضیحی دارید برای اینکه نخی که آزاد بوده در یکی از دو هسته CPU0 و CPU1 اجرا بشه روی کارکرد در هسته CPU2 و CPU3 تاثیر داره؟
من اینم بگم قشنگ متوجه ی منظورتون نشدم ، قضیه ی مرغ را پیش نمیکشید

نقل قول نوشته شده توسط the king مشاهده تاپیک
و حتما می توانید توضیح بدین که چطور کارکرد این 50 درصد تون پایینتر از اجرای یک نخ شده؟ اینکه چطور با این اجرای موازی از 98 الی 100 درصد رسیدین به 94 و 92 درصد. شما که میگید من نمیتونم بپذیرم که وقتی بین دو هسته سوئیچ میشه بار کاری روی سایر هسته ها ایجاد بشه چطوری این تجربه رو تفسیر می کنید که فقط 50 درصد توان پردازنده رو گرفتید و کاری به سایر هسته ها نداشتید ولی کارکرد اومد پایینتر؟ شما که میگید پردازنده هنوز 50 درصد بیکار ئه چطور کارکرد هسته اش کم شد؟


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