پردازنده ۲ هستهای، ۴ هستهای، ۶ هستهای یا حتی پردازنده با هستههای بیشتر در بازار یافت میشوند. در بسیاری از کامپیوترها و حتی ابزارهای موبایل، تعداد هستههای بیشتر، به یک عامل مهم در فروشرسانی محصولات تبدیل شده است و کاربران ترجیح میدهند تا دستگاهی را تهیه کنند که به پردازنده با هستههای بیشتر مجهز شده باشد. در نگاه کلی، تعداد هستههای بیشتر به معنی قدرت پردازش بالاتر است. هرچند این عبارت همیشه صادق نیست، اما در معماری و طراحی یکسان، هر چه تعداد هستهها بیشتر شدن یابد، قدرت پردازشِ پردازنده بیشتر میشود.
پردازندهی مرکزی یا CPU وظیفهی محاسبهی دستورات را برعهده دارد. هر CPU میتواند بصورت همزمان یک تسک یا کار را پردازش کند. در قدیم کامپیوترهایی که نیاز به قدرت پردازش بالاتر داشتند از چند CPU بر روی یک مادربرد بهره میبرند. در این حالت، مصرف انرژی بیشتر شدن مییافت و ارتباط بین CPUها با تاخیر قابل ملاحظهای انجام میشد. از سوی دیگر برای آنکه پردازندههای مختلف بتوانند به حافظهی رم و دیگر اجزاء سختافزاری بصورت مشترک دسترسی داشته باشند، به قطعات بیشتر از آنچه در مادربردهای معمولی استفاده میشد، نیاز خواهیم داشت که خود باعث بیشتر شدن هزینه مادربردها میشد.
در همین راستا تولیدکنندگان پردازنده به فکر ساخت CPUهایی افتادند که به چند هسته مجهز باشند تا هر کدام بتوانند نقش یک CPU مستقل را ایفا کرده و یک تسک را پردازش کنند. به عنوان مثال تصور کنید که قرار است عملیات ریاضی زیر توسط یک پردازندهی تک هسته محاسبه شود:
2x20x60x187
در این حالت پردازنده ابتدا ۲ را در ۲۰ ضرب کرده و سپس حاصل را در ۶۰ ضرب کرده و خروجی را در ۱۸۷ ضرب میکند.
2x20
40x60
2400x187
اما یک پردازندهی دو هستهای میتواند دو عملیات اول را همزمان پردازش کرده و سپس عملیات سوم را پردازش کند. این کار که Parallelization یا پردازش موازی نام گذاری شده، باعث میشود تا سرعت اجرای دستورات بیشتر شود.
حالا در نظر بگیرید که برنامههای پیچیده بتوانند دستورات بسیار زیاد خود را بین چند هسته تقسیم کرده و همزمان به پردازش آنها بپردازد. نرمافزارهایی مانند ویراستارهای ویدیو، فشردهسازهای فایل یا حتی آنهایی که عملیات رمزگشایی را انجام میدهند جزو مواردی هستند که استفاده از پردازش موازی در سرعت اجرای دستورات آنها بسیار تاثیر گذار است.
حال این سوال مطرح میشود که اگر پردازش موازی باعث رشد سرعت میشود چرا CPUها مثل GPUها از چندین هسته بهره نمیبرند؟ GPUها نیز وظیفهی پردازش امور را برعهده دارد اما این پردازندهها از چندین هسته بهره میبرند. به عنوان مثال کارت گرافیک قدرتمند GeForce 1080 انویدیا از ۲۵۶۰ هسته بهره میبرد این در حالی است که CPU کامپیوترهای دسکتاپ حداکثر ۱۰ هسته دارند.
بیشتر بخوانید:
هرچند GPU تعداد هستههای به مراتب بیشتری نسبت به CPUها دارند، اما این هستهها، بسیار ضعیفتر بوده و با فرکانس پایینتری کار میکنند. پاسخ کوتاه به این پرسش این است کهGPU یا پردازنده گرافیکی همانطور که از نامش پیدا است برای پردازش امور مرتبط با گرافیک مانند رندر نگارهها بازیها یا نرمافزارهای سه بعدی یا ادیت ویدیو بکار میروند. اما در عوض CPU قادر به انجام پردازشهای مختلف برای امور گوناگون است. اموری که برای پردازش به GPU سپرده میشوند، عموما توانایی خرد کردن آنها و پردازش موازی گستردهشان وجود دارد. حتی در بازیها نیز بعضی از امور مانند هوش مصنوعی توسط CPU پردازش میشود چرا که هستههای ضعیف GPU قادر به پردازش تسکهای بزرگ و پیچیدهی مربوط به هوش مصنوعی نیستند و از طرفی خرد کردن این دستورات در چندین تسک کوچک نیز کار دشواری است.
پس پردازندههای گرافیکی برای انجام امور مرتبط با تصویر و گرافیک طراحی شدهاند و این دست از امور به شکل سادهتری قادر به خرد شدن و پردازش موازی بین هستههای زیاد هستند اما در عوض CPU برای پردازش طیف وسیعتری از امور طراحی شده است و در عوض دستورات پردازش شده توسط CPU سختتر خرد میشوند. برای درک بهتر این مسئله ویدیو کوتاه انویدیا در این باره را تماشا کنید:
این فناوری که توسط اینتل توسعه داده شده توانایی اجرای تسکهای همزمان بیشتر در پردازنده را میسر میکند. هایپر-تردینگ اولین بار در سال ۲۰۰۲ و به همراه Pentium 4 HT معرفی شد. پنتیوم ۴ تنها یک هسته داشت و قادر به اجرای همزمان یک دستور بود؛ اما به کمک فناوری هایپر-تردینگ در ویرایشی HT این پردازنده، قابلیت اجرای همزمان دو دستور فراهم شد.
در فناوری هایپر-تردینگ دو یا چند هستهی منطقی به ازاء هر هستهی فیزیکی ایجاد میشود و رفتار سیستمعامل با این هستههای منطقی درست مثل هستههای فیزیکی است. به این ترتیب تسکها بصورت موازی پردازش شده و پردازنده با توان بیشتر ابتدا به پردازش امور میکند. در واقع پردازنده، به نوعی سیستمعامل را فریب و به کمک مکانیزم خاصی پردازش موازی را در هر هسته شکل میدهد. در این حالت منابع پردازنده به دو بخش تقسیم میشوند. اگر یکی از هستههای مجازی پردازش تسک مورد نظر خود را به پایان کار برساند و به حالت انتظار برود، منابع در دسترس آن به پردازش با سرعتتر تسک موازی آن به هستهی مجازی دیگر قرض داده میشود. در اکثر شرایط فناوری هایپر-تردینگ به خوبی شرایطی که پردازنده دو برابر هسته داشته باشد کار میکند.
پردازندههای تازه در روز جاریی نه تنها از چند هسته بهره میبرند بلکه فناوری Hyper-Threading را نیز دارند. در این حالت مثلا پردازندهی دو هستهای با فناوری هایپر-تردینگ همچون پردازندهی ۴ هستهای در سیستمعامل شناخته میشود.
پردازندههای اولیه تنها یک هسته داشتند. این بدین معنی است که هر پردازنده تنها یک واحد پردازش مرکزی داشت. برای صعود بازده و قدرت پردازنده، تولیدکنندگان به فکر صعود هستهها در CPU افتادند. در همین راستا پردازندههای دو هستهای تولید شدند که در واقع دو واحد پردازش مرکزی داشتند و سیستمعاملها نیز آنها را دو پردازنده مستقل میدیدند و تسکها را بصورت موازی به آنها ارسال میکردند.
برخلاف فناوری هاپیر-تردینگ در این حالت دو هستهی فیزیکی وجود دارد که همچون دو CPU مستقل عمل میکنند با این تفاوت که هر دو CPU در دل یک تراشه قرار دارند. نزدیک شدن هستهها به یکدیگر ارتباط بین آنها را با سرعتتر کرده و دسترسی آنها به المانهای دیگر پردازنده مانند حافظههای کش و غیره را تبا سرعت میکند.
امروزه پردازندههای ۴ هستهای، ۸ هستهای، ۱۶ هستهای یا حتی ۲۲ هستهای نیز وجود دارد و اکثر آنها نیز از فناوری هایپر-تردینگ یا فناوری مشابه آن پشتیبانی میکنند که باعث میشود تعداد هستههای منطقی و فیزیکی آنها به ۸، ۱۶ یا ۳۲ یا ۴۴ هسته صعود یابد. مزیت اصلی رشد هستهها در یک پردازنده آن است که نیازی به استفاده از ۴ یا ۸ سوکت در یک مادربرد نیست و از سوی دیگر ارتباط بین هستهها به مراتب بهینهتر انجام میشود.
تولیدکنندگان عموما هستههای پردازنده را در یک IC مجتمع میکنند و از این چیپ به عنوان مالتیپراسسور یا CMP یاد میشود. پردازندهی چند هستهای میتواند بسته به معماری آن به شکل متفاوتی به منابع پردازنده دسترسی داشته باشند. به عنوان مثال در بعضی از معماریها هر کدام از هستهها حافظهی کش خود را دارند و برخی نیز از حافظهی کش مشترک بهره میبرند. برخی از آنها روشهای متفاوتی برای ارتباط بین هستهها و ارسال پیام به یکدیگر دارند و نحوهی دسترسی آنها به حافظهی رم نیز متفاوت است. شبکه با توپولوژیهای متفاوتی نیز برای ارتباط بین هستهها مانند باس، رینگ و غیره به کار گرفته میشود.
بیشتر بخوانید
هستهها در پردازندههای چند هستهای میتوانند همگن یا ناهمگن باشند. در پردازندههای همگن تمام هستهها دقیقا یکسان هستند. اما در پردازندههای چند هستهای با هستههای ناهمگن، ممکن است هستههای متفاوتی داشته باشند. مثلا در معماری big.LITTLE که توسط آرم توسعه داده میشود دو جفت هسته با معماری دقیقا متفاوت استفاده میشود.
در نظر داشته باشید که بازدهی حاصل از پردازش چند-هستهای به الگوریتمهای نرمافزاری، نحوهی خرد کردن دستورات و موازیسازی بستگی دارد. به طور مشخص بسیاری از اپلیکیشنهای فعلی قادر به موازی سازی دستورات نیستند و نمیتوانند آنها را به دستورات کوچکتر خرد کرده و از تمام هستهها بهره ببرند. به عنوان مثال برخی از بازیها نمیتوانند بخشهایی که توسط CPU پردازش میشود را بصورت موازی پردازش کنند. دلیل این مسئله نیز آن است که برخی از دستورات باید پشت سر هم و پس از پردازش بخش اول انجام شوند و در ادامه بعضی نیز در شرایط خاصی شکل میگیرند مانند پاسخی که هوش مصنوعی در اثر انجام کار غیر منتظره از سمت گیمر باید انجام دهد.
با این حال برخی از تولیدکنندگان بازیهای ویدیویی مانند Remedy, Valve, Epic Games و یوبیسافت، از موتورهایی برای تولید بازیهای خود استفاده میکنند که از پردازش موازی پشتیبانی میکنند و البته هنوز هم بخشهایی از برنامه تنها فقط از طریق یک هسته پردازش میشوند.
اما اگر نرمافزاری به خوبی از پس موازیسازی برآیند، نحوه عملکرد آن به میزان تعداد هستهها قابل صعود است.
اگر به بخش Task Manager سیستمعامل خود مراجعه کنید متوجه میشوید که بسیاری از نرمافزارها تنها از توان یکی از هستهها استفاده میکنند و در اکثر شرایط باقی هستهها بلامصرف هستند. اگر نرمافزارها نمیتوانند از توان پردازندهها استفاده کنند، چرا خود پردازنده یا سیستمعامل دستورات مربوط به آنها را خرد نکرده و به پردازنده ارسال نمیکنند؟ متاسفانه راهی وجود ندارد که نرمافزارها را جوری تغییر داد که بتوانند از چند هسته استفاده کنند. دلیل این مبحث نیز در آن است که تنها سازندهی نرمافزار و شخصی که کدهای مربوط به آن را نوشته میتواند دستورات مربوط به آن را جوری تغییر دهد که دستورات خرد شده و بین هستهها تقسیم شوند در غیر اینصورت اگر دستورات خرد شوند ممکن است تقدم و تاخر اجرای آنها بهم خورده و برنامه درست کار نکند.
شاید برخی بر این باور باشند که اگر دو هسته بر روی یک دستور کار کنند سرعت اجرای آن رشد یابد؛ اما چنین مسئلهی توانایی پذیر نیست برای درک بهتر محور تصور کنید که یک شخص قرار باشد با دو ماشین از یک مکان به مکان دیگر منتقل شود، شخص باید یکی از خودروها را برای انتقال خود انتخاب کند و حتی اگر هر دو هسته به سمت مقصد حرکت کنند باز هم شخص در یک زمان مشخص به مقصد میرسد و وجود دو خودرو نمیتواند وی را زودتر به خروجی برساند.
پس در نهایت با ارائهی پردازندههای چند هستهای قدرت آنها به شدت صعود یافت و سرعت کامپیوترها زیاد میشود. اما اگر نرمافزارها برای پردازش موازی دستوارت طراحی نشده باشند، قدرت و بازدهی پردازندهی تک هستهای با همان معماری اما هستههای بیشتر چندان متفاوت نیست. تقریبا تمام سیستمعاملها از ویندوز تا مک تا توزیعهای لینوکس همگی از پردازش موازی پشتیبانی میکنند. بسیاری از اپلیکیشنهای بزرگ مانند محصولات ادوبی، نرمافزارهای ویرایش تصویرها یا ویدیو، نرمافزارهای فشردهسازی، اپلیکیشنهای رمزگشایی یا فشرده سازی، نرمافزارهای مهم سرورها و از سوی دیگر برخی از بازیهای مجهز به موتورهای پیشرفته قادر به استفاده از توان چند هسته در پردازنده هستند. اما عموم اپلیکیشنهای موبایل و نرمافزارهای سادهی تحت سیستمعاملهای دسکتاپ قادر به موازی سازی نیستند. فرایند موازی سازی نرمافزارها بحث بسیار پیچیدهای است که پیاده سازی آن توسط عموم توسعهدهندگان نرمافزاری دشوار است و اغلب از آن صرفنظر میکنند.
برچسب:
نویسنده: نرگس عابدی