پردازندههای چند هستهای
پردازندههای اولیه تنها یک هسته داشتند. این بدین معنی است که هر پردازنده تنها یک واحد پردازش مرکزی داشت. برای افزایش بازده و قدرت پردازنده، تولیدکنندگان به فکر افزایش هستهها در CPU افتادند. در همین راستا پردازندههای دو هستهای تولید شدند که در واقع دو واحد پردازش مرکزی داشتند و سیستمعاملها نیز آنها را دو پردازنده مستقل میدیدند و تسکها را بصورت موازی به آنها ارسال میکردند.
برخلاف فناوری هاپیر-تردینگ در این حالت دو هستهی فیزیکی وجود دارد که همچون دو CPU مستقل عمل میکنند با این تفاوت که هر دو CPU در دل یک تراشه قرار دارند. نزدیک شدن هستهها به یکدیگر ارتباط بین آنها را سریعتر کرده و دسترسی آنها به المانهای دیگر پردازنده مانند حافظههای کش و غیره را تسریع میکند.
امروزه پردازندههای ۴ هستهای، ۸ هستهای، ۱۶ هستهای یا حتی ۲۲ هستهای نیز وجود دارد و اکثر آنها نیز از فناوری هایپر-تردینگ یا فناوری مشابه آن پشتیبانی میکنند که باعث میشود تعداد هستههای منطقی و فیزیکی آنها به ۸، ۱۶ یا ۳۲ یا ۴۴ هسته افزایش یابد. مزیت اصلی افزایش هستهها در یک پردازنده آن است که نیازی به استفاده از ۴ یا ۸ سوکت در یک مادربرد نیست و همچنین ارتباط بین هستهها به مراتب بهینهتر انجام میشود.
هستهها در پردازندههای چند هستهای میتوانند همگن یا ناهمگن باشند. در پردازندههای همگن تمام هستهها دقیقا یکسان هستند. اما در پردازندههای چند هستهای با هستههای ناهمگن، ممکن است هستههای متفاوتی داشته باشند. مثلا در معماری big.LITTLE که توسط آرم توسعه داده میشود دو جفت هسته با معماری کاملا متفاوت استفاده میشود. (خرید لپ تاپ های استوک با پردازنده های چند هسته ای)
در نظر داشته باشید که بازدهی حاصل از پردازش چند-هستهای به الگوریتمهای نرمافزاری، نحوهی خرد کردن دستورات و موازیسازی بستگی دارد.
با این حال برخی از تولیدکنندگان بازیهای ویدیویی مانند Remedy, Valve, Epic Games و یوبیسافت، از موتورهایی برای تولید بازیهای خود استفاده میکنند که از پردازش موازی پشتیبانی میکنند و البته هنوز هم بخشهایی از برنامه تنها فقط از طریق یک هسته پردازش میشوند.
اما اگر نرمافزاری به خوبی از پس موازیسازی برآیند، عملکرد آن به میزان تعداد هستهها قابل افزایش است.
چرا بسیاری از نرمافزارها از پردازش موازی پشتیبانی نمیکنند؟
اگر به بخش Task Manager سیستمعامل خود مراجعه کنید متوجه میشوید که بسیاری از نرمافزارها تنها از توان یکی از هستهها استفاده میکنند و در اکثر شرایط باقی هستهها بلامصرف هستند. اگر نرمافزارها نمیتوانند از توان پردازندهها استفاده کنند، چرا خود پردازنده یا سیستمعامل دستورات مربوط به آنها را خرد نکرده و به پردازنده ارسال نمیکنند؟ متاسفانه راهی وجود ندارد که نرمافزارها را جوری تغییر داد که بتوانند از چند هسته استفاده کنند. دلیل این موضوع نیز در آن است که تنها سازندهی نرمافزار و شخصی که کدهای مربوط به آن را نوشته میتواند دستورات مربوط به آن را جوری تغییر دهد که دستورات خرد شده و بین هستهها تقسیم شوند در غیر اینصورت اگر دستورات خرد شوند ممکن است تقدم و تاخر اجرای آنها بهم خورده و برنامه درست کار نکند. (نوت بوک کارکرده با پردازنده های چند هسته ای)
شاید برخی بر این باور باشند که اگر دو هسته بر روی یک دستور کار کنند سرعت اجرای آن افزایش یابد؛ اما چنین موضوعی امکان پذیر نیست برای درک بهتر موضوع تصور کنید که یک شخص قرار باشد با دو ماشین از یک مکان به مکان دیگر منتقل شود، شخص باید یکی از خودروها را برای انتقال خود انتخاب کند و حتی اگر هر دو هسته به سمت مقصد حرکت کنند باز هم شخص در یک زمان مشخص به مقصد میرسد و وجود دو خودرو نمیتواند وی را زودتر به نتیجه برساند.
پس در نهایت با ارائهی پردازندههای چند هستهای قدرت آنها به شدت افزایش یافت و سرعت کامپیوترها زیاد میشود. اما اگر نرمافزارها برای پردازش موازی دستوارت طراحی نشده باشند، قدرت و بازدهی پردازندهی تک هستهای با همان معماری اما هستههای بیشتر چندان متفاوت نیست. تقریبا تمام سیستمعاملها از ویندوز تا مک تا توزیعهای لینوکس همگی از پردازش موازی پشتیبانی میکنند. بسیاری از اپلیکیشنهای بزرگ مانند محصولات ادوبی، نرمافزارهای ویرایش تصاویر یا ویدیو، نرمافزارهای فشردهسازی، اپلیکیشنهای رمزگشایی یا فشرده سازی، نرمافزارهای مهم سرورها و همچنین برخی از بازیهای مجهز به موتورهای پیشرفته قادر به استفاده از توان چند هسته در پردازنده هستند. اما عموم اپلیکیشنهای موبایل و نرمافزارهای سادهی تحت سیستمعاملهای دسکتاپ قادر به موازی سازی نیستند. فرایند موازی سازی نرمافزارها بحث بسیار پیچیدهای است که پیاده سازی آن توسط عموم توسعهدهندگان نرمافزاری دشوار است و اغلب از آن صرفنظر میکنند.
- ۹۷/۰۱/۱۵