خب رفقا، بیاید یه سر به دنیای برنامهنویسی موازی بزنیم و ببینیم توی استفاده از Fortran و MPI چه خبر هست! اول از همه، بذار توضیح بدم این دو تا چی هستن:
Fortran یه زبان برنامهنویسی قدیمیه (ولی هنوزم باحاله) که خیلی توی محاسبات علمی و مهندسی استفاده میشه. MPI هم یعنی Message-Passing Interface، که یه استاندارده واسه اینکه برنامهها بتونن توی چندتا کامپیوتر با هم قشنگ حرف بزنن و کار تیمی انجام بدن؛ خلاصه، وقتی بخوای یه پروژه HUGE رو بین کلی کامپیوتر پخش کنی، راهش همینه.
سال ۲۰۱۲، نسخه ۳.۰ استاندارد MPI اومد و یه عالمه قابلیت جدید برای Fortran 2008 آورد. مهمترینش اضافه شدن یه سری روش جدید (به اسم f08 bindings، یعنی همون راه ارتباطی مخصوص Fortran 2008) بود که هم امنتر بود، هم استاندارد؛ یعنی دیگه با خیال راحت میتونی توی برنامههای Fortran از امکانات MPI استفاده کنی، اونم بدون اینکه از اشتباههای رایج بترسی.
ولی داستان اینجا جالب میشه: با اینکه تقریباً همه برنامهنویسهای Fortran دارن از این قابلیت جدید استفاده میکنن، ابزارهایی که کار تست و اندازهگیری عملکرد انجام میدن (حتی تا همین الان هم!) حسابی عقب افتادن. بچههای Fortran مجبورن هنوز برگردن سراغ همون روشهای قدیمیتر و ناامنتر، چون ابزارها هنوز کامل با روش f08 هماهنگ نشدن!
اینجا بود که Score-P (یه ابزار معروف و خفن برای اندازهگیری عملکرد برنامهها) وارد شد و با اضافه کردن «wrappers» مخصوص Fortran، این مشکل رو حل کرد. حالا ممکنه بپرسی، Wrapper چیه؟ Wrapper یعنی یک تکه کد که مثل یه رابط میمونه، میره با کتابخونه یا استاندارد موردنظر حرف میزنه و کارو برای برنامهنویس راحت میکنه.
تو این مقاله، نویسندهها توضیح دادن چطوری این Wrappers رو به Score-P اضافه کردن تا تمام امکانات جدید نسخههای آخر MPI رو پشتیبانی کنه، مخصوصاً نسخه ۴.۱ که تو سالای اخیر اومده. با این کار، Fortranیها میتونن با خیال راحت (و بدون عقبگرد به روشهای قدیمی) از ابزارهای اندازهگیری عملکرد استفاده کنن، درست مثل برنامهنویسای C.
یه ویژگی خفن دیگه این کار اینه که حالا میتونن کلی قابلیت جدید رو پوشش بدن: مثلاً اینکه Attributes (یه جور اطلاعات اضافی توی تابعها)، Info Objects (اطلاعات اضافه واسه کنترل رفتار کتابخونه)، یا Callbacks (توابعی که به عنوان ورودی به یه تابع دیگه داده میشن تا توی موقعیت خاصی اجرا بشن) میشه راحت منتقل کرد و بررسی کرد.
برنامهنویسای Score-P یه جور کد ژنراتور نوشتن که خودش به طور اتومات حدود ۵۰ هزار خط Wrapper بسازه! اینجا از یه ماژول به اسم python-pympistandard استفاده کردن که اجازه میده اطلاعات استاندارد MPI رو مستقیم از تعاریف استاندارد بیرون بکشن و توی کدنویسی اتومات استفاده کنن. ماشین تستشون هم با یه بسته به اسم MPICH تست میشه، که یعنی مدام بررسی میکنن همهچیز درست کار کنه.
نکته باحال اینجاست که این Wrapperهای جدید رو قبلاً تو دوتا کد شبیهسازی فلوئید (همون سیالات) امتحان کردن: یکی Neko (برگرفته از Nek5000، مخصوص شبیهسازی عددی با روش اجزاء محدود طیفی) و دیگری EPIC (Elliptical Parcel-In-Cell). هردو با موفقیت تونستن کارایی خودشون رو با Score-P بسنجن و نتیجه بگیرن.
آخرش هم نویسندهها توضیح میدن سر راه پیادهسازی این Wrappers با چه چالشهایی روبرو شدن و چه تصمیماتی گرفتن، مثل مشکلات مربوط به سازگاری بین زبانها و حجم زیاد کد.
خلاصه حرف این مقاله اینه که حالا برنامهنویسای مدرن Fortran بالاخره یه ابزار درستودرمان برای سنجش کارایی دارن که کامل همگام با همون قابلیتهایی هست که Cدارها داشتن. دیگه موقع بهینهسازی و عیبیابی، نگران هیچ محدودیتی نباشید! برنامهنویسی علمی هم اگه باحال شه، همینجوریاس 🙂
منبع: +