عصر پردازش موازی

در


در سال های اخیر، اقدامات زیادی در جهت انتقال گسترده صنعت محاسبات به سمت محاسبات موازی انجام گرفته است. تقریباً همه کامپیوترهای کاربری در سال 2010 به سمت پردازنده های مرکزی چند هسته ای خواهند رفت. از زمان معرفی دستگاه های دو هسته ای نوت بوک ارزان قیمت تا کامپیوترهای ایستگاه کاری (workstation) 8 و 16 هسته ای، محاسبات موازی دیگر به سوپر کامپیوترها و mainframe ها محول نمی شوند. به علاوه، دستگاههای الکترونیکی مثل تلفن های همراه وپخش کننده های قابل حمل موسیقی شروع به وارد کردن قابلیت های محاسبات موازی برای فراهم کردن کاربردهایی بیشتر از کاربردهای دستگاههای نسل های قبلی خود نموده اند.
تولید کننده های نرم افزار بیش از پیش باید خود را با تنوع پایگاهها و فناوری های محاسباتی وفق دهند تا بتواند تجزیه های جدید و غنی برای کاربران خود که هرروز پیچیده تر می شود فراهم کنند. فرمان های سریع (command prompt) از دور خارج شده اند؛ رابط های کاربری گرافیکی چند رشته ای وارد کار شده اند. تلفن های سلولی که فقط می توانند تماس تلفنی برقرار کنند از رده خارج شده اند و تلفن هایی وارد شده است که می توانند همزمان موسیقی پخش کنند، در وب جستجو کنند، و خدمات GPS بدهند.

واحدهای پردازش مرکزی

به مدت 30 سال، یکی از مهم ترین روش ها برای بهبود عملکرد دستگاههای محاسباتی کاربری افزایش سرعت عمل ساعت پردازشگر بود. واحد پردازش مرکزی (CPU) که اولین بار در اوایل دهه 1980 همزمان با اولین کامپیوترهای شخصی معرفی شد، با زمان سنج های داخلی که با سرعت حدود 1MHZ کار می کنند؛ اجرا می شوند. حدود 30 سال بعد، بیشتر پردازشگرهای دسکتاپ دارای سرعت زمان سنج بین 1aHZ و 4GHZ می باشند، یعنی تقریبا 1000 برابر زمان سنج اولین کامپیوتر شخصی. اگرچه افزایش سرعت زمان سنج CPU تنها روش بهبود عملکرد نیست، اما همیشه وسیله قابل اعتمادی برای افزایش عملکرد بوده است.
با این وجود، در سال های اخیر تولید کننده ها مجبور شده اند به دنبال راه های جایگزین برای این منبع قدیمی افزایش قدرت محاسباتی باشند. به خاطر محدودیت های اساسی مختلف در ساخت مدارهای مجتمع، تکیه بر افزایش سرعت زمان سنج ها می پردازند به عنوان ابزاری برای به دست آوردن قدرت بیشتر از معماری های موجود دیگر عملی نیست. به علت محدودیت های برق و حرارت و همچنین محدودیت فزاینده در اندازه ی ترانزیستور، توجه محققین و تولید کننده ها به سمتی دیگر معطوف شده اند.
خارج از دنیای کامپیوترهای کاربری، ابر کامپیوترها دهها سال است که به شیوه هایی مشابه عملکرد خود را افزایش می دهد. عملکرد پردازشگر به کار رفته در یک ابرکامپیوتر افزایش خوبی داشته است، مثل پیشرفت هایی که در CPU های کامپیوترهای شخصی حاصل شده است. با این وجود، علاوه بر پیشرفت های قابل توجه در عملکرد یک پردازنده ی یکتا، سازنده های ابرکامپیوترها نیز با افزایش یکنواخت تعداد پردازنده ها به افزایش عملکرد قابل توجهی دست یافته اند. چندان عجیب نیست که سریع ترین ابرکامپیوترها دهها یا صدها هسته ی پردازنده دارند که پشت سرهم کار می کنند.
وقتی به دنبال ایجاد قدرت پردازش بیشتر برای کامپیوترهای شخصی هستیم، در پیشرفت ابر کامپیوترها سؤال بسیار خوبی مطرح می شود، به جای اینکه صرفا به دنبال افزایش عملکرد یک هسته ی پردازش یکتا باشیم، چرا نباید بیشتر از یک هسته در یک کامپیوتر شخصی داشته باشیم؟ به این ترتیب، افزایش عملکرد کامپیوترهای شخصی بدون نیاز به افزایش سرعت زمان سنج پردازشگر ادامه می یابد. در سال 2005، سازنده های بزرگ CPU که با بازار رقابتی و گزینه های کم مواجه بودند، شروع به ارائه پردازنده هایی، دو هسته ی محاسباتی به جای یک هسته نمودند. طی سالهای بعدآن ها این پیشرفت را با ارائه ی واحدهای پردازش مرکزی سه - چهار- شش و هشت هسته ای ادامه دادند. این ابتکار که گاهی تحول چند هسته ای نیز خوانده می شود، نشانه تغییری عظیم در تکامل بازار کامپیوترهای کاربری است.
امروزه خریدن یک کامپیوتر رومیزی که فقط یک هسته پردازشگر دارد، امری نسبتاً چالش برانگیز است. حتی پردازنده های مرکزی ارزان قیمت و کم مصرف نیز با دو یا چند هسته ارائه می شوند. شرکت های پیشرو در ساخت CPU برنامه های خود را برای ساخت CPU های 12 و 16 هسته ای اعلام کرده اند، که همین امر تاکید دیگری است بر اینکه عصر محاسبات موازی فرا رسیده است.

ظهور محاسبات GPU

در مقایسه با سیستم قدیمی پردازش داده در پردازشگر مرکزی، انجام محاسبات چند منظوره در یک واحد پردازنده گرافیک (GPU) مفهوم جدیدی به شمار می رود. در حقیقت خود GPU در مقایسه با عرصه ی بزرگ محاسبات کامپیوتری مفهومی نسبتاً جدید است. با این حال، ایده محاسبه در پردازنده های گرافیکی آنقدر که شما فکر می کنید جدید نیست.

تاریخچه مختصری از GPU

دیدیم که پردازنده های مرکزی هم از لحاظ تعداد هسته و هم از لحاظ سرعت زمان سنج ارتقاء یافته اند. در همین حین، وضعیت پردازش گرافیک دچار تحول عظیمی قرار گرفت. در اواخر دهه 1980 و اوایل دهه 1990، رشد محبوبیت و رواج سیستم عامل هایی که به صورت گرافیکی اجرا می شدند مثل مایکروسافت ویندوز به ایجاد بازاری برای نوع جدید پردازشگر کمک کرد. در اوایل دهه 1990 کاربران شروع به خرید شتاب دهنده های نمایش دو بعدی برای کامپیوترهای شخصی خود نمودند این شتاب دهنده های نمایشی امکان عملیات bitmap به کمک سخت افزار برای تسهیل نمایش و کاربرد پذیری سیستم عامل های گرافیکی را فراهم می کنند. تقریباً در همین زمان، در دنیای محاسبات حرفه ای، شرکتی به نام سیلیکون گرافیک دهه 1980 را صرف رواج دادن استفاده از گرافیک سه بعدی در بازارهای مختلف از جمله برنامه های دولتی و رفاهی و تصویرسازی های فنی و علمی و همچنین فراهم کردن ابزار ایجاد جلوه های ویژه ی سینمایی نمود. سیلیکون گرافیک در سال 1992 با ارائه کتابخانه ی openGL رابط کاربری برنامه نویسی را برای سخت افزار خود نیز گشود. قصد سیلیکون گرافیک این بود که openGL به عنوان یک روش استاندارد و مستقل از پایگاه برای نگارش برنامه های گرافیکی 3 بعدی مورد استفاده قرار می گیرد. در این مورد نیز مثل CPU های پردازش موازی قبل از اینکه این فناوری وارد برنامه های کاربری شوند مستلزم زمان بوند.
تا اواسط دهه ی 1990، تقاضا برای برنامه های کاربری که گرافیک سه بعدی را به کار می گرفتند به سرعت افزایش یافت، و فضایی برای دو پیشرفت قابل توجه ایجاد شد. اول، انتشار بازی های همه جانبه شخص اول مثل Doom، Duke Nakem 3D و Quake منجر به آغاز تلاش برای ایجاد محیط های سه بعدی واقعی بیشتر برای بازی های خانگی شد. اگرچه گرافیک سه بعدی به تدریج به همه بازی های کامپیوتری راه می یافت. اما رواج سبک بازی های تیر اندازی اول شخص - اتخاذ گرافیک 3D در کامپیوترهای شخصی را تا حد زیادی تسریع نمود. در همین حین شرکت هایی نظیر NVIDIA، ATI Technologies و 3dfx interactive شروع به انتشار شتاب دهنده های گرافیک با قیمت هایی مناسب برای جذب توجه گسترده ی مردم نمودند. این پیشرفت ها گرافیک سه بعدی را به عنوان فناوری که در سال های پیش رو تصویری برجسته به شمار می رفت مطرح شود.
انتشار NVIDIA Geforce 256 پیشرفت دیگری در قابلیت سخت افزار گرافیک کاربری بود. برای اولین بار، عملیات تبدیل و روشنایی مستقیماً در پردازنده ی گرافیکی انجام می شد، و بدین ترتیب پتانسیل تولید برنامه هایی که از لحاظ بصری حتی جالب تر نیز بودند افزایش یافت. از آنجایی که تبدیل و روشنایی دو بخش تفکیک ناپذیر از سیستم گرافیک OpenGL بودند، Geforce256 نقطه شروع یک پیشرفت طبیعی بود که در آن قسمت بیشتری از پایپ لاین گرافیک مستقیما در پردازشگر گرافیک اجرا می شد.
از نقطه نظر محاسبات موازی، انتشار سری Geforce3 در سال 2001 توسط NVIDIA مهم ترین دستاورد فناوری GPU به شمار می رود. سری Geforce3 اولین تراشه صنعت کامپیوتر برای اجرای استاندارد DirextX 8/3 مایکروسافت بود که در آن زمان استاندارد جدیدی بود. این استاندارد ایجاب می کرد که سخت افزار سازگار هم شامل مرحله رأس قابل برنامه نویسی باشد و هم شامل مرحله ی سایه گذاری پیکسل باشد. برای اولین بار، تولید کننده ها تا حدی روی عملیاتی که روی GPU های آنها انجام می شد، تسلط داشتند.

اولین عملیات GPU

انتشار GPU هایی که پایپ لاین های قابل برنامه نویسی را پردازش می کردند توجه محققان زیادی را به امکان استفاده از سخت افزار گرافیک برای چیزی بیشتر از تبدیل مبتنی بر OpenGL یا Directx جلب کردند.
رویکرد عمومی در اولین روزهای معرفی GPU به نحو غیر معمولی پیچیده بود. زیرا استانداردهای API گرافیک مثل OpenGL و Directx همچنان تنها راه تعامل با GPU بودند، و هرگونه تلاش برای اجرای محاسبات دلخواه در یک GPU هنوز با محدودیت های برنامه نویسی در API گرافیک مواجه می شد. به همین دلیل محققین تلاش کردند کاری کنند که مشکلات آنها برای GPU تبدیل سنتی به نظر برسند، و از این طریق به کاوش محاسبات چند منظوره از طریق API های گرافیک پرداختند.
GPU های اوایل دهه ی 2000 برای ایجاد یک رنگ برای هر پیکسل روی صفحه نمایش با استفاده از واحدهای منطقی قابل برنامه ریزی به نام رنگ زن پیکسل (Pixel shader) طراحی شده بودند. به طور کلی یک رنگ زن پیکسل از موقعیت (x,y) خود روی صفحه نمایش و برخی اطلاعات بیشتر برای ترکیب ورودی های مختلف در پردازش یک رنگ نهایی استفاده می کند. این اطلاعات اضافه می توانند رنگ های ورودی، مختصات الگو یا ویژگی های دیگری که هنگام اجرای رنگ زدن به آن منتقل می شوند. اما از آنجایی که محاسباتی که بر روی رنگ های ورودی و بافت ها اجرا می شوند به طور کامل تحت کنترل برنامه نویس بود، محققان مشاهده کردند که این رنگ های ورودی در حقیقت می توانند هر نوع داده ای باشند.
بنابراین اگر ورودی ها داده های عددی بودند که چیزی به جز رنگ را نشان می دادند، آنگاه برنامه نویسان می توانستند رنگ زن های پیکسل را برای اجرای محاسبات مطلق روی این داده ها برنامه نویسی کنند. نتایج به صورت رنگ پیکسل نهایی به GPU، تحویل داده می شد، هرچند که این رنگ ها می توانستند نتیجه ی هرگونه محاسباتی باشند که برنامه نویس برای اجرا روی ورودی های خود به GPU آموخته است. محققان می توانستند این داده ها را بخوانند و GPU هرگز نمی توانست عاقل تر از آنها باشد. به طور خلاصه، محققان کاری می کردند که کارهای غیر تبدیلی به گونه ای جلوه کند که گویا یک تبدیل معمولی است و با این کار GPU را فریب می دادند. این فریب کاری بسیار هوشمندانه بود اما در عین حال بسیار پیچیده است. با توجه به توان محاسباتی بالای GPU ها، نتایج اولیه این آزمایش ها نوید بخش آینده ای روشن برای محاسبات GPU بود. با این وجود با شکل دادن مدل برنامه نویسی هنوز برای توسعه انبوه محدودیت هایی داشت. محدودیت های شدیدی در منابع وجود داشت، چرا که برنامه ها تنها می توانستند از تعداد محدودی رنگ های ورودی و واحدهای بافتی داده دریافت نمایند. محدودیت هایی جدی نسبت به چگونگی و محلی در حافظه که برنامه نویس می توانست نتایج را بنویسد وجود داشت، بنابراین الگوریتم هایی که مستلزم توانایی نوشتن در مکان های قرار دادی (پراکنده)هستند نمی توانستند در GPU ها اجرا شوند. پیش بینی اینکه GPU شما چگونه داده های ممیز شناور را کنترل می کند، تقریباً غیر ممکن بود، بنابراین بیشتر محاسبات علمی قادر به استفاده از GPU نبودند. در نهایت، وقتی برنامه ناگزیر نتایج نادرست را محاسبه می کرد، نمی توانست به پایان برسد، یا دستگاه را متوقف می کرد، هیچ روش خوب و معقولی برای اشکال زدایی همه کدهایی در GPU در حال اجرا بودند وجود نداشت.
گویی این محدودیت ها به اندازه کافی شدید نبودند، هرکسی که هنوز می خواست برای انجام محاسبات چند منظوره از GPU استفاده کند مجبور بود OpenGL یا Directx را بیاموزد چرا که این استانداردها هنوز تنها ابزاری بودند که فرد می توانست از طریق آنها با GPU تعامل کند. این امر نه تنها به معنای ذخیره داده ها در بافت های گرافیکی و اجرای محاسبات با فراخوانی توابع OpenGL و Directx می باشد، بلکه به معنی نداشتن خود محاسبات در گرافیک های خاص نیز می باشد، تنها زبان های برنامه نویسی که زبان های رنگ آمیز (رنگ زن) نامیده می شوند. ثابت می شود که اگر محققین مجبور باشند قبل از تلاش به کنترل قدرت محاسباتی GPU با محدودیت های شدید برنامه نویسی و منابع کنار بیایند و گرافیک کامپیوتری و زبان های رنگ آمیزی را یاد بگیرند، مانع بزرگی در پذیرش گسترده ی آن به وجود می آید.

نظرات

در ادامه بخوانید...