نام پژوهشگر: امین عباسی قلاتی

طراحی و پیاده سازی چارچوب mapreduce تعاونی مبتنی بر کلاستر با استفاده از پردازنده کارت گرافیک
پایان نامه وزارت علوم، تحقیقات و فناوری - دانشگاه شیراز - دانشکده مهندسی برق و کامپیوتر 1390
  امین عباسی قلاتی   فرشاد خون جوش

ایجاد مدل های برنامه نویسی جدید برای فراهم کردن تجرید سطح بالا از مهمترین روش های به کار گرفته شده برای کاهش نیاز برنامه نویس به تسلط بر جزییات دقیق معماری و ساده سازی برنامه نویسی موازی می باشند. همانطور که پیشتر گفته شد، از پرکاربردترین مدل های معرفی شده برای برنامه نویسی موازی می توان به مدل mapreduce اشاره کرد. کلیدی ترین فایده این مدل این است که به برنامه نویس اجازه می دهد تا فقط و فقط بر هسته محاسباتی مورد نیاز خود تمرکز کند و مسوولیت مدیریت اجرای موازی برنامه و تمام چالش های برنامه نویسی موازی از جمله تفکیک و توزیع متعادل داده ورودی و تحمل پذیری خطا بر عهده سیستم زمان اجرا گذاشته شده است. این مدل اولین بار، برای برنامه نویسی بر روی سیستم های کلاستری ارایه شد و پر کاربرد ترین پیاده سازی این مدل را بدون شک می توان چارچوب منبع باز apache hadoop [apache, hadoop][zaharian, 2008]دانست. برنامه نویس با استفاده از کتابخانه موجود در hadoop می تواند برنامه هایی منطبق با مدل mapreduce را بنویسد و سیستم زمان اجرای hadoop برنامه را به طور موازی بر روی سیستم های کامپیوتری موجود در کلاستر اجرا می کند. پیاده سازی این مدل برای معماری پردازنده کارت گرافیک [he, 2008] [mokhtari, 2011]و نیز پردازنده های چند هسته ای [ranger, 2007][yoo, 2009] نیز انجام شده است. یکی دیگر از گرایش های مهم در جامعه برنامه نویسی موازی، استفاده از پردازنده های موازی fine-grained به عنوان شتاب دهنده در هر یک از گره های یک کلاستر برای افزایش سرعت محاسباتی نهایی آن بوده است. انواع مختلفی از شتاب دهنده ها وجود دارند که از جمله آنها می توان به کارت های گرافیکی، fpga ها، پردازنده های کمکی simd، و مدارات مجتمع خاص منظوره اشاره کرد. با توجه به اینکه mapreduce برای بسیاری از این محیط ها نیز پیاده سازی شده است، مطلوب است با پیوند انواع چارچوب های موجود mapreduce برای عناصر پردازشی مختلف موجود در یک کلاستر به یکدیگر، یک محیط یکپارچه برای اجرای یک برنامه mapreduce بر روی پردازنده های غیر همگن موجود در یک کلاستر ایجاد کرد. در این صورت با داشتن یک تعریف از یک برنامه ی mapreduce برنامه نویس می تواند از تمامی پردازنده های موجود در کلاستر برای پردازش mapreduce مورد نظر خود استفاده کند. در عمل، تفاوت های معماری بین پردازنده های اصلی و پردازنده های شتاب دهنده، موانع متعددی را بر سر راه اجرای یکپارچه یک برنامه mapreduce ایجاد می کند. اولا، تفاوت هایی بین زبان های برنامه نویسی مورد استفاده برای پردازنده اصلی و شتاب دهنده در هر پیاده سازی وجود دارد. به عنوان مثال، hadoop از جاوا استفاده می کند در حالی که بیشتر پردازنده های شتاب دهنده، از زبان هایی شبیه c مانند [cuda, def] و [opencl, def] استفاده می کنند. متاسفانه، ترجمه برنامه نوشته شده از یک زبان به زبان دیگر نمی تواند به طور کامل به شکل خودکار انجام شود زیرا پیاده سازی های مختلف غالبا باید برای انطباق هر چه بیشتر با مشخصات معماری هر پردازنده، به شکل دستی تنظیم شوند تا آن برنامه کارایی زمان اجرای مناسبی را داشته باشد. علاوه بر این، زمان بندی پردازنده در کلاستر های غیر همگن به مراتب چالش بر انگیز تر از زمانبندی در کلاستر های همگن است. اولا، با توجه به تفاوت های معماری بین پردازنده اصلی و شتاب دهنده ها، هر اندازه بهینه داده ورودی یک وظیفه برای یک نوع پردازنده با نوع دیگر متفاوت است. ثانیا، بعضی از برنامه ها بر روی شتاب دهنده ها بسیار خوب اجرا می شوند، در حالی که برخی دیگر بر روی پردازنده های اصلی سریع تر اجرا می شوند. در نهایت، تاخیر قابل توجه ای برای ارتباط بین پردازنده اصلی و شتاب دهنده (که اغلب از طریق اتصال pci-e بر قرار می شود) وجود دارد، که خود چالش های دیگری برای فراهم کردن داده ورودی برای شتاب دهنده ها در پردازش ناهمگن ایجاد می کند. بنابراین، استفاده ساده اوجانه از شتاب دهنده ها در کلاستر هایhadoop غالبا منجر به میزان بسیار اندکی از به کار گیری منابع پردازشی و در نتیجه، اتلاف بیشینه قدرت پردازشی شتاب دهنده ها می شود و گاها کاهش سرعت محاسباتی نسبت به زمانی که از پردازنده های شتاب دهنده استفاده نمی شود، می گردد. علی رغم گسترش بسیار چشم گیر استفاده از مدل برنامه نویسی mapreduce و به طور خاص پیاده سازی منبع باز آن یعنی hadoop، در پردازش کلاستری، این سیستم ضعف هایی در استفاده بهینه از منابع از جمله پردازنده اصلی، پردازش نا همگن با استفاده از پردازنده های کمکی، به کار گیری بهینه تجهیزات ذخیره سازی داده با پاسخ گویی بالا و مطمئن و نیز مصرف بهینه انرژی دارد. هدف نهایی از اجرای این پروژه، پیاده سازی یک چارچوب برنامه نویسی mapreduce برای سیستم ها کلاستری نا همگن می باشد. تشخیص خودکار و دقیق بهترین ترکیب پردازشی از میان پردازنده های نا همگن موجود در کلاستر و نیز بیشترین استفاده ممکن از پتانسیل پردازشگر های منتخب برای پردازش یک برنامه mapreduce از مهمترین اهداف اجرای این پروژه می باشد. همانگونه که اشاره شد، hadoop امروزه توسط بزرگترین شرکت های کامپیوتری دنیا برای پردازش داده ها و استخراج اطلاعات مورد استفاده قرار گرفته است [hadoop, who]. کارایی چنین سیستمی (hadoop) در هزینه های کلان شرکت های استفاده کننده از آن، بسیار تاثیر گذار است. هر چه عملکرد سیستم به حالت بهینه نزدیک تر باشد، بهره وری بیشتر خواهد بود. به طور دقیق تر، با افزایش سرعت انجام عملیات در چنین سیستم هایی سرعت پاسخگویی و نیز میزان رضایت کاربران افزایش خواهد یافت که این به نوبه خود باعث افزایش تعداد کاربران سیستم خواهد شد. از طرف دیگر، شرکت ها می توانند با کاهش پردازنده های خود به حدی که عملکرد سیستم جدید به حد عملکرد سیستم قبلی باشد، هزینه های خود را کاهش دهند. به طور مثال اگر قبلا برای انجام کاری با استفاده از hadoop در یک مدت زمان معین به تعدادی پردازنده نیاز بوده است، بعد از بهینه سازی مثلا دو برابر عملکرد برنامه، برای اینکه همان کار در همان زمان قبلی انجام شود تعداد پردازنده هایی به اندازه نیمی از آنچه قبل از بهینه سازی لازم بود، نیاز خواهد بود. به این ترتیب در هزینه نگهداری سیستم ها، توان مصرفی و ... به شکل قابل قبولی صرفه جویی می شود. بدیهی است که هر چه میزان بهینه سازی سیستم بیشتر باشد، مزایای بیشتری عاید استفاده کنندگان سیستم خواهد شد. همانگونه که در بخش های آتی نشان داده می شود، hadoop در استفاده بهینه از منابع از جمله پردازنده اصلی، عدم پشتیبانی مناسب از پردازش نا همگن با استفاده از پردازنده های کمکی و به کار گیری بهینه تجهیزات ذخیره سازی داده با پاسخ گویی بالا مشکلاتی دارد. هدف نهایی از اجرای این پروژه، پیاده سازی یک چارچوب برنامه نویسی mapreduce برای سیستم های کلاستری نا همگن می باشد. این سیستم باید بتواند به طور خودکار بهترین ترکیب پردازشی از میان پردازنده های نا همگن موجود در کلاستر را تشخیص داده و تا حد ممکن از پتانسیل پردازشگر های منتخب برای پردازش یک برنامه mapreduce استفاده کند.