HWLOC-DISTRIB(1) hwloc HWLOC-DISTRIB(1)

hwloc-distrib - ساخت تعدادی ماسک CPU توزیع‌شده روی سامانه

hwloc-distrib [options] <integer>

تک‌عضوی کردن هر خروجی به یک CPU واحد.
تغییر قالب رشته‌های مجموعهٔ CPU نمایش‌داده‌شده. به‌طور پیش‌فرض، از قالب مختص hwloc استفاده می‌شود. اگر list داده شود، خروجی به صورت فهرستی از اعداد یا بازه‌های جداشده با ویرگول خواهد بود، مانند 2,4-5,8 . اگر taskset داده شود، خروجی با برنامهٔ taskset سازگار خواهد بود (جایگزین گزینهٔ پیشین --taskset می‌شود).
نمایش پیام‌های با جزئیات بیشتر.
خواندن توپولوژی از <path> به جای شناسایی توپولوژی ماشین محلی.

اگر <path> یک فایل باشد، ممکن است یک فایل XML صادرشده توسط یکی از برنامه‌های قبلی hwloc باشد. اگر <path> برابر با «-» باشد، ورودی استاندارد می‌تواند به عنوان یک فایل XML استفاده شود.

در Linux، ‏<path> می‌تواند دایرکتوری‌ای شامل فایل‌های توپولوژی باشد که با hwloc-gather-topology از توپولوژی یک ماشین دیگر جمع‌آوری شده‌اند.

در x86، ‏<path> می‌تواند دایرکتوری‌ای حاوی دامپ cpuid باشد که با hwloc-gather-cpuid جمع‌آوری شده است.

هنگامی که برنامهٔ archivemount در دسترس باشد، <path> همچنین می‌تواند یک فایل tarball شامل چنین فایل‌های توپولوژی Linux یا x86 باشد.

شبیه‌سازی یک سلسله‌مراتب ساختگی (به جای شناسایی توپولوژی روی ماشین محلی). اگر <specification> برابر با "node:2 pu:3" باشد، توپولوژی شامل دو گره NUMA خواهد بود که در هر کدام ۳ واحد پردازشی (PU) وجود دارد. رشتهٔ <specification> باید به تعدادی PU ختم شود.
اجبار ورودی به قالب داده‌شده، از میان xml، ‏fsroot، cpuid و synthetic.
نادیده گرفتن تمام اشیاء از نوع <type> در توپولوژی.
آغاز توزیع از اشیاء نوع داده‌شده به جای بالای سلسله‌مراتب توپولوژی، یعنی نادیده گرفتن ساختار ناشی از اشیاء بالادست.

‏<type> نمی‌تواند از انواع NUMANode، ‏I/O یا Misc باشد.

توزیع تا سطح اشیاء نوع داده‌شده به جای رفتن تا پایین سلسله‌مراتب توپولوژی، یعنی نادیده گرفتن ساختار ناشی از اشیاء پایین‌دست. این گزینه در مواردی که مقداری آزادی‌عمل برای انتساب (binding) مد نظر باشد مفید است، مانند متصل کردن چندین فرایند به هر package بدون مشخص کردن یک هستهٔ اختصاصی برای هر یک از آن‌ها.

‏<type> نمی‌تواند از انواع NUMANode، ‏I/O یا Misc باشد.

توزیع میان اشیاء از نوع مشخص‌شده. این گزینه معادل تعیین هم‌زمان هر دو گزینهٔ --from و --to است.
توزیع با شروع از آخرین اشیاء، و تک‌عضوی کردن مجموعه‌های CPU با نگه‌داشتن آخرین بیت (به جای بیت اول).
محدود کردن توپولوژی به cpuset داده‌شده. این کار برخی از PUها و والدینی که دیگر فرزندی ندارند را حذف می‌کند.

توجه داشته باشید که محدود کردن PUها در یک توپولوژی ممکن است نمایه‌های منطقی بسیاری از اشیاء، از جمله گره‌های NUMA را تغییر دهد.

محدود کردن توپولوژی به nodeset داده‌شده (مگر اینکه --restrict-flags چیز متفاوتی را مشخص کند). این کار برخی از گره‌های NUMA و والدینی که دیگر فرزندی ندارند را حذف می‌کند.

توجه داشته باشید که محدود کردن گره‌های NUMA در یک توپولوژی ممکن است نمایه‌های منطقی بسیاری از اشیاء، از جمله PUها را تغییر دهد.

اعمال پرچم‌ها هنگام محدود کردن توپولوژی. پرچم‌ها می‌توانند به صورت مقادیر عددی یا فهرستی از نام‌های پرچم جداشده با ویرگول ارائه شوند که به hwloc_topology_restrict() ارسال می‌شوند. این نام‌ها تا زمانی که تنها با یک پرچم تطابق داشته باشند می‌توانند زیررشته‌هایی از نام‌های واقعی پرچم باشند؛ برای نمونه bynodeset,memless. مقدار پیش‌فرض 0 (یا none) است.
شامل کردن اشیایی که به دلیل محدودیت‌های مدیریتی مجاز شمرده نشده‌اند.
گزارش نسخه و خروج.
نمایش پیام راهنما و خروج.

دستور hwloc-distrib یک سری ماسک CPU متناظر با توزیع تعداد مشخصی از عناصر روی توپولوژی ماشین تولید می‌کند. این توزیع به صورت بازگشتی از بالای سلسله‌مراتب (یا از سطحی که با گزینهٔ --from مشخص شده) تا پایین سلسله‌مراتب (یا تا سطحی که با گزینهٔ --to مشخص شده، یا تا زمانی که تنها یک عنصر باقی بماند) انجام می‌شود و تعداد عناصر را در هر سطح سلسله‌مراتبیِ دیده‌شده که توسط گزینهٔ --ignore نادیده گرفته نشده است، تقسیم می‌کند.

این ابزار می‌تواند برای نمونه برای توزیع سلسله‌مراتبی مجموعه‌ای از فرایندها بر اساس توپولوژی ماشین به کار رود. این ماسک‌ها می‌توانند همراه با hwloc-bind(1) استفاده شوند.

روی CPUهای هایبرید (یا بسترهای نامتقارن)، توزیع ممکن است کاملاً بهینه نباشد چرا که تعداد هسته‌ها یا PUها درون بسته‌ها (packages) یا زیر کَش‌ها ممکن است متغیر باشد (تقسیم بازگشتی بالا به پایین، این تعداد را تا پیش از رسیدن به سطح مربوطه‌شان نادیده می‌گیرد). بنابراین توصیه می‌شود توزیع تنها درون یک دامنهٔ همگن منفرد انجام گیرد. برای نمونه در یک CPU دارای هسته‌های کم‌مصرف E-core و هسته‌های پرقدرت P-core، بهتر است N کار را به‌طور جداگانه روی E-coreها و M کار را روی P-coreها توزیع کرد، به جای اینکه تلاش شود مستقیماً M+N کار روی کل پردازنده‌ها توزیع گردد.

نکته: اکیداً توصیه می‌شود پیش از مطالعهٔ این صفحهٔ راهنما، صفحهٔ مرور کلی hwloc(7) را مطالعه کنید. بیشتر مفاهیم شرح‌داده‌شده در hwloc(7) مستقیماً در ابزار hwloc-bind نیز کاربرد دارند.

عملکرد hwloc-distrib به بهترین شکل از طریق چندین مثال شرح داده می‌شود.

اگر نیاز باشد ۴ فرایند روی یک ماشین توزیع شوند، ماسک‌های CPU آن‌ها را می‌توان با دستور زیر به دست آورد:


$ hwloc-distrib 4
0x0000000f
0x00000f00
0x000000f0
0x0000f000

برای توزیع صرفاً میان دومین package، توپولوژی باید محدود شود:


$ hwloc-distrib --restrict $(hwloc-calc package:1) 4
0x00000010
0x00000020
0x00000040
0x00000080

برای به دست آوردن یک پردازندهٔ واحد از هر یک از ماسک‌های CPU (جهت جلوگیری از جابه‌جایی در صورت اتصال):


$ hwloc-distrib 4 --single
0x00000001
0x00000100
0x00000010
0x00001000

هر خط خروجی می‌تواند به‌طور مستقل با hwloc-calc تبدیل شود:


$ hwloc-distrib 4 --single | hwloc-calc --oo -q -I pu
PU:0
PU:8
PU:4
PU:12

برای تبدیل خروجی به فهرستی از پردازنده‌ها که بتواند به dplace -c درون یک خط دستور mpirun ارسال شود:


$ hwloc-distrib 4 --single | xargs hwloc-calc -I pu
0,8,4,16

پس از اجرای موفق، hwloc-distrib یک یا چند رشتهٔ ماسک CPU را نمایش می‌دهد. مقدار بازگشتی 0 است.

در صورت بروز هرگونه خطا، مانند (اما نه محدود به) شکست در تجزیهٔ خط فرمان، hwloc-distrib مقداری غیرصفر برمی‌گرداند.

hwloc(7)

June 8, 2026 2.14.0