سلام آرشان جان،برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
بنده سعی می کنم یه دید کلی برای هر سوالت فراهم کنم که در تکمیل فرمایش های سجاد جان باشه. برای اینکه سو برداشتی نباشه بنده هم CPU Thread رو تحت عنوان هسته ی منطقی و Software Thread رو تحت عنوان نخ به کار می برم.
برای این کار ابزار های Profiling وجود داره که توسط شرکت های مختلف عرضه میشه. یکی از بهترین گزینه های موجود Intel® VTune™ Amplifier هستش که اطلاعات کاملی در مورد تعامل برنامه با پردازنده ارایه میده.س1) از کجا بفهمیم که یک نرم افزار از یک ترد استفاده می کنه یا دو ترد به صور همزمان. توی نرم افزارهای بزرگ این مورد نوشته می شه مثل Cinem4D ولی برای خیلی ها نوشته نمی شه
شاید بهتر باشه بگیم هیچ کدوم از این حالت ها اتفاق نمی افته. قضیه پیچیده تر از این حرف ها هست. اینکه برنامه چطوری اجرا میشه به سه تا عامل بستگی داره: ساختار برنامه که برنامه نویش اون رو تعیین می کنه، سیستم عامل و پردازنده.س2) فرض کنید یک پردازنده 6 هسته ای دارم با فرکانس 3 گیگاهرتز و 12 ترد. حالا می خوام چند تا برنامه به طور همزمان باز کنم و این برنامه ها به فرض رندر می کنن. حالا این نرم افزارها و عمل رندر به کدوم یک از روش هایی که میگم انجام می شه. این حالت ها برای نرم افزارهای 1 تردی یا دو تردی فرق دارن
الف) نرم افزار اول باز شده و در حال رندر کردنه و 2 هسته از سی پی یو رو اشغال می کنه و از هر هسته فقط 2 گیگاهرتز اشغال می کنه. بعد نرم افزار دوم رو باز می کنم و اون هم به دو هسته نیاز داره و چون از هر یک از دو هسته اول یک گیگاهرتز باقی مونده اول اون دو تا یک گیگاهرتز از هتسه اول رو اشغال می کنه و باقی پردازش میره روی هسته های 3 و 4 و همینطور که نرم افزارهای دیگه رو باز می کنم هسته های بعدی درگیر میشن تا 6 هسته پر بشه و 100 درصد پردازنده اشغال بشه
ب) نرم افزار اول باز شده و در حال رندر کردنه و پردازش روی 6 هسته پخش می شه و همینطور که نرم افزارهای بعدی که باز می کنم پردازش اونا هم روی این 6 هسته پخش می شه و به طور کلی این 6 هسته کم کم پر می شه تا 100 درصد پردازنده اشغال بشه.
موازی سازی سطوح مختلفی داره. در مثالی که زدی عمل رندر روی دو پردازنده به شکل همزمان و هم عمل رندر روی هشت هسته به شکل همزمان، دو مدل متفاوت از موازی سازی هستند.س3) ما برنامه نویسی موازی داریم. این برنامه نویسی موازی در نرم افزار باعث می شه که عمل رندر با دو سی پی یو همزمان انجام بشه یا اگه سی پی یو 8 هسته ای داشته باشیم روی هر 8 هسته انجام می شه که شاید دیگه نشه بگیم موازی چون به جای دو هسته داره روی 8 هسته انجام می شه.
این بحث که پردازنده n تا هسته ی فیزیکی داره ولی 2n تا هسته ی منطقی فراهم می کنه تحت عنوان Simultaneous MultiThreading یا SMT شناخته میشه. این ویژگی در پردازنده ی های اینتل با نام Hyper-threading معرفی شده. وقتی یه نخ برای ادامه ی کار منتظر یه سینگال مشخصه (مثلا منتظر یه پاسخ از سمت شبکه است)، هسته عملا نمی تونه کاری با اون نخ بکنه و بیکار می مونه تا سیگنال دریافت بشه. ویژگی SMT سبب میشه هنگام بیکاری هسته، یه نخ دیگه روی اون به اجرا در بیاد و عملا انگار یه هسته ی فیزیگی، می تونه دو تا کار انجام بده.س4) الان بیشتر پردازنده های اینتل مثلا 6 هسته و 6 ترد دارن ولی AMD 6 هسته و 12 ترد داره. و من در جایی خوندم که هر کدوم مزایا و معایبی دارن. بعضی جاها این دو ترد داشتن مهمه و بعضی جا ها تک ترد بودن. می خوم کمی در این رابطه توضیح بدی. اصلا اگه دو ترد داشتن خیلی خوبه چرا اینتل گیر داده به تک ترد روی بیشتر پردازنده هاش.
سه نکته درباره ی ویژگی SMT وجود داره:
- زمان بیکاری پردازنده کاهش پیدا می کنه که سبب افزایش مصرف انرژی اون میشه.
- یه هسته ی منطقی معادل یه هسته ی فیزیکی قدرت نداره. به طور میانگین SMT کارایی پردازنده رو تا 30 درصد افزایش میده ولی شاید این بهبود کارایی توجیه اقتصادی نداشته باشه (پیاده سازی SMT باعث افزایش قیمت پردازنده میشه).
- برنامه هایی با رویکرد محاسباتی مانند بازی های رایانه ای عملا خیلی درگیر چنین سیگنال هایی نیستن. این امر باعث میشه SMT روی چنین نرم افزار هایی آن چنان بهینه نباشه.
این که اینتل و AMD پردازنده های نسل جدید خودشون رو با SMT یا بدون اون عرضه کنن بستگی به سیاست های تجاری اون ها داره. اینتل یه جورایی پیشگام استفاده از SMT در پردازنده های خودش بود و بعد از اون AMD هم در معماری بولدوزر به این ویژگی گرایش پیدا کرد ولی پیاده سازی SMT در این پردازنده های این دو شرکت با هم متفاوته. تا اون جا بنده یادمه در اینتل حافظه ی نهان (Cache) سطح یک و دو در دو هسته ی منطقی با هم مشترکه که سبب بروز مشکلات امنیتی زیادی برای اینتل در این اواخر شد. اما در معماری بولدوزر AMD هر هسته ی منظقی، یه حافظه ی نهان سطح یک مخصوص به خودش رو داشت.
سیستم عامل فرمان ها رو در یک صف پردازشی قرار میده ولی در عمل صف نیست. اون موقع که من تو کوچه گل کوچیک بازی می کردم، اگر نخی نرخ پاسخ گویی پایین تری پیدا می کرد، پردازنده به شکل پویا سیکل محاسباتی بیش تر رو بهش اختصاص میداد. دیگه چه برسه به الان...س5) پردازش در سی پی یو ها به صورت صف عمل می کنه یا پشته.
به نظرم باید بگی کدوم ویژگی ها چون SSE4.2 تا اون جا که بنده می دونم روی خیلی از پردازنده های AMD پشتیبانی میشه (گرچه اینتل این ویژگی رو معرفی کرده)!س6) خیلی از ویژگی هایی که در پردازنده های اینتل وجود داره در پردازنده های AMD نیست یعنی کاربردی ندارن. (منظورم از ویژگی ها مثلا SSE4.2 هست و امثال این ها )
نکته ای که وجود داره پردازنده های x86-64 باید از یه مجموعه دستورالعمل (ISA) مسخص پشتیبانی کنن وگرنه برنامه نویس ها باید برای هر پردازنده یه کد جا بنویسن. اینتل و AMD در این دسته از پردازنده ها، ISA یکسانی دارن ولی نحوه ی پیاده سازی ISA که همون ریزمعماری هستش متفاوته. در هر نسل شرکت ها فناوری ساخت و ریزمعماری رو توسعه میدن ولی هر ریزمعماری می تونه برای دسته ای از عملیات ها بهینه باشه و برای دسته ی دیگه نباشه. در نتیجه حتی اگر دو پردازنده مختلف فرکانس یکسانی داشته باشن، سرعت اجرای یه برنامه ی مشخص برای این دو می تونه متفاوت باشه! خلاصه ی کلام: خیر، در حال حاضر چنین مقایسه ای وجود نداره.س7) اگه معماری پردازنده ها رو در نظر بگیریم چه فرقی بین نسل 3000 رایزن و نسل 9 اینتل وجود داره. عمل پردازش اینا به یک شکله یا هر کدوم به شیوه خودشون پردازش می کنن. چون در خیلی جاها من دیدم که اینتل با تعداد هسته کمتر قدرتی تقریبا برابر AMD داره( به طور کلی میگم). کلا یک مقایسه ای وجود داره که بفهمیم معماری که اینتل در پردازنده هاش داره بهتره یا AMD در آخرین نسل.
آرمین برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
Bookmarks