مقدمه ای بر چیستی، چرایی و چگونگی محاسبات حافظه مشترک
چند هفته پیش، ما اولین پست وبلاگ را در یک سری مدلسازی ترکیبی منتشر کردیم، در مورد محاسبات موازی ترکیبی و اینکه چگونه به COMSOL Multiphysics مدلسازی سریعتر کمک می کند. امروز میخواهیم به طور خلاصه یکی از بلوکهای سازنده نسخه ترکیبی، یعنی محاسبات حافظه مشترک را مورد بحث قرار دهیم . قبل از آن، باید در نظر بگیریم که “یک برنامه به صورت موازی در حال اجرا است”. همچنین یاد خواهید گرفت که چه زمانی و چگونه از حافظه مشترک با COMSOL استفاده کنید.
Multicore و Multithreading
گرسنگی برای رایانههای سریعتر روز به روز در حال افزایش است، اما نیازهای محاسباتی بزرگتر در عصری با محدودیتهای فنی خاص (مانند افزایش سرعت ساعت) دنیای محاسبات را مجبور به چند هستهای کرد . کامپیوترهای چند هسته ای امروزه به جریان اصلی تبدیل شده اند. پردازنده های چند هسته ای مدرن معمولا تا 12 هسته دارند، اما می توانند حتی بیش از 60 هسته داشته باشند (برای اینکه ببینید هسته چیست و چگونه با محاسبات حافظه مشترک ارتباط دارد، نمودار مربوط به محاسبات حافظه مشترک را در این صفحه بررسی کنید) .
در نتیجه، هر برنامه کاربردی به منظور بهره برداری از قابلیت های سخت افزار موازی اخیر، باید موازی سازی را در نظر بگیرد. در غیر این صورت، آنها فقط روی یکی از هسته ها محاسبات می کردند . به عنوان یک کاربر، شما اغلب مستقیماً تحت تأثیر موازیسازی قرار نمیگیرید، اما باید از قدرت موازی روی دسکتاپ خود، تنظیمات نرمافزاری که احتمالاً میتوان برای بهبود بهرهوری تغییر کرد و انتظاراتی که باید هنگام افزایش همه هستههای موجود داشته باشید، آگاه باشید. .
برای اینکه برنامهای که یک فرآیند را اجرا میکند، بتواند به صورت موازی روی یک ماشین چند هستهای اجرا شود، باید به بخشهای کوچکتر تقسیم شود و این قسمتهای کوچکتر را thread میگویند . اجرای چند رشته از این رشته ها به ظاهر به صورت موازی، multithreading نامیده می شود ، و این یک عملکرد داخلی در رایانه های رومیزی ما برای 15 سال گذشته یا بیشتر بوده است. Multithreading لزوماً به چندین هسته نیاز ندارد و می توان آن را روی یک ماشین تک هسته ای با جابجایی سریع بین رشته های فعال در حالت زمان برش انجام داد. این تخصیص بیش از حد امکان استفاده بهتر از منابع را فراهم می کند و همچنین می تواند در صورت در دسترس بودن چندین هسته مورد استفاده قرار گیرد.
اکنون، درک اینکه چرا یک پردازنده چند هسته ای در مقایسه با یک هسته یک گام بزرگ به جلو است، آسان است. داشتن چندین واحد محاسباتی به این معنی است که می توانیم چندین رشته را به طور همزمان اجرا کنیم. بر این اساس امکان انجام کارهای بیشتری در واحد زمان وجود دارد. در نتیجه، موازی سازی در حال حاضر منبع اصلی برای افزایش سرعت محاسبات است.
در شکل زیر می توانید ببینید که چگونه COMSOL Multiphysics می تواند از یک ماشین هشت هسته ای بهره مند شود. زمانی که از هر هشت هسته استفاده می شود، زمان محاسبات به طور قابل توجهی کاهش می یابد. به عنوان یک مزیت مستقیم، میتوانید شبیهسازیهای بیشتری را در همان زمان اجرا کنید – افزایش بهرهوری. برای مدل انتخاب شده زیر، بهره وری در یک ماشین هشت هسته ای ضریب 6.5 افزایش یافته است.
تعداد شبیه سازی ها در روز با توجه به تعداد هسته های استفاده شده برای مدل گرمایش RF که در زیر نشان داده شده است. سرور محاسباتی مورد استفاده مجهز به 2 Intel® Xeon® E5-2609 و 64 گیگابایت DDR3 @ 1600 مگاهرتز بود.
مدلی که برای آن افزایش سرعت به دست آمد. مقیاس قرمز به سفید دما را بر حسب درجه سانتیگراد و فلش های سبز میدان مغناطیسی را نشان می دهد. این مدل تقریباً 1.4 میلیون درجه آزادی دارد و با حل کننده مستقیم PARDISO که به 52 گیگابایت رم نیاز دارد حل شد. توجه داشته باشید که این یک مدل چندفیزیکی جفت شده دو طرفه است. نسخه کوچکتر این مدل در گالری مدل موجود است .
حافظه مشترک چیست؟
هنگامی که فرآیندی در رایانه اجرا می شود، سیستم عامل مقدار مشخصی از حافظه را به برنامه می دهد تا با آن بازی کند (توجه: در COMSOL Multiphysics می توانید مقدار حافظه اختصاص داده شده توسط برنامه را در نوار ابزار در پایین مشاهده کنید). به طور کلی، این حافظه بین تمام رشتههایی که توسط فرآیند مادر ایجاد میشوند مشترک است و هر رشته به همه متغیرهایی که در آن ذخیره میشوند دسترسی دارد.
به عنوان یک قیاس، می توان به یک میز اتاق کنفرانس فکر کرد که یک جلسه در اطراف آن برگزار می شود. تمام گزارش ها و اطلاعاتی که برای جلسه مهم است، روی میز در مقابل شرکت کنندگان پخش می شود. هر شرکت کننده می تواند بر روی هر کاغذی که می خواهد بخواند یا بنویسد. از این رو، اطلاعات به اشتراک گذاشته می شود در حالی که هر شرکت کننده می تواند قطعه کار خود را انتخاب کند.
همانطور که بسیاری از قیاس ها، این یکی مفهوم واقعی را بسیار ساده می کند، و فقط به ما در مورد نحوه عملکرد حافظه مشترک در اصل به ما می دهد. هنگام کار با برنامه نویسی حافظه مشترک در رایانه چیزهای بیشتری وجود دارد که باید در نظر داشت. واضح است که برخی مکانیسمهای همگامسازی نیاز به استفاده دارند و ممکن است اختلاف منابع ظاهر شود، برای مثال، زمانی که 50 نفر روی یک صفحه کاغذ مینویسند. این نیز اولین توضیح در مورد این است که چرا سرعت بالا در شکل اول کاهش می یابد و در یک نقطه خاص به اشباع می رسد.
اشتراک حافظه امکان دسترسی مستقیم به متغیرهای مشترک را فراهم می کند و برنامه برای ارسال اطلاعات از یک رشته به رشته دیگر نیازی به برقراری ارتباط ندارد. از آنجایی که ارتباطات می تواند یک گلوگاه بزرگ باشد و در صورت امکان باید از آن اجتناب کرد، این یک مزیت با نرم افزار COMSOL است. البته اشکالاتی در محاسبات حافظه مشترک وجود دارد. همانطور که در پست قبلی وبلاگ اشاره کردیم، مقدار حافظه ای که می توانیم استفاده کنیم محدود به آنچه در دستگاه در دسترس داریم است، و مشکلات لجستیکی دیگری نیز وجود دارد که برنامه نویس باید هنگام برنامه نویسی برنامه در نظر بگیرد.
چرا از حافظه مشترک استفاده کنیم؟
همانطور که قبلا ذکر شد، موازی سازی منبع اصلی برای افزایش سرعت است. از این رو، برنامه نویس باید بررسی کند که چگونه کار کلی را می توان بین تمام رشته های شرکت کننده به اشتراک گذاشت. این در مورد وظایفی که می توانند به صورت موازی بدون هیچ گونه وابستگی اجرا شوند، ساده است.
در جبر خطی عددی، شما معمولاً روی آرایه های عظیمی مانند ماتریس ها و بردارها کار می کنید. رایج ترین ساختار در اینجا حلقه های طولانی روی آرایه ها هستند. در رویکرد حافظه مشترک، کل آرایه توسط همه رشتهها قابل دسترسی است و حلقه را میتوان به روشهای مختلف بین رشتهها تقسیم کرد (اگر وابستگیهای حامل حلقه وجود نداشته باشند). COMSOL Multiphysics از موازی سازی حافظه مشترک برای انواع عملیات جبر خطی و برای الگوریتم های خاص استفاده می کند – به شما یک ابزار موازی همه کاره می دهد.
با این حال، وظایف و الگوریتم هایی وجود دارند که در آنها استفاده از روش محاسباتی موازی دشوار یا حتی غیرممکن است. یکی از این نمونه ها سری فیبوناچی، F(n) = F(n-1) + F(n-2) است که یک مسئله بازگشتی غیرقابل موازی سازی است، که در آن هر مرحله به مرحله قبلی بستگی دارد. سایر بخشهای الگوریتمی که به طور کامل از محاسبات موازی و رایانههای چند هستهای بهره نمیبرند، بهعنوان مثال، طرحهای گام به گام و مطالعات ادامه (مانند رمپینگ) هستند که در آن ترتیب محاسبات ثابت است.
با این حال، تعداد کمی از ما از رایانه ها و نرم افزارهای عددی خود برای محاسبه عناصر سری فیبوناچی در تمام طول روز استفاده می کنیم و خوشبختانه حل یک سیستم معادلات خطی، که بخش بزرگی از هر نرم افزار تجزیه و تحلیل اجزا محدود است، مشکلی است که قابل موازی سازی است. تا حد زیادی بنابراین، کم و بیش هر مشکلی که در آن یک ماتریس باید حل شود، از رایانههای چند هستهای سود میبرد، حتی اگر معادله ماتریس فقط بخشی از کار بزرگتر باشد، مانند یک مسئله وابسته به زمان. از آنجایی که COMSOL Multiphysics اصولاً عملیات ماتریس-بردار را در اکثر مدلها محاسبه میکند، استفاده از حافظه مشترک در پردازندههای چند هستهای مزایای زیادی دارد. برای طرح های گام به گام و مطالعات ادامه، هر مرحله زمان و پارامتر را می توان به صورت موازی انجام داد. برای دستیابی به مقیاس پذیری برای این نوع مطالعات،
علاوه بر این، باید در نظر داشته باشید که سرعت کلی توسط کسر غیر موازی الگوریتم و اجرای آن محدود شده است. این مشاهدات معروف توسط قانون امدال توصیف شده است . با برون یابی کسری غیر موازی در مدل بالا، متوجه می شویم که حتی در ماشینی با تعداد بی نهایت هسته، افزایش سرعت نمی تواند بسیار بیشتر از ضریب 30 باشد (که هنوز هم چشمگیر است!). این منجر به کمی بیش از 60 شبیه سازی در روز می شود.
چگونه COMSOL Multiphysics از Multicore استفاده می کند
البته عملکرد بهینه شبیهسازیهای عددی در رایانههای چند هستهای به این واقعیت بستگی دارد که همه هستهها در حال استفاده هستند. بهطور پیشفرض، نرمافزار COMSOL از تمام هستههای موجود در سیستم شما استفاده میکند، بنابراین هیچ کار خاصی برای حذف بهترینها از سیستم شما وجود ندارد.
با این حال، ممکن است سناریوهایی وجود داشته باشد که بخواهید سرعت مدل یا سیستم خود را اندازه گیری کنید، یا بخواهید برخی از هسته های خود را برای برنامه ها یا وظایف دیگر نگه دارید. در این حالت، میتوانید تعداد هستههایی را که باید هنگام راهاندازی COMSOL Multiphysics استفاده شوند، یا با ویرایش تنظیمات Preferences برای Multicore و Cluster Computing کنترل کنید . علاوه بر این، در محاسبات موازی ترکیبی، ممکن است استفاده از تنظیمات خاص هنگام استفاده همزمان از حافظه توزیع شده و حافظه مشترک مفید باشد.
به زودی دوباره بررسی کنید، زیرا در پست وبلاگ بعدی این مجموعه به این موضوع خواهیم پرداخت.
بیشتر خواندن
- همانطور که در پست وبلاگ قبلی در این مجموعه ذکر کردم، یک نکته خوب برای کسانی که می خواهند بیشتر در مورد جزئیات محاسبات حافظه مشترک مطالعه کنند، آزمایشگاه ملی لاورنس لیورمور است. مقدمه ای بر محاسبات موازی .
- با بوکمارک کردن این صفحه با سری وبلاگ مدلسازی ترکیبی همراه باشید .
- لینک دانلود به صورت پارت های 1 گیگابایتی در فایل های ZIP ارائه شده است.
- در صورتی که به هر دلیل موفق به دانلود فایل مورد نظر نشدید به ما اطلاع دهید.
برای مشاهده لینک دانلود لطفا وارد حساب کاربری خود شوید!
وارد شویدپسورد فایل : پسورد ندارد گزارش خرابی لینک
دیدگاهتان را بنویسید