در گذشته، CPUعنصر پردازشی اصلی یک کامپیوتر بود. CPUمخفف Central Processing Unitاست و به عنوان پردازنده شناخته میشود. بعدها، چندین CPUدر یک گره ادغام شدند. اکنون هر CPUدارای چندین هسته است و هرکدام از این هستهها یک عنصر پردازشی هستند. پردازندههایی که دارای چندین هسته هستند، پردازندههای چندهستهای نامیده میشوند. بنابراین اکنون یک گره شامل یک یا چند پردازنده است و هر پردازنده چندین هسته دارد.
در مستندات Henry2، ما به گرهای اشاره میکنیم که چندین پردازنده با هستههای متعدد دارد. تعاریف نرمافزاری نیز میتواند گیجکننده باشد و بسته به فردی که با او صحبت میکنید، ممکن است متفاوت باشد.
در مستندات Henry2، از این اصطلاحات استفاده میکنیم. یک شغل شامل همه چیزهایی است که در یک اسکریپت مینویسید و به LSF ارسال میکنید. وقتی کاری را اجرا میکنید، در حال انجام وظایف هستید. میتوانید یک یا چند وظیفه انجام دهید. وظایف میتوانند مرتبط باشند، اما لزومی ندارد. اگر کاری که باید توسط یک وظیفه انجام شود را بتوان به قطعات کوچکتر تقسیم کرد، به آن قطعات "نخ" گفته میشود. وظایف گاهی اوقات فرآیند نیز نامیده میشوند و این اصطلاحات میتوانند به جای یکدیگر استفاده شوند.
هدف اصلی ما این است که شما نحوه درخواست منابع برای شغل خود را بدانید.
در اینجا نمودار یک گره منفرد آورده شده است. گره دارای چندین هسته، حافظه مشترک بین همه هستهها و مقداری فضای دیسک است. گرهها از طریق یک شبکه با یکدیگر ارتباط برقرار میکنند. شما شغل خود را به LSF ارسال میکنید، و اگر شغل شما یک کار موازی باشد، میتوان آن را به وظایف یا رشتهها تقسیم کرد. برای هر وظیفه یا رشته باید یک هسته رزرو کنید. شبکه سختافزاری است که به دو گره اجازه ارتباط میدهد، اما نرمافزاری که این ارتباط را امکانپذیر میکند، MPI یا Message Passing Interfaceنامیده میشود.
اگر شما یا نویسنده برنامه شما، کد را برای استفاده از MPIبرنامهریزی نکرده باشد، کد شما نمیتواند از طریق شبکه ارتباط برقرار کند. بدون MPI، هستههای یک گره نمیتوانند به حافظه گره دیگر دسترسی داشته باشند. این بدان معناست که همه وظایف باید به یک گره محدود شوند، جایی که همه آنها به یک حافظه مشترک دسترسی دارند. کارهای موازی که فقط میتوانند از یک گره استفاده کنند، کارهای حافظه مشترک نامیده میشوند. اگر کد شما با MPI نوشته شده باشد، وظایف میتوانند در چندین گره توزیع شوند، زیرا حافظه استفاده شده توسط برنامه میتواند بین گرهها توزیع شود. کارهای موازی که میتوانند از چندین گره استفاده کنند، کارهای حافظه توزیعشده نامیده میشوند.
مشخصکننده اختیاری بعدی، BSUB -R span است. مشخصکننده span به LSFمیگوید که چگونه هستهها را بر روی گرهها مرتب کند. گزینهها شامل تعیین این است که تمام هستهها باید روی یک گره با host=1باشند. گزینه بعدی این است که میتوانید تعداد هستهها در هر گره را با ptile مشخص کنید.
هنگام اجرای یک کار حافظه توزیعشده، با توجه به تعداد وظایف یا فرآیندهای MPI، n را درخواست کنید. کارهای MPI باید محیط MPI را تنظیم کنند و باید از mpirun استفاده کنند. این بدان معناست که شما باید ماژولی را بارگیری کنید که دارای MPIاست و قبل از فراخوانی برنامه باید mpirunرا اضافه کنید. همچنین ممکن است بخواهید spanرا مشخص کنید، که به معنی تعیین تعداد وظایفی است که باید روی هر گره قرار دهید.
دو دلیل برای استفاده از ptile وجود دارد:
اولین دلیل برای محدود کردن تعداد وظایف MPI در هر گره این است که هر وظیفه حافظه زیادی را مصرف میکند. دلیل دوم میتواند این باشد که شما یک کد ترکیبی اجرا میکنید، که در آن وظایف MPIممکن است رشتههایی ایجاد کنند.