پردازنده هاي چند هسته اي استاد: دکتر سعيد پارسا ارائه دهنده: محمد حمزه ئي
بخش اول تاريخچه
Prof. Arvind Dream!! A time when Freshmen will be taught sequential programming as a special case of parallel programming
بحران نرم افزاري اول زمان: 1960-70 مشکل: برنامه نويسي به زبان اسمبلي نياز به تجريد و قابليت جابه جايي بدون از دست دادن کارايي برنامه ها راه حل: زبان هاي سطح بالا مانند فرترن و c
بحران نرم افزاري دوم زمان: 1980-90 مشکل: ناتواني در ساخت و نگهداري برنامه هاي کاربردي پيچيده که به صورت گروهي ايجاد مي شوند کامپيوترها مي توانستند برنامه هايي با پيچيدگي بالاتر را اجرا کنند نياز به قابليت انعطاف و قابليت نگهداري براي برنامه ها کارايي بالا مطرح نبود با توجه به قانون مور (Moor) بدست مي آمد
بحران نرم افزاري دوم راه حل: برنامه نويسي شي گرا متدولوژي هاي نرم افزاري بهتر ابزارهاي بهتر براي ايجاد برنامه ها
امروزه: برنامه نويسان و پردازنده ها!! برنامه نويسان چيزي در مورد پردازنده نمي دانند! زبانهاي سطح بالا به صورت انتزاعي پردازنده ها را مخفي مي کنند بايت کد جاوا مستقل از ماشين است بر مبناي قانون مور به منظور بدست آوردن سرعت بالاتر نيازي نيست برنامه نويسان چيزي در مورد پردازنده ها بدانند برنامه اي که 30 سال پيش به زبان c نوشته شده است همچنان کار مي کند و بر روي کامپيوترهاي امروزي بسيار سريعتر اجرا مي شود
منشا بحران سوم زمان: 2005-… مشکل: کارايي برنامه هاي ترتيبي!! (قانون مور!) نياز به بهبود کارايي منطقي و پيوسته براي برنامه ها براي پشتيباني جنبه هاي جديد و حجم بالا و در حال رشد داده ها پردازنده هاي چند هسته اي! مدل هاي برنامه نويسي موازي تبديل برنامه هاي بازمانده ترتيبي به موازي
موازي سازي
برنامه نويسي همروند و موازي برنامه همرند مجمرعه اي از نخ هاي ترتيبي که به صورت موازي (منطقي) اجرا مي شوند پياده سازي چند برنامگي اجراي نخ ها بر روي يک پردازنده با تعويض اجراي آنها چند پردازنده اي اجراي نخ ها بر روي يک سيستم چند پردازنده اي يا چند هسته اي پردازش توزيع شده اجراي نخ ها بر روي چند ماشين مختلف
برنامه هاي همروند و موازي همروندي فقط اجراي موازي نيست! همروندي به صورت اجراي interleaved پردازش همزمان منطقي اجرا بر روي يک پردازنده اجراي موازي پردازش همزمان فيزيکي اجرا بر روي چند پردازنده
همگام سازي تمامي حالات اجرايي نخ ها، اجراي صحيح و قابل قبول نيستند مکانيسم هاي همگام سازي براي محدود کردن حالات مختلف اجرايي همگام سازي با دو هدف صورت مي گيرد امن بودن برنامه در به روز رساني هاي مشترک جلوگيري از شرايط مسابقه! (race conditions) هماهنگي اعمال نخ ها
امن بودن دسترسي همزمان چند نخ به منبع مشترک امن اگر: تمامي دسترسي ها اثري بر منبع نداشته باشند خواندن يک متغير يا دسترسي ها خنثي (idempotent) باشند Y=sign(a); , a=a*2; يا تنها يک دسترسي در هر زمان انحصار متقابل (mutual exclusion)
کارايي برنامه هاي موازي پوشش (coverage) يا ميزان بخش هاي موازي دانه بندي (granularity) بخش ها ميان پردازنده ها محلي بودن (locality) محاسبات و ارتباطات
پوشش قانون آمدال (Amdahl) بهبود کارايي حاصل از استفاده از مقداري مد سريعتر اجرايي در برنامه (بخش هاي موازي)، محدود به ميزان زماني از برنامه دارد که مد سريعتر مي تواند استفاده شود Speedup = 100/60 = 1.67
دانه بندي دانه بندي يک معيار کيفي از ميزان محاسبات به ارتباطات دارد انواع دانه بندي دانه ريز (fine-grain) دانه درشت (course-grain)
دانه بندي موازي سازي دانه ريز موازي سازي دانه درشت نسبت کم محاسبات به ارتباطات سربار ارتباطي بالا شانس کمتر براي افزايش کارايي موازي سازي دانه درشت نسبت بالاي محاسبات به ارتباطات شانس بالا براي افزايش کارايي سخت بودن توازن بار پردازنده ها (load balancing) توازن بار ايستا توازن بار پويا
دانه بندي و کارايي توازن بار کاري همگام سازي ارتباطات ميزان و نحوه توزيع بار ميان هسته ها همگام سازي وجود محدوديت در ترتيب اجرا ارتباطات وجود هزينه ارتباطي
محلي بودن
بخش دوم بررسي يکي از روش هاي موازي سازي خودکار بخش دوم بررسي يکي از روش هاي موازي سازي خودکار
مقدمه موازي سازي درسطح نخ براي اجرا بر روي سيستم هاي چند هسته اي به منظور افزايش کارايي موازي سازي دانه ريز استفاده از سخت افزار براي برقراري ارتباطات کم هزينه مکانيسم سخت افزاري براي ارتباط بين هسته ها آرايه هاي همگام سازي: ارسال و دريافت مقادير از طريق يک صف produce, consume
استخراج توازي بخش بندي محاسبات به تعدادي نخ در نظر گرفتن معيارهاي کارايي مورد نظر اضافه کردن دستورات ارتباطي براي برقراري ارتباطات بين نخي
استخراج توازي زمانبندي دستورات چند نخي عمومي وابستگي هاي بين دستورات زمانبندي همزمان دستورات يک ناحيه عمومي از برنامه در نخهاي مختلف وابستگي هاي بين دستورات وابستگي کنترلي وابستگي داده اي حافظه رجيستر
زمانبندي دستورات چندنخي عمومي Program Dependence Graph(PDG) همانند گراف وظايف مشخص کننده وابستگي ها دستوراتي که بر روي نخ هاي مختلف زمانبندي مي شوند اضافه کردن دستورات ارتباطي و همگام سازي
توليد کد چند نخي استفاده ازنمايش سطح پائين کد PDG قابليت استفاده براي هر بخش بندي برنامه توليد کد موثر زمانبندي محلي و عمومي! کاهش تکرار کپي کردن جريان کنترلي برنامه مدل Fork/Join
الگوريتم MTCG(Multi-Threaded Code Generation) الگوريتم به منظور توليد کد چند نخي استفاده مي شود ورودي هاي الگوريتم گراف جريان کنترلي برنامه (CFG) گراف وابستگي(PDG) بخش بندي مورد نظر (Partitioning) خروجي الگوريتم برنامه چند نخي اين الگوريتم از چهار مرحله تشکيل شده است که در ادامه بيان شده است
الگوريتم MTCG مرحله 1: ايجاد بلاک هاي اوليه (Basic Block) براي گراف هاي جريان کنترلي جديد به ازاي هر نخ Ti يک گراف جريان کنترلي جديد CFGi ايجاد مي شود که شامل يک بلاک اوليه به ازاي هر بلاک اوليه مرتبط با Ti در CFG اصلي است بلاک هاي اوليه مرتبط: يک بلاک اوليه B با نخ Ti مرتبط است اگر B شامل يک دستور زمانبندي شده در Ti باشد يا يک دستور که دستوري از Ti به آن بستگي دارد باشد يا يک دستور انشعاب که يک بلاک مرتبط با Ti را کنترل مي کند باشد
الگوريتم MTCG مرحله 2 : انتقال دستورات به گراف هاي جريان کنترلي جديد دستورات هر Ti در بلاک اوليه مربوطه در CFGi به همان ترتيبي که در CFG اصلي وجود دارند وارد مي شوند مرحله 3 : اضافه کردن دستورات ارتباطي و همگام سازي بين نخ ها دستورات ارتباطي در مکاني معادل مکان منبع وابستگي، به گراف هاي جريان کنترلي جديد اضافه مي شوند اگر وابستگي رجيستر باشد مقدار رجيستر مربوطه در منبع توليد (دستور produce) و در مقصد مصرف (دستور consume)مي شود اگر وابستگي حافظه باشد دستورات همگام سازي براي حفظ ترتيب درست اجرايي اضافه مي شود اگر وابستگي کنترلي باشد ابتدا مقادير مربوط به شرط انشعاب از مبدا به مقصد منتقل مي شود و پس از آن دستور انشعاب مربوطه عيناً اضافه مي شود
الگوريتم MTCG مرحله 4 : ايجاد لبه هاي بين بلاک هاي اوليه در گراف هاي جريان کنترلي جديد از آنجا که تمامي بلاک ها در هر CFGi وجود ندارد در نتيجه بايد لبه ها به نحوي مناسب اضافه شود که پرش ها و انشعابات به درستي پياده سازي شود شرط صحيح بودن: تضمين اينکه هر بلاک در هر CFGi شرايط اجراي يکسان با بلاک معادل خود در CFG اصلي داشته باشد در نتيجه بايد وابستگي هاي کنترلي که خود از طريق روابط پس تسلط بدست مي آيند حفظ شوند در نتيجه براي هر CFGi مقصد هر پرش و انشعاب در صورت نبودن بلاک مربوطه در CFGi نزديکترين بلاک اوليه اي است که بر آن پس تسلط دارد و در CFGi وجود دارد
الگوريتم خوشه بندي (GREMIO) زمانبندي بر مبناي PDG هدف: کمينه کردن مسير بحراني در گراف مشکل: وجود حلقه در PDG راه حل: رويکرد ساده سازي مسئله و تبديل به گراف بدون حلقه هر حلقه تبديل به يک گره شود! بدست آوردن زمان تقريبي اجراي حلقه و انتساب آن به عنوان وزن گره در نظر گرفتن وابستگي هاي بين حلقه اي در صورتي که خود کد در حلقه باشد بدست آمدن PDG بدون حلقه: HPDG
خوشه بندي در نظر گرفتن سربار ارتباطي در برابر ميزان موازي سازي در خوشه بندي الگوريتم خوشه بندي Dominant Sequence Clustering (DSC) خوشه بندي به منظورتخصيص دستورات به خوشه ها صورت مي گيرد سپس زمانبندي خوشه ها به منظورتخصيص خوشه ها به نخ ها (پردازنده ها) صورت مي گيرد
خوشه بندي افرازبندي HPDG با هدف حداکثر سازي بخش هاي موازي با در نظر گرفتن ميزان وابستگي بدون درنظر گرفتن تعداد هسته ها صورت مي گيرد براي افرازبندي، ابتدا به هر گره HPDG وزني معادل زمان تقريبي اجراي آن انتساب داده مي شود و با استفاده از يک الگوريتم heuristic به نام DSC افرازبندي با در نظر گرفتن هزينه ارتباطي صورت مي گيرد در مرحله بعد(زمانبندي) با توجه به تعداد هسته ها تعدادي از اين بخش ها ممکن است با هم ادغام شوند
زمانبندي دستورات در نظر گرفتن روابط کنترلي بين گره هاي PDG بدون حلقه هم ارز: دو دستور x و y هم ارز کنترلي هستند اگر داراي شرايط اجرايي يکسان باشند(اگر x اجرا شود y هم اجرا مي شود و بالعکس) انحصاري: دو دستور x و y از نظر کنترلي انحصاري هستند اگر x اجرا شود y اجرا نشود و بالعکس داراي برخورد: در غير اينصورت
زمانبندي دستورات استفاده از الگوريتم هاي زمانبندي ليست با محدوديت تخصيص اولويت به گره ها و زمانبندي گره ها بر مبناي ترتيب توپولوژيک داراي اولويت اولويت هر گره: بيشترين فاصله آن گره تا يک برگ است در هر مرحله بهترين نخ براي هر خوشه انتخاب مي شود انتخاب هر نخ با توجه به معيارهاي زير صورت مي گيرد سربار ارتباطات سربار برخورد (conflict) سربار حاصل از اجراي خوشه در هر نخ
مثال
مثال(ادامه...)
تمرين!!! بررسي ابزارهاي موجود براي تحليل کد اسمبلي و ارائه گزارش بدست آوردن گراف جريان کنترلي بدست آوردن گراف وظايف
منبع Guilherme de Lima Ottoni, “Global Instruction Scheduling for Multi-Threaded Architectures ”, Ph.D. Thesis, Department of Computer Science, Princeton University, September 2008.