وقتی از اجرای یک نرمافزار صحبت میکنیم همیشه پردازندههای مختلفی وارد عمل میشوند. در گذشته CPU به تنهایی بار امور را به دوش میکشید و حالا کارت گرافیک هم بخش بزرگی از آن را تقبل میکند. اما رابطهی بین پردازندههای مختلف بهینه نیست و عملکرد کلی سیستم با جابجایی حجم زیادی از دادههای در حال پردازش همراه است که علاوه بر افزایش مصرف انرژی، عملکرد کلی را از حالت بهینه دور میکند. در این مقاله به بررسی HSA که یک راه حل جدی و مناسب برای این مسائل است میپردازیم.
در سالهای اخیر صنعت پردازش مثل هر زمان دیگری با چند مشکل جدی بوده و هست لذا هر کمپانی بزرگی که مایل به پیشرفت در این عرصه است، میبایست چند مشکل کلیدی را حل کند.
اولین مشکل کاهش مصرف انرژی است که در مورد هر پردازندهای و برای هر وسیلهای مصداق دارد. دومین مورد قابلیت حمل است. کاربر وسیلهی کوچکتر و کممصرفتر را ترجیح میدهد، حال ممکن است از تبلت، لپتاپ یا گوشی استفاده نماید، حتی اگر از پیسی هم استفاده کند، کیس و مانیتور جمعوجور در شلوغی دنیای امروز دلپسندتر است. کمپانیهای بزرگ هم برای خنککاری و نگهداری پایگاههای اطلاعاتی خود هزینهی زیادی صرف کرده و لذا از محصولاتی کممصرفتر استقبال میکنند.
دومین موضوع افزایش قدرت پردازشی است تا بدین وسیله تجربهی کاربری بهتری نصیب کاربر شود. کاربر به واسط کاربری اهمیت زیادی میدهد و واسطی با کاربرد سادهتر را میپسندد. به عنوان مثال استفاده از صدا و ژستهای حرکتی برای استفاده از وسایل الکترونیکی یک روش طبیعیتر و سادهتر است که تدریجاً متداول شده و در آینده تکامل مییابد. از طرفی بیشتر کاربران حجم زیادی از اطلاعات مالتیمدیا مثل فیلم و عکس را نگه داشته و استفاده و مدیریت میکنند. همهی این موارد به پردازندههای قویتر نیاز دارد.
در نهایت مسألهی نرمافزارهای عمومی و چند پلتفرمی است که میتوان روی ابزارهای مختلف از آنها استفاده کرد. توسعهدهندگان نرمافزار میبایست نرمافزارها را برای وسایل مختلف عرضه کنند و لذا با توجه به متنوعتر شدن پلتفرمها (هم سختافزار و هم سیستم عامل) اوضاع برای توسعهدهندهگان نرمافزار پیچیدهتر میشود.
با توجه به موارد فوق مشخص است که صنعت پردازش به یک روش جدید و بهینهتر نیاز دارد تا به کمک آن 4 عامل مهم و کلیدی بهینهتر شوند که عبارتند از: توان مصرفی، عملکرد، قابلیت برنامهنویسی و قابلیت حمل.
HSA چیست؟
Heterogeneous System Architecture در لغت به معنی معماری ناهمگون سیستم است. در گذشته وقتی از یک کامپیوتر صحبت میشد، تنها پردازندهی اصلی بود که مسئولیت اجرای پردازشهای عمومی و متنوع را قبول میکرد. اما حالا در یک کامپیوتر ساده و حتی یک گوشی و تبلت هم پردازندههای مختلفی وجود دارد که شاید مهمترین آنها پردازندهی گرافیکی است که در پیسیها به شکل کارت گرافیک خودنمایی میکند.
پردازندهی گرافیکی برای انجام محاسبات خاص مثل محاسبات گرافیکی به صورت موازی کاربرد دارد. پردازندههای گرافیکی به مرور زمان قدرتمندتر و عمومیتر شدند و حالا قادر به اجرای موازی محاسبات عمومی با مصرف انرژی مناسب هستند.
کارکرد جداگانهی CPU و GPU یک مشکل جدی است
امروزه نرمافزارها به سمتی حرکت کردهاند که به پردازش موازی و سنگینتری نیاز دارند و گاهاً استفاده از توان پردازش موازی پردازندهی گرافیکی برای انجام محاسبات عمومی اجتناب ناپذیر است.
اما یک مشکل جدی این است که در حال حاضر پردازندهی اصلی و گرافیکی یا به اصطلاح CPU و GPU به صورت جداگانه طراحی شده و فعالیت میکنند و در نتیجه همکاری بهینهای ندارند. هر یک از پردازندهها به فضای حافظهی خود نیاز دارد و نرمافزار میبایست مرتباً دادهها را از پردازندهی اصلی به پردازندهی گرافیکی و بالعکس کپی کند. یک مشکل دیگر نوشتن برنامههایی است که قادر به استفاده از پردازندهی گرافیکی جهت انجام محاسبات عمومی باشند. این مورد نیز یک چالش جدی است.
در حال حاضر برنامهای که در صف پردازشهای CPU قرار گرفته با استفاده از فراخوانیها (یا System Call) برای پردازندهی گرافیکی فعالیت میکند. فراخوانی از طریق درایور سختافزار صورت گرفته و لذا یک صف زمانبندی جداگانه دارد. بنابراین تأخیر زیادی در آمادهسازی دستورات پردازشی وجود داشته و نتیجه این شده که استفاده از پردازندهی گرافیکی برای انجام محاسبات موازی و عمومی به شرطی مقرون به صرفه است که پردازش بسیار سنگین باشد. در واقع در نرمافزارهای معمول از پردازندهی گرافیکی چندان استفادهای نمیشود و CPU مسئول اجرای بیشتر فرآیندهاست. مشکل دیگر این است که برنامهای که روی GPU اجرا شده خواهان کنترل مستقیم آیتمهای کاری خود است، حال آیتمها ممکن است به پردازندهی اصلی مربوط شوند و یا خود پردازندهی گرافیکی از آنها استفاده کند. امروزه این نحوهی کار نیز غیر ممکن است.
HSA با ایجاد طراحی بهینهی پردازنده مشکلات فوق را حل میکند
برای اینکه تمام قدرت پردازشی یک پردازندهی موازی مورد استفاده قرار بگیرد، طراحان کامپیوتر باید طرز فکر خود را تغییر دهند. آنها میبایست سیستمهای کامپیوتری را از نو طراحی کنند تا المانهای مختلف پردازشی در قالب یک پردازندهی مرکزی تکامل یافته در کنار هم مشغول کار شوند. از طرفی باید مسیر نرمافزارنویسی سادهای در اختیار توسعهدهندگان نرمافزار قرار دهند تا برای تهیهی نرمافزارهایی که از پردازندهها به شکل بهینه استفاده میکنند، به تغییرات اساسی کدها نیازی نباشد. هدف اصلی طراحی جدید HSA همین دو مورد است.
با استفاده از HSA از تمام مزایا و توانمندیهای عناصر پردازشی قابل برنامهریزی که در کنار هم به صورت یکپارچه فعالیت میکنند، استفاده میشود. نرمافزارها قادر به ایجاد ساختارهای داده در یک بخش از فضای حافظه یکپارچه هستند و میتوانند هر آیتم کاری را برای سختافزاری که مناسبشان است، ایجاد کنند. اشتراک داده بین پردازندهها به سادگی ارسال یک Pointer یا اشارهگر میشود. چند فعالیت پردازشی در کنار هم و به شکل منسجم روی یک ناحیه از حافظه قابل اجراست و لذا از اعمال حافظهای مورد نیاز برای همگامسازی حافظه استفاده میشود. درست چیزی شبیه به آنچه امروز در پردازندههای چند هستهای شاهد هستیم.
برنامهی AMD برای HSA
تیم HSA در کمپانی AMD به بررسی کارایی الگوریتم تشخیص چهرهی Haar Face Detect پرداخته است، الگوریتمی چند مرحلهای برای بررسی یک ویدیو و تشخیص چهرههای موجود. این تیم مقایسهای بین یک CPU و GPU که با استفاده از OpenCL یا زبان محاسباتی متنباز به اجرای این فرآیند پرداختهاند و روش HSA انجام داده است. در روش HSA دادهها بین دو پردازندهی مورد بحث بدون کپی کردن و استفادهی سنگین از حافظهی کش به اشتراک گذاشته میشود. لذا همانطور که قبلاً گفتیم، هر یک از پردازندهها برای انجام کار متناسب با توان خود انتخاب شده و دادهی موردنیاز در اختیارشان قرار میگیرد. نتیجهی مقایسه این بوده که سرعت کار 2.3 برابر شده و در عین حال توان مصرفی 2.4 برابر کاهش یافته است. سختافزار مورد استفاده در این آزمایش به صورت زیر است:
• رم 4 گیگابایت، ویندوز 7 نسخهی 64 بیتی
• پردازندهی اصلی با پردازندهی گرافیکی مجتمع A10 4600M، پردازندهی گرافیکی HD 7660G با پشتیبانی از OpenCL 1.1
• پردازندهی اصلی 4 هستهای با سرعت کلاک 2.3 گیگاهرتز که در حالت توربو به 3.2 گیگاهرتز افزایش مییابد، سرعت کلاک پردازندهی گرافیکی نیز 685 مگاهرتز است
این حجم کارایی با استفاده از یک پردازندهی چند هستهای یا یک پردازندهی گرافیکی و حتی ترکیبی از این دو که با مدل درایوری امروزی کار میکنند، حاصل نمیشود. در ضمن در این آزمایش از افزونههای سادهای برای ++C استفاده شده و هیچ مدل جدید برنامهنویسی به کار گرفته نشده است. لذا مشخص است که کارایی HSA به مراتب بیشتر از روشهای امروزی است و جای کار بسیار دارد.
HSA چطور وارد صنعت پردازش میشود
برای عمومی شدن و استفادهی گسترده از HSA نمیتوان روی فعالیتهای یک کمپانی خاص حساب کرد، هدف نهایی توسعهدهندگان نرمافزار این عبارت است: "یک بار بنویس، همه جا اجرا کن"، بنابراین باید نصب برنامه و استفاده از آن روی انواع پلتفرم و سختافزار ممکن باشد. بنابراین بنیاد HSA یا HSAF ایجاد شد تا به عنوان یک استاندارد باز در صنعت پردازش، کمپانیهای مختلف را گرد هم جمع کرده و هماهنگ کند.
در حال حاضر چندین کمپانی بزرگ و مشهور مثل AMD، آرم، ایمجینیشن تکنالوجیز، میدیاتک، تگزاس اینسترومنت، سامسونگ و کوآلکام هستند. تدریجاً سایر کمپانیهای بزرگ نیز به این جمع اضافه میشوند.
بنیاد HSA به طراحان سیستم کمک میکند تا به شکلی از عناصر پردازنده مثل CPU و GPU استفاده کنند که ناکارآمدی اشتراک داده و ارسال آیتمهای کاری بین این پردازندهها برطرف شود. از طرفی یک لایهی واسط در سطح پایین به شکل استاندارد به برنامهنویسی سادهتر برای معماری HSA کمک میکند که نام آن زبان میانی HSA یا HSAIL معرفی که برای استفادهی نرمافزاری از سختافزارهای مختلف کاربرد دارد. HSAIL یک هدف مشترک برای نرمافزارها و ابزارهای سطح پایین ایجاد میکند و به قدری منعطف و عمیق است که به هر سازندهی سختافزاری، اجازهی هماهنگ شدن با سختافزار خاص خود را میدهد. بنابراین زحمت هماهنگی نرمافزار با یک سختافزار خاص از دوش برنامهنویس برداشته میشود و در واقع یک کد روی سیستمهای مختلفی که دارای پردازندهی اصلی و گرافیکی مختلف هستند، قابل اجرا خواهد بود.
HSA از دید نرمافزار پنهان است و برنامهنویسی را ساده میکند
یکی از موفقیتهای بزرگ HSA ساده کردن فرآیند آمادهسازی و اجرای نرمافزار روی سختافزارهای مختلف یا به عبارت دیگر روی معماری HSA است. در گذشته برای هماهنگی و اجرای یک نرمافزار روی یک سختافزار جدید باید نرمافزار تغییر میکرد و این روش چندان مناسب و راحت نبود. برای عمومی شدن یک نرمافزار میبایست مشارکت همهی توسعهدهندگان و سازندگان سختافزار ساده و امکانپذیر باشد.
روش HSA ساده است، سختافزار را در اختیار برنامهنویس قرار میدهد. در واقع HSA شامل سختافزار، واسط و زبان میانی مشترک و در نهایت اجزای زمان اجراست که تمام کارهای لازم را انجام میدهد. HSA هماهنگی حافظه را انجام داده و صفوف کاری را مدیریت میکند و پیچیدگیها را از دید توسعهدهندهی نرمافزار پنهان مینماید.
به کمک HSA، زبان برنامهنویسی و کتابخانههای آن، ابزاری ساده برای میلیونها برنامهنویس فراهم میشود تا از کدهای خود برای سختافزارهای مختلف و به شکل بهینهتری استفاده نمایند. کمپانی AMD به عنوان یکی از پرچمداران این عرصه، ابزارهای برنامهنویسی بهینهشدهی HSA را برای معمولترین زبانهای ناهمگون یعنی OpenCL و C++ AMP ارایه کرده است. AMD در ادامهکار با همکاری سایر اعضای بنیاد HSA در گسترش ابزارهای نرمافزارنویسی کوشش میکند و سایر زبانها و کتابخانهها را پوشش میدهد.
به نظر شما HSA در آینده تا چه حد موفق خواهد بود؟ آیا در کنسولهای بازی نسل جدید که از پردازندههای AMD استفاده میکنند و نیز کامپیوترهای شخصی امروزی میتوان موفقیت HSA را تجربه کرد و یا میبایست چند سالی صبر کنیم؟