nvidia-cuda-mps-control(1) NVIDIA nvidia-cuda-mps-control(1) نام (NAME) nvidia-cuda-mps-control - برنامه مدیریت سرویس چندپردازشی NVIDIA CUDA (MPS) خلاصه دستور (SYNOPSIS) nvidia-cuda-mps-control [-d | -f] توضیحات (DESCRIPTION) سرویس MPS یک سرویس زمان اجرا است که برای اجرای هم‌روند چندین فرایند MPI با استفاده از CUDA طراحی شده است، به طوری که این روند برای برنامه MPI کاملاً شفاف باشد. اگر دیمن کنترلی MPS روی سیستم در حال اجرا باشد، برنامه CUDA در حالت MPS اجرا می‌شود. هنگامی که CUDA برای اولین بار در یک برنامه مقداردهی اولیه می‌شود، درایور CUDA تلاش می‌کند به دیمن کنترلی MPS متصل شود. اگر اتصال ناموفق باشد، برنامه به کار خود همانند حالت عادی و بدون MPS ادامه می‌دهد. اما اگر اتصال به دیمن کنترلی موفقیت‌آمیز باشد، درایور CUDA از دیمن درخواست می‌کند تا یک سرور MPS را از طرف آن راه‌اندازی کند. اگر از قبل یک سرور MPS در حال اجرا باشد و شناسه کاربری (UID) فرایند آن سرور با فرایند کلاینت درخواست‌کننده مطابقت داشته باشد، دیمن کنترلی این موضوع را به کلاینت اطلاع داده و کلاینت به سرور متصل می‌شود. اگر هیچ سرور MPS روی سیستم در حال اجرا نباشد، دیمن کنترلی یک سرور MPS با همان شناسه کاربری (UID) کلاینت درخواست‌کننده راه‌اندازی می‌کند. اگر سرور MPS از قبل در حال اجرا باشد اما شناسه کاربری متفاوتی با فرایند کلاینت داشته باشد، دیمن کنترلی از سرور موجود می‌خواهد تا به محض پایان کار تمامی کلاینت‌هایش خاموش شود. پس از خاتمه سرور قبلی، دیمن کنترلی سرور جدیدی با شناسه کاربری کلاینتِ در صف انتظار اجرا می‌کند. سرور MPS کانتکست (context) مشترک GPU را ایجاد کرده و کلاینت‌های خود را مدیریت می‌کند. یک سرور MPS می‌تواند از تعداد محدودی کانتکست CUDA که توسط معماری سخت‌افزاری آن تعیین می‌شود پشتیبانی کند. برای قابلیت محاسباتی SM 3.5 تا SM 6.0 این محدودیت ۱۶ کلاینت همزمان به ازای هر GPU است. برای قابلیت محاسباتی SM 7.0 این محدودیت ۴۸ کلاینت است. MPS برای برنامه‌های CUDA شفاف است و تمامی پیچیدگی‌های ارتباط بین فرایند کلاینت، سرور و دیمن کنترلی درون باینری‌های درایور پنهان شده است. در حال حاضر، CUDA MPS تنها در لینوکس ۶۴ بیتی در دسترس است، به دستگاهی با قابلیت پشتیبانی از آدرس‌دهی مجازی یکپارچه (UVA) نیاز دارد و باید دارای قابلیت محاسباتی SM 3.5 یا بالاتر باشد. برنامه‌هایی که به رابط‌های برنامه‌نویسی پیش از CUDA 4.0 نیاز دارند، تحت CUDA MPS پشتیبانی نمی‌شوند. برخی قابلیت‌های خاص تنها از قابلیت محاسباتی SM 7.0 به بعد در دسترس هستند. برای جزئیات بیشتر به مستندات MPS در NVIDIA Docs مراجعه کنید. گزینه‌ها (OPTIONS) -d دیمن کنترلی MPS را در حالت پس‌زمینه راه‌اندازی می‌کند، با این فرض که کاربر دسترسی لازم (مانند دسترسی ریشه/root) را داراست. فرایند والد به محض اینکه دیمن کنترلی شروع به گوش دادن به اتصالات کلاینت‌ها کند، خارج می‌شود. -f دیمن کنترلی MPS را در حالت پیش‌زمینه راه‌اندازی می‌کند، با این فرض که کاربر دسترسی لازم (مانند دسترسی ریشه/root) را داراست. پیام‌های اشکال‌زدایی (دیباگ) به خروجی استاندارد ارسال می‌شوند. -multiuser-server شرط تک‌کاربری بودن (تک-UID) را برمی‌دارد و اجازه می‌دهد هر شناسه کاربری (UID) بتواند به سرور MPS که با کاربر ریشه (root) راه‌اندازی شده متصل شده و آن را به اشتراک بگذارد. -h, --help نمایش پیام راهنما. رابط کاربری پیشانه (front-end) برای دیمن کنترلی MPS را راه‌اندازی می‌کند که خود دیمن باید از قبل راه‌اندازی شده باشد. این رابط کاربری تا زمان رسیدن به انتهای فایل (EOF) دستورات را از ورودی استاندارد (stdin) می‌خواند. دستورات با نویسه خط جدید (newline) از هم جدا می‌شوند. اگر دستور نامعتبری ارسال و رد شود، پیام خطا در خروجی استاندارد (stdout) چاپ خواهد شد. وضعیت خروج در صورت برقراری ارتباط موفق با دیمن، صفر خواهد بود. در صورتی که دیمن یافت نشود یا ارتباط به طور غیرمنتظره‌ای قطع گردد، یک مقدار غیرصفر بازگردانده می‌شود. برای اطلاعات بیشتر درباره وضعیت خروج، به دستور "quit" در زیر مراجعه کنید. دستورات پشتیبانی‌شده توسط دیمن کنترلی MPS: get_server_list چاپ فهرستی از شناسه‌های فرایند (PID) تمامی سرورهای MPS. get_server_status PID چاپ وضعیت سرور با شناسه داده‌شده (PID). start_server -uid UID راه‌اندازی یک سرور MPS جدید برای کاربر مشخص‌شده (UID). shutdown_server PID [-f] خاموش کردن سرور MPS با شناسه مشخص‌شده PID. سرور MPS تنها پس از قطع ارتباط تمامی کلاینت‌ها خارج می‌شود و ممکن است مادامی که کلاینتی متصل است کلاینت‌های جدیدی را بپذیرد. آرگومان -f خاموش‌سازی فوری و اجباری را اعمال می‌کند. اگر کلاینتی کرنل معیوبی را اجرا کند که تا ابد اجرا شود، ممکن است خاموش‌سازی اجباری سرور MPS لازم باشد، چرا که سرور MPS کارهای GPU را از جانب کلاینت‌های خود ایجاد و صادر می‌کند. get_client_list PID چاپ فهرستی از شناسه‌های فرایند (PID) تمام کلاینت‌های متصل به سرور MPS با شناسه داده‌شده PID. quit [-t TIMEOUT] خاموش کردن فرایند دیمن کنترلی MPS و تمامی سرورهای MPS. دیمن کنترلی در حین انتظار برای به پایان رسیدن کار سرورها و کلاینت‌های کنونی MPS، از پذیرش کلاینت‌های جدید خودداری می‌کند. اگر TIMEOUT (بر حسب ثانیه) تعیین شده باشد، دیمن در صورت در حال اجرا ماندن سرورهای MPS پس از TIMEOUT ثانیه، آن‌ها را به اجبار خاموش خواهد کرد. این دستور همگام (synchronous) است. رابط کاربری فرانت‌اند منتظر خاموش شدن دیمن می‌ماند و سپس وضعیت خروج دیمن را بازمی‌گرداند. وضعیت خروج تنها و تنها زمانی صفر است که تمامی سرورهای MPS به‌صورت منظم و بدون اشکال خارج شده باشند. دستورات موجود برای دیمن کنترلی MPS در معماری Volta: get_device_client_list PID فهرست کردن دستگاه‌ها و PIDهای برنامه‌های کلاینتی که این دستگاه را شمارش کرده‌اند. این دستور به صورت اختیاری PID نمونه سرور را می‌پذیرد. set_default_active_thread_percentage percentage تنظیم درصد پیش‌فرض ریسمان‌های فعال (active thread) برای سرورهای MPS. در صورتی که سروری از قبل ایجاد شده باشد، این دستور تنها بر سرور بعدی تأثیر می‌گذارد. مقدار تنظیم‌شده با اجرای دستور quit از دست می‌رود. مقدار پیش‌فرض ۱۰۰ است. get_default_active_thread_percentage استعلام درصد ریسمان‌های فعال در دسترس پیش‌فرض کنونی. set_active_thread_percentage PID percentage تنظیم درصد ریسمان‌های فعال برای نمونه سرور MPS با PID داده‌شده. تمامی کلاینت‌هایی که پس از آن روی آن سرور ایجاد شوند از حد جدید پیروی می‌کنند. کلاینت‌های موجود تحت تأثیر قرار نمی‌گیرند. get_active_thread_percentage PID استعلام درصد ریسمان‌های فعال در دسترس فعلی نمونه سرور MPS با PID داده‌شده. set_default_device_pinned_mem_limit dev value تنظیم حد پیش‌فرض حافظه قفل‌شده (pinned memory) دستگاه برای سرورهای MPS. در صورتی که سروری از قبل ایجاد شده باشد، این دستور تنها بر سرور بعدی تأثیر می‌گذارد. مقدار باید به صورت یک عدد صحیح و به دنبال آن یکی از حروف “G” یا “M” باشد که به ترتیب مقدار را بر حسب گیگابایت یا مگابایت مشخص می‌کند. get_default_device_pinned_mem_limit dev استعلام حد پیش‌فرض کنونی حافظه قفل‌شده دستگاه. set_device_pinned_mem_limit PID dev value لغو و بازنویسی حد حافظه قفل‌شده دستگاه برای سرور MPS با PID داده‌شده. تمامی کلاینت‌هایی که پس از آن روی آن سرور ایجاد شوند از حد جدید پیروی می‌کنند. کلاینت‌های موجود تحت تأثیر قرار نمی‌گیرند. get_default_device_pinned_mem_limit PID dev استعلام حد کنونی حافظه قفل‌شده دستگاه نمونه سرور MPS با PID داده‌شده برای دستگاه dev. terminate_client server PID client PID خاتمه دادن به تمامی پردازش‌های در انتظار GPU مربوط به فرایند کلاینت با شناسه client PID مشخص‌شده که بر روی سرور MPS مشخص‌شده با server PID اجرا می‌شود. ps [-p PID] گزارش یک تصویر لحظه‌ای (snapshot) از فرایندهای کلاینت کنونی. set_default_client_priority priority تنظیم سطح اولویت کلاینت که برای کلاینت‌های جدید استفاده خواهد شد. مقادیر اولویت تنها به عنوان پیشنهاد (hint) به درایور CUDA در نظر گرفته می‌شوند و بسته به بستر اجرایی ممکن است نادیده گرفته شده یا لغو شوند. priority از قاعده‌ای پیروی می‌کند که در آن اعداد کوچک‌تر اولویت‌های بالاتر محسوب می‌شوند و مقدار اولویت پیش‌فرض 0 است. تنها مقدار پشتیبانی‌شده دیگر برای priority عدد 1 است که نشان‌دهنده اولویت پایین‌تر از حد معمول است. get_default_client_priority استعلام مقدار اولویت پیش‌فرض کنونی که برای کلاینت‌های جدید استفاده خواهد شد. محیط (ENVIRONMENT) CUDA_MPS_PIPE_DIRECTORY مشخص کردن دایرکتوری حاوی لوله‌های نام‌گذاری‌شده (named pipes) و سوکت‌های دامنه یونیکس (UNIX domain sockets) مورد استفاده برای ارتباط میان بخش کنترل MPS، سرور MPS و کلاینت‌های MPS. مقدار این متغیر محیطی باید در دیمن کنترلی MPS و تمامی فرایندهای کلاینت یکسان باشد. دایرکتوری پیش‌فرض /tmp/nvidia-mps است. CUDA_MPS_LOG_DIRECTORY مشخص کردن دایرکتوری حاوی فایل‌های وقایع (log) مربوط به MPS. این متغیر تنها توسط دیمن کنترلی MPS استفاده می‌شود. دایرکتوری پیش‌فرض /var/log/nvidia-mps است. CUDA_VISIBLE_DEVICES مشخص کردن دستگاه‌های CUDA که برای دیمن کنترلی قابل مشاهده هستند. یک مقدار عددی شاخص (index) یا UUID دریافت می‌کند. CUDA_DEVICE_MAX_CONNECTIONS مشخص کردن تعداد اتصالات ترجیحی بین میزبان (host) و دستگاه (device). CUDA_MPS_ACTIVE_THREAD_PERCENTAGE مشخص کردن بخشی از ریسمان‌های در دسترس که کلاینت‌ها می‌توانند در سخت‌افزارهای +Volta از آن استفاده کنند. تنظیم این متغیر برای دیمن کنترلی، درصد پیش‌فرض ریسمان‌های فعال را برای تمام سرورهای ایجادشده تنظیم می‌کند، در حالی که تنظیم آن برای یک کلاینت یا کانتکست کلاینت، درصد ریسمان فعال را برای همان واحد محدود می‌سازد و نمی‌تواند از مقدار تعیین‌شده برای دیمن کنترلی بیشتر باشد. CUDA_MPS_ENABLE_PER_CTX_DEVICE_MULTIPROCESSOR_PARTITIONING مشخص کردن اینکه آیا کانتکست‌های مجزای کلاینت اجازه دارند مقادیر متفاوتی برای CUDA_MPS_ACTIVE_THREAD_PERCENTAGE داشته باشند یا خیر. CUDA_MPS_PINNED_DEVICE_MEM_LIMIT مشخص کردن مقدار حافظه GPU در دسترس برای فرایندهای کلاینت MPS. CUDA_MPS_CLIENT_PRIORITY مشخص کردن مقدار اولویت پیش‌فرض کلاینت در زمان مقداردهی اولیه. فایل‌ها (FILES) فایل‌های لاگ ایجادشده توسط دیمن کنترلی MPS در دایرکتوری مشخص‌شده: control.log ثبت راه‌اندازی و خاموش شدن دیمن کنترلی MPS، دستورات صادرشده توسط کاربر به همراه نتایج آنها و وضعیت سرورهای MPS. server.log ثبت راه‌اندازی و خاموش شدن سرورهای MPS و وضعیت کلاینت‌های MPS. nvidia-cuda-mps-control 2013-02-26 nvidia-cuda-mps-control(1)