.TH "nvidia-cuda-mps-control" "1" "2013-02-26" "nvidia-cuda-mps-control" "NVIDIA" .SH "نام (NAME)" nvidia-cuda-mps-control \- برنامه مدیریت سرویس چندپردازشی NVIDIA CUDA (MPS) .SH "خلاصه دستور (SYNOPSIS)" .PP \fBnvidia-cuda-mps-control\fR [\fB-d | -f\fR] .SH "توضیحات (DESCRIPTION)" .PP سرویس MPS یک سرویس زمان اجرا است که برای اجرای هم‌روند چندین فرایند MPI با استفاده از CUDA طراحی شده است، به طوری که این روند برای برنامه MPI کاملاً شفاف باشد. اگر دیمن کنترلی MPS روی سیستم در حال اجرا باشد، برنامه CUDA در حالت MPS اجرا می‌شود. .PP هنگامی که CUDA برای اولین بار در یک برنامه مقداردهی اولیه می‌شود، درایور CUDA تلاش می‌کند به دیمن کنترلی MPS متصل شود. اگر اتصال ناموفق باشد، برنامه به کار خود همانند حالت عادی و بدون MPS ادامه می‌دهد. اما اگر اتصال به دیمن کنترلی موفقیت‌آمیز باشد، درایور CUDA از دیمن درخواست می‌کند تا یک سرور MPS را از طرف آن راه‌اندازی کند. اگر از قبل یک سرور MPS در حال اجرا باشد و شناسه کاربری (UID) فرایند آن سرور با فرایند کلاینت درخواست‌کننده مطابقت داشته باشد، دیمن کنترلی این موضوع را به کلاینت اطلاع داده و کلاینت به سرور متصل می‌شود. اگر هیچ سرور MPS روی سیستم در حال اجرا نباشد، دیمن کنترلی یک سرور MPS با همان شناسه کاربری (UID) کلاینت درخواست‌کننده راه‌اندازی می‌کند. اگر سرور MPS از قبل در حال اجرا باشد اما شناسه کاربری متفاوتی با فرایند کلاینت داشته باشد، دیمن کنترلی از سرور موجود می‌خواهد تا به محض پایان کار تمامی کلاینت‌هایش خاموش شود. پس از خاتمه سرور قبلی، دیمن کنترلی سرور جدیدی با شناسه کاربری کلاینتِ در صف انتظار اجرا می‌کند. .PP سرور MPS کانتکست (context) مشترک GPU را ایجاد کرده و کلاینت‌های خود را مدیریت می‌کند. یک سرور MPS می‌تواند از تعداد محدودی کانتکست CUDA که توسط معماری سخت‌افزاری آن تعیین می‌شود پشتیبانی کند. برای قابلیت محاسباتی SM 3.5 تا SM 6.0 این محدودیت ۱۶ کلاینت همزمان به ازای هر GPU است. برای قابلیت محاسباتی SM 7.0 این محدودیت ۴۸ کلاینت است. MPS برای برنامه‌های CUDA شفاف است و تمامی پیچیدگی‌های ارتباط بین فرایند کلاینت، سرور و دیمن کنترلی درون باینری‌های درایور پنهان شده است. .PP در حال حاضر، CUDA MPS تنها در لینوکس ۶۴ بیتی در دسترس است، به دستگاهی با قابلیت پشتیبانی از آدرس‌دهی مجازی یکپارچه (UVA) نیاز دارد و باید دارای قابلیت محاسباتی SM 3.5 یا بالاتر باشد. برنامه‌هایی که به رابط‌های برنامه‌نویسی پیش از CUDA 4.0 نیاز دارند، تحت CUDA MPS پشتیبانی نمی‌شوند. برخی قابلیت‌های خاص تنها از قابلیت محاسباتی SM 7.0 به بعد در دسترس هستند. .PP برای جزئیات بیشتر به مستندات MPS در NVIDIA Docs مراجعه کنید. .SH "گزینه‌ها (OPTIONS)" .SS "-d" دیمن کنترلی MPS را در حالت پس‌زمینه راه‌اندازی می‌کند، با این فرض که کاربر دسترسی لازم (مانند دسترسی ریشه/root) را داراست. فرایند والد به محض اینکه دیمن کنترلی شروع به گوش دادن به اتصالات کلاینت‌ها کند، خارج می‌شود. .SS "-f" دیمن کنترلی MPS را در حالت پیش‌زمینه راه‌اندازی می‌کند، با این فرض که کاربر دسترسی لازم (مانند دسترسی ریشه/root) را داراست. پیام‌های اشکال‌زدایی (دیباگ) به خروجی استاندارد ارسال می‌شوند. .SS "-multiuser-server" شرط تک‌کاربری بودن (تک-UID) را برمی‌دارد و اجازه می‌دهد هر شناسه کاربری (UID) بتواند به سرور MPS که با کاربر ریشه (root) راه‌اندازی شده متصل شده و آن را به اشتراک بگذارد. .SS "-h, --help" نمایش پیام راهنما. .SS "" رابط کاربری پیشانه (front-end) برای دیمن کنترلی MPS را راه‌اندازی می‌کند که خود دیمن باید از قبل راه‌اندازی شده باشد. این رابط کاربری تا زمان رسیدن به انتهای فایل (EOF) دستورات را از ورودی استاندارد (stdin) می‌خواند. دستورات با نویسه خط جدید (newline) از هم جدا می‌شوند. اگر دستور نامعتبری ارسال و رد شود، پیام خطا در خروجی استاندارد (stdout) چاپ خواهد شد. وضعیت خروج در صورت برقراری ارتباط موفق با دیمن، صفر خواهد بود. در صورتی که دیمن یافت نشود یا ارتباط به طور غیرمنتظره‌ای قطع گردد، یک مقدار غیرصفر بازگردانده می‌شود. برای اطلاعات بیشتر درباره وضعیت خروج، به دستور "quit" در زیر مراجعه کنید. .PP دستورات پشتیبانی‌شده توسط دیمن کنترلی MPS: .TP \fBget_server_list\fR چاپ فهرستی از شناسه‌های فرایند (PID) تمامی سرورهای MPS. .TP \fBget_server_status \fIPID\fR چاپ وضعیت سرور با شناسه داده‌شده (\fIPID\fR). .TP \fBstart_server\fR \fB-uid\fR \fIUID\fR راه‌اندازی یک سرور MPS جدید برای کاربر مشخص‌شده (\fIUID\fR). .TP \fBshutdown_server\fR \fIPID\fR [\fB-f\fR] خاموش کردن سرور MPS با شناسه مشخص‌شده \fIPID\fR. سرور MPS تنها پس از قطع ارتباط تمامی کلاینت‌ها خارج می‌شود و ممکن است مادامی که کلاینتی متصل است کلاینت‌های جدیدی را بپذیرد. آرگومان \fB-f\fR خاموش‌سازی فوری و اجباری را اعمال می‌کند. اگر کلاینتی کرنل معیوبی را اجرا کند که تا ابد اجرا شود، ممکن است خاموش‌سازی اجباری سرور MPS لازم باشد، چرا که سرور MPS کارهای GPU را از جانب کلاینت‌های خود ایجاد و صادر می‌کند. .TP \fBget_client_list\fR \fIPID\fR چاپ فهرستی از شناسه‌های فرایند (PID) تمام کلاینت‌های متصل به سرور MPS با شناسه داده‌شده \fIPID\fR. .TP \fBquit\fR [\fB-t\fR \fITIMEOUT\fR] خاموش کردن فرایند دیمن کنترلی MPS و تمامی سرورهای MPS. دیمن کنترلی در حین انتظار برای به پایان رسیدن کار سرورها و کلاینت‌های کنونی MPS، از پذیرش کلاینت‌های جدید خودداری می‌کند. اگر \fITIMEOUT\fR (بر حسب ثانیه) تعیین شده باشد، دیمن در صورت در حال اجرا ماندن سرورهای MPS پس از \fITIMEOUT\fR ثانیه، آن‌ها را به اجبار خاموش خواهد کرد. این دستور همگام (synchronous) است. رابط کاربری فرانت‌اند منتظر خاموش شدن دیمن می‌ماند و سپس وضعیت خروج دیمن را بازمی‌گرداند. وضعیت خروج تنها و تنها زمانی صفر است که تمامی سرورهای MPS به‌صورت منظم و بدون اشکال خارج شده باشند. .TP دستورات موجود برای دیمن کنترلی MPS در معماری Volta: .TP \fBget_device_client_list\fR \fIPID\fR فهرست کردن دستگاه‌ها و PIDهای برنامه‌های کلاینتی که این دستگاه را شمارش کرده‌اند. این دستور به صورت اختیاری PID نمونه سرور را می‌پذیرد. .TP \fBset_default_active_thread_percentage\fR \fIpercentage\fR تنظیم درصد پیش‌فرض ریسمان‌های فعال (active thread) برای سرورهای MPS. در صورتی که سروری از قبل ایجاد شده باشد، این دستور تنها بر سرور بعدی تأثیر می‌گذارد. مقدار تنظیم‌شده با اجرای دستور quit از دست می‌رود. مقدار پیش‌فرض ۱۰۰ است. .TP \fBget_default_active_thread_percentage\fR استعلام درصد ریسمان‌های فعال در دسترس پیش‌فرض کنونی. .TP \fBset_active_thread_percentage\fR \fIPID\fR \fIpercentage\fR تنظیم درصد ریسمان‌های فعال برای نمونه سرور MPS با PID داده‌شده. تمامی کلاینت‌هایی که پس از آن روی آن سرور ایجاد شوند از حد جدید پیروی می‌کنند. کلاینت‌های موجود تحت تأثیر قرار نمی‌گیرند. .TP \fBget_active_thread_percentage\fR \fIPID\fR استعلام درصد ریسمان‌های فعال در دسترس فعلی نمونه سرور MPS با PID داده‌شده. .TP \fBset_default_device_pinned_mem_limit\fR \fIdev\fR \fIvalue\fR تنظیم حد پیش‌فرض حافظه قفل‌شده (pinned memory) دستگاه برای سرورهای MPS. در صورتی که سروری از قبل ایجاد شده باشد، این دستور تنها بر سرور بعدی تأثیر می‌گذارد. مقدار باید به صورت یک عدد صحیح و به دنبال آن یکی از حروف \(lqG\(rq یا \(lqM\(rq باشد که به ترتیب مقدار را بر حسب گیگابایت یا مگابایت مشخص می‌کند. .TP \fBget_default_device_pinned_mem_limit\fR \fIdev\fR استعلام حد پیش‌فرض کنونی حافظه قفل‌شده دستگاه. .TP \fBset_device_pinned_mem_limit\fR \fIPID\fR \fIdev\fR \fIvalue\fR لغو و بازنویسی حد حافظه قفل‌شده دستگاه برای سرور MPS با PID داده‌شده. تمامی کلاینت‌هایی که پس از آن روی آن سرور ایجاد شوند از حد جدید پیروی می‌کنند. کلاینت‌های موجود تحت تأثیر قرار نمی‌گیرند. .TP \fBget_default_device_pinned_mem_limit\fR \fIPID\fR \fIdev\fR استعلام حد کنونی حافظه قفل‌شده دستگاه نمونه سرور MPS با PID داده‌شده برای دستگاه dev. .TP \fBterminate_client\fR \fIserver PID\fR \fIclient PID\fR خاتمه دادن به تمامی پردازش‌های در انتظار GPU مربوط به فرایند کلاینت با شناسه client PID مشخص‌شده که بر روی سرور MPS مشخص‌شده با server PID اجرا می‌شود. .TP \fBps\fR [\fB-p\fR \fIPID\fR] گزارش یک تصویر لحظه‌ای (snapshot) از فرایندهای کلاینت کنونی. .TP \fBset_default_client_priority\fR \fIpriority\fR تنظیم سطح اولویت کلاینت که برای کلاینت‌های جدید استفاده خواهد شد. مقادیر اولویت تنها به عنوان پیشنهاد (hint) به درایور CUDA در نظر گرفته می‌شوند و بسته به بستر اجرایی ممکن است نادیده گرفته شده یا لغو شوند. \fIpriority\fR از قاعده‌ای پیروی می‌کند که در آن اعداد کوچک‌تر اولویت‌های بالاتر محسوب می‌شوند و مقدار اولویت پیش‌فرض 0 است. تنها مقدار پشتیبانی‌شده دیگر برای \fIpriority\fR عدد 1 است که نشان‌دهنده اولویت پایین‌تر از حد معمول است. .TP \fBget_default_client_priority\fR استعلام مقدار اولویت پیش‌فرض کنونی که برای کلاینت‌های جدید استفاده خواهد شد. .SH "محیط (ENVIRONMENT)" .TP \fBCUDA_MPS_PIPE_DIRECTORY\fR مشخص کردن دایرکتوری حاوی لوله‌های نام‌گذاری‌شده (named pipes) و سوکت‌های دامنه یونیکس (UNIX domain sockets) مورد استفاده برای ارتباط میان بخش کنترل MPS، سرور MPS و کلاینت‌های MPS. مقدار این متغیر محیطی باید در دیمن کنترلی MPS و تمامی فرایندهای کلاینت یکسان باشد. دایرکتوری پیش‌فرض /tmp/nvidia-mps است. .TP \fBCUDA_MPS_LOG_DIRECTORY\fR مشخص کردن دایرکتوری حاوی فایل‌های وقایع (log) مربوط به MPS. این متغیر تنها توسط دیمن کنترلی MPS استفاده می‌شود. دایرکتوری پیش‌فرض /var/log/nvidia-mps است. .TP \fBCUDA_VISIBLE_DEVICES\fR مشخص کردن دستگاه‌های CUDA که برای دیمن کنترلی قابل مشاهده هستند. یک مقدار عددی شاخص (index) یا UUID دریافت می‌کند. .TP \fBCUDA_DEVICE_MAX_CONNECTIONS\fR مشخص کردن تعداد اتصالات ترجیحی بین میزبان (host) و دستگاه (device). .TP \fBCUDA_MPS_ACTIVE_THREAD_PERCENTAGE\fR مشخص کردن بخشی از ریسمان‌های در دسترس که کلاینت‌ها می‌توانند در سخت‌افزارهای +Volta از آن استفاده کنند. تنظیم این متغیر برای دیمن کنترلی، درصد پیش‌فرض ریسمان‌های فعال را برای تمام سرورهای ایجادشده تنظیم می‌کند، در حالی که تنظیم آن برای یک کلاینت یا کانتکست کلاینت، درصد ریسمان فعال را برای همان واحد محدود می‌سازد و نمی‌تواند از مقدار تعیین‌شده برای دیمن کنترلی بیشتر باشد. .TP \fBCUDA_MPS_ENABLE_PER_CTX_DEVICE_MULTIPROCESSOR_PARTITIONING\fR مشخص کردن اینکه آیا کانتکست‌های مجزای کلاینت اجازه دارند مقادیر متفاوتی برای \fBCUDA_MPS_ACTIVE_THREAD_PERCENTAGE\fR داشته باشند یا خیر. .TP \fBCUDA_MPS_PINNED_DEVICE_MEM_LIMIT\fR مشخص کردن مقدار حافظه GPU در دسترس برای فرایندهای کلاینت MPS. .TP \fBCUDA_MPS_CLIENT_PRIORITY\fR مشخص کردن مقدار اولویت پیش‌فرض کلاینت در زمان مقداردهی اولیه. .SH "فایل‌ها (FILES)" فایل‌های لاگ ایجادشده توسط دیمن کنترلی MPS در دایرکتوری مشخص‌شده: .TP \fBcontrol.log\fR ثبت راه‌اندازی و خاموش شدن دیمن کنترلی MPS، دستورات صادرشده توسط کاربر به همراه نتایج آنها و وضعیت سرورهای MPS. .TP \fBserver.log\fR ثبت راه‌اندازی و خاموش شدن سرورهای MPS و وضعیت کلاینت‌های MPS.