OMPI-WRAPPER-COMPILER(1) Open MPI OMPI-WRAPPER-COMPILER(1)

mpicc, mpic++, mpicxx, mpifort, mpijavac — کامپایلرهای پوششی Open MPI

mpicc [--showme | --showme:compile | --showme:link] ...

mpic++ [--showme | --showme:compile | --showme:link] ...

mpicxx [--showme | --showme:compile | --showme:link] ...

mpifort [--showme | --showme:compile | --showme:link] ...

mpijavac [--showme | --showme:compile | --showme:link] ...

دستورهای منسوخ‌شدهٔ زیر نیز در دسترس هستند — اما باید به جای آن‌ها از mpifort استفاده شود:

mpif77 [--showme | --showme:compile | --showme:link] ...

mpif90 [--showme | --showme:compile | --showme:link] ...

در سیستم‌های فایل حساس به حروف بزرگ و کوچک، دستور زیر نیز در دسترس خواهد بود:

mpiCC [--showme | --showme:compile | --showme:link] ...

گزینه‌های زیر برای همهٔ کامپایلرهای پوششی اعمال می‌شوند:

•
--showme: این گزینه دارای چندین شکل مختلف است (پایین را ببینید). هیچ‌یک از این شکل‌ها کامپایلر زیرین را فراخوانی نمی‌کنند؛ همهٔ آن‌ها اطلاعاتی دربارهٔ نحوهٔ فراخوانی کامپایلر زیرین در صورتی که از --showme استفاده نمی‌شد ارائه می‌دهند. گزینهٔ اصلی --showme خط فرمانی را که برای کامپایل برنامه اجرا می‌شد در خروجی نمایش می‌دهد.

نکته:

اگر یک آرگومان غیر از نام فایل در خط فرمان ارسال شود، گزینهٔ --showme هیچ پرچم اضافی را نمایش نخواهد داد. برای نمونه، هر دو دستور "mpicc --showme و mpicc --showme my_source.c تمام پرچم‌های ارائه‌شده توسط پوشش را نمایش خواهند داد. اما دستور mpicc --showme -v فقط نام کامپایلر زیرین و -v را نمایش خواهد داد.
  • --showme:compile: پرچم‌های کامپایلری را که به کامپایلر زیرین ارائه می‌شد در خروجی نمایش می‌دهد.
  • --showme:link: پرچم‌های پیونددهنده‌ای را که به کامپایلر زیرین ارائه می‌شد در خروجی نمایش می‌دهد.
  • --showme:command: فرمان کامپایلر زیرین (که ممکن است یک یا چند نشانه باشد) را در خروجی نمایش می‌دهد.
  • --showme:incdirs: فهرستی جداشده با فاصله (اما در غیر این صورت ساده و بدون قالب‌بندی اضافی) از دایرکتوری‌هایی که کامپایلر پوششی برای مشخص کردن محل فایل‌های سرایند مربوطه به کامپایلر زیرین ارائه می‌داد را در خروجی نمایش می‌دهد.
  • --showme:libdirs: فهرستی جداشده با فاصله (اما در غیر این صورت ساده و بدون قالب‌بندی اضافی) از دایرکتوری‌هایی که کامپایلر پوششی برای مشخص کردن محل کتابخانه‌های مربوطه به پیونددهندهٔ زیرین ارائه می‌داد را در خروجی نمایش می‌دهد.
  • --showme:libs فهرستی جداشده با فاصله (اما در غیر این صورت ساده و بدون قالب‌بندی اضافی) از نام کتابخانه‌هایی که کامپایلر پوششی برای پیوند دادن یک برنامه به کار می‌برد را در خروجی نمایش می‌دهد. برای مثال: mpi open-pal util.
  • --showme:version: شمارهٔ نسخهٔ Open MPI را در خروجی نمایش می‌دهد.
  • --showme:help: یک پیام راهنمای خلاصه از نحوهٔ استفاده را در خروجی نمایش می‌دهد.

برای سایر گزینه‌هایی که می‌توانند از طریق mpicc ارسال شوند، به صفحهٔ راهنمای کامپایلر زیرین خود مراجعه کنید.

از نظر مفهومی، نقش این دستورها کاملاً ساده است: افزودن شفاف پرچم‌های مرتبط کامپایلر و پیونددهنده به خط فرمان کاربر که برای کامپایل / پیوند برنامه‌های Open MPI ضروری هستند، و سپس فراخوانی کامپایلر زیرین برای اجرای واقعی فرمان.

به همین دلیل، از این دستورها مکرراً با عنوان کامپایلرهای «پوششی» (wrapper) یاد می‌شود زیرا خود آن‌ها برنامه‌ها را کامپایل یا پیوند نمی‌زنند؛ آن‌ها صرفاً پرچم‌های خط فرمان را افزوده و کامپایلر پشتی (back-end) را فراخوانی می‌کنند.

پروژهٔ Open MPI کامپایلرهای پوششی را برای چندین زبان ارائه می‌دهد:

  • mpicc: زبان C
  • mpic++، mpicxx (و در سیستم‌های دارای سیستم فایل حساس به حروف بزرگ و کوچک، mpiCC): زبان C++

    نکته:

دستورهای mpic++، mpicxx و mpiCC همگی همان کامپایلر زیرین C++ را با همان گزینه‌ها فراخوانی می‌کنند. همگی صرفاً جهت سازگاری با سایر پیاده‌سازی‌های MPI ارائه شده‌اند.
  • mpifort (و نام‌های مستعار موروثی/منسوخ آن mpif77 و mpif90): زبان Fortran
  • mpijavac: زبان Java

کامپایلرهای پوششی برای هر یک از زبان‌ها یکسان هستند؛ می‌توان از آن‌ها به‌جای یکدیگر استفاده کرد. نام‌های مختلف صرفاً جهت سازگاری رو به عقب ارائه شده‌اند.

کامپایلر پوششی Fortran برای MPI (mpifort و نام‌های موروثی/منسوخ آن mpif77 و mpif90) می‌تواند برنامه‌های MPI را که از هرکدام/همهٔ انقیادهای (bindings) فورترن MPI استفاده می‌کنند کامپایل و پیوند کند: mpif.h، ماژول mpi و ماژول mpi_f08 (به این فرض که Open MPI با پشتیبانی از هر یک از این انقیادهای Fortran نصب شده باشد). به‌طور مشخص: دیگر نیازی به استفاده از کامپایلرهای پوششی متفاوت برای برنامه‌هایی که از mpif.h استفاده می‌کنند در مقایسه با برنامه‌هایی که از ماژول mpi استفاده می‌کنند نیست — فقط از mpifort برای تمام برنامه‌های Fortran MPI استفاده کنید.

با این حال، توجه داشته باشید که کامپایلر Fortran ممکن است به گزینه‌های خط فرمان اضافی برای اعمال یک گویش خاص از Fortran نیاز داشته باشد. برای مثال، در برخی از نسخه‌های کامپایلر IBM XLF، اگر xlf90 کامپایلر زیرین Fortran باشد، ممکن است برای کامپایل فایل‌های منبع Fortran با قالب ثابت (fixed-format)، گزینهٔ -qfixed ضروری باشد.

در نهایت، دقت داشته باشید که اگر پشتیبانی از Fortran در لایهٔ MPI ساخته نشده باشد، mpifort غیرفعال خواهد بود و در صورت استفاده خطا بازمی‌گرداند.

دستور mpicc یک پوشش تسهیل‌کننده برای کامپایلر زیرین C است. ترجمهٔ یک برنامهٔ Open MPI نیازمند پیوند دادن کتابخانه‌های ویژهٔ Open MPI است که ممکن است در یکی از دایرکتوری‌های استاندارد جستجوی ld(1) قرار نداشته باشند. این امر همچنین اغلب مستلزم گنجاندن فایل‌های سرایندی است که ممکن است در یک مکان استاندارد یافت نشوند.

دستور mpicc آرگومان‌های خود را همراه با گزینه‌های -I، -L و -l که برای برنامه‌های Open MPI الزامی هستند، به کامپایلر زیرین C منتقل می‌کند.

این موضوع برای تمام کامپایلرهای پوششی سایر زبان‌ها نیز صدق می‌کند.

تیم Open MPI اکیداً توصیه می‌کند که به جای تلاش برای پیوند دستی به کتابخانه‌های Open MPI، از کامپایلرهای پوششی استفاده کنید. این رویکرد به پیاده‌سازی خاص Open MPI اجازه می‌دهد تا بدون تحمیل تغییرات به دستورالعمل‌های پیونددهنده در Makefile کاربران تغییر کند. در واقع، مجموعهٔ خاص پرچم‌ها و کتابخانه‌های مورد استفاده توسط کامپایلرهای پوششی به نحوهٔ پیکربندی و ساخت Open MPI بستگی دارد؛ این مقادیر می‌توانند بین نصب‌های مختلف از یک نسخه از Open MPI تغییر کنند.

در واقع، از آنجا که این پوشش‌ها صرفاً پوسته‌های نازکی بر فراز یک کامپایلر زیرین هستند، دلایل قانع‌کنندهٔ بسیار بسیار کمی برای عدم استفاده از کامپایلرهای پوششی Open MPI وجود دارد. هنگامی که استفادهٔ مستقیم از پوشش‌ها امکان‌پذیر نیست، باید از گزینه‌های --showme:compile و --showme:link برای تعیین اینکه پوشش‌ها از چه پرچم‌هایی استفاده می‌کردند، بهره گرفت. برای مثال:

shell$ cc -c file1.c `mpicc --showme:compile`
shell$ cc -c file2.c `mpicc --showme:compile`
shell$ cc file1.o file2.o `mpicc --showme:link` -o my_mpi_program

امکان دارد که کامپایلرهای پوششی با قابلیت آگاهی از چندکتابخانه‌ای (multi-lib) پیکربندی شوند. بدین معنا که کتابخانه‌ها و فایل‌های سرایند گنجانده‌شده ممکن است بر اساس پرچم‌های تعیین‌شده برای کامپایلر متفاوت باشند (برای مثال، با کامپایلرهای GNU در لینوکس، در صورت مشاهدهٔ -m32 در مقایسه با مشاهدهٔ -m64 ممکن است مسیر متفاوتی برای کتابخانه‌ها استفاده شود). این رفتار پیش‌فرض در ساخت استاندارد نیست، اما می‌تواند فعال شود (برای مثال، در یک بستهٔ باینری که پشتیبانی از هر دو حالت ۳۲ و ۶۴ بیتی را ارائه می‌دهد). اطلاعات بیشتر را می‌توانید در اینجا بیابید.

رشته‌هایی که کامپایلرهای پوششی پیش از فراخوانی کامپایلر زیرین در خط فرمان درج می‌کنند، در یک فایل متنی ذخیره شده‌اند که توسط Open MPI ایجاد و در $pkgdata/NAME-wrapper-data.txt نصب می‌شود، که در آن:

  • $pkgdata معمولاً $prefix/share/openmpi است
  • $prefix دایرکتوری اصلی و سطح بالای نصب Open MPI است
  • NAME نام کامپایلر پوششی است (برای مثال، $pkgdata/mpicc-wrapper-data.txt)

به‌ندرت ویرایش این فایل‌ها ضرورت پیدا می‌کند، اما می‌توان آن‌ها را بررسی کرد تا مشخص شود چه پرچم‌هایی توسط پوشش‌ها در خط فرمان قرار داده می‌شوند.

به‌طور پیش‌فرض، پوشش‌ها از کامپایلرهایی استفاده می‌کنند که هنگام پیکربندی Open MPI انتخاب شده بودند. این کامپایلرها یا به‌طور خودکار توسط اسکریپت «configure» مربوط به Open MPI پیدا شده بودند، یا پیش از فراخوانی configure توسط کاربر در متغیرهای محیطی CC، CXX و/یا FC تعیین گردیده بودند. علاوه بر این، آرگومان‌های دیگری مختص کامپایلر ممکن است توسط configure انتخاب شده باشند.

این مقادیر را می‌توان با ویرایش فایل‌های متنی حاوی اطلاعات این پیکربندی (بخش فایل‌ها (FILES) را ببینید) یا با تعیین متغیرهای محیطی انتخابی به صورت ompi_value، به‌صورت گزینشی بازنویسی کرد.

نام‌های معتبر مقادیر عبارتند از:

  • CPPFLAGS: پرچم‌های افزوده‌شده هنگام فراخوانی پیش‌پردازنده (C یا C++)
  • LDFLAGS: پرچم‌های افزوده‌شده هنگام فراخوانی پیونددهنده (C، C++ یا Fortran)
  • LIBS: کتابخانه‌های افزوده‌شده هنگام فراخوانی پیونددهنده (C، C++ یا Fortran)
  • CC: کامپایلر C
  • CFLAGS: پرچم‌های کامپایلر C
  • CXX: کامپایلر C++
  • CXXFLAGS: پرچم‌های کامپایلر C++
  • FC: کامپایلر Fortran
  • FCFLAGS: پرچم‌های کامپایلر Fortran

2003-2026, The Open MPI Community

February 23, 2026