.\" Man page generated from reStructuredText .\" by the Docutils 0.23 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "LLVM-MCA" "1" "2026-07-15" "22" "LLVM" .SH "نام (NAME)" llvm-mca \- تحلیل‌گر کد ماشین LLVM .SH "خلاصه دستور (SYNOPSIS)" .sp \fBllvm\-mca\fP [\fIگزینه‌ها\fP] [\fIورودی\fP] .SH "توضیحات (DESCRIPTION)" .sp \fBllvm\-mca\fP یک ابزار تحلیل کارایی است که با استفاده از اطلاعات موجود در LLVM (مانند مدل‌های زمان‌بندی)، کارایی کد ماشین را در یک CPU مشخص به‌صورت ایستا می‌سنجد. .sp کارایی بر حسب توان عملیاتی (throughput) و همچنین میزان مصرف منابع پردازنده سنجیده می‌شود. این ابزار در حال حاضر برای پردازنده‌هایی کار می‌کند که دارای یک backend با مدل زمان‌بندی در دسترس در LLVM باشند. .sp هدف اصلی این ابزار نه تنها پیش‌بینی کارایی کد در زمان اجرا روی مقصد، بلکه کمک به عیب‌یابی و شناسایی مشکلات احتمالی کارایی است. .sp با دریافت یک دنباله کد اسمبلی، \fBllvm\-mca\fP تعداد دستورات در هر چرخه (IPC یا Instructions Per Cycle) و همچنین فشار بر منابع سخت‌افزاری را تخمین می‌زند. سبک تحلیل و گزارش‌دهی این ابزار از ابزار IACA شرکت Intel الهام گرفته شده است. .sp برای نمونه، می‌توانید کد را با clang کامپایل کنید، خروجی اسمبلی بگیرید و آن را مستقیماً از طریق لوله (pipe) برای تحلیل به \fBllvm\-mca\fP هدایت کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX $ clang foo.c \-O2 \-\-target=x86_64 \-S \-o \- | llvm\-mca \-mcpu=btver2 .EE .UNINDENT .UNINDENT .sp یا برای نحو (سینتکس) Intel: .INDENT 0.0 .INDENT 3.5 .sp .EX $ clang foo.c \-O2 \-\-target=x86_64 \-masm=intel \-S \-o \- | llvm\-mca \-mcpu=btver2 .EE .UNINDENT .UNINDENT .sp (\fBllvm\-mca\fP نحو Intel را از طریق وجود یک دستورالعمل \fI\&.intel_syntax\fP در ابتدای ورودی تشخیص می‌دهد. به‌طور پیش‌فرض نحو خروجی آن با نحو ورودی مطابقت دارد.) .sp مدل‌های زمان‌بندی نه تنها برای محاسبه تاخیر (latency) و توان عملیاتی دستورالعمل‌ها، بلکه برای درک منابع دردسترس پردازنده و نحوه شبیه‌سازی آن‌ها استفاده می‌شوند. .sp به لحاظ طراحی، کیفیت تحلیل انجام‌شده توسط \fBllvm\-mca\fP ناگزیر تحت تأثیر کیفیت مدل‌های زمان‌بندی در LLVM است. .sp اگر مشاهده کردید که گزارش کارایی برای یک پردازنده دقیق نیست، لطفاً یک گزارش خطا در \% برای backend مربوطه ارسال کنید..SH "گزینه‌ها (OPTIONS)" .sp اگر \fBinput\fP برابر با \(dq\fB\-\fP\(dq باشد یا مشخص نشود، \fBllvm\-mca\fP از ورودی استاندارد می‌خواند. در غیر این صورت، از نام فایل مشخص‌شده خواهد خواند. .sp اگر گزینهٔ \fB\-o\fP مشخص نشود، در صورتی که ورودی از ورودی استاندارد باشد، \fBllvm\-mca\fP خروجی خود را به خروجی استاندارد ارسال می‌کند. اگر گزینهٔ \fB\-o\fP مقدار \(dq\fB\-\fP\(dq را مشخص کند، خروجی نیز به خروجی استاندارد ارسال خواهد شد. .INDENT 0.0 .TP .B \-help چاپ خلاصه‌ای از گزینه‌های خط فرمان. .UNINDENT .INDENT 0.0 .TP .B \-o استفاده از \fB\fP به عنوان نام فایل خروجی. برای جزئیات بیشتر به خلاصهٔ بالا مراجعه کنید. .UNINDENT .INDENT 0.0 .TP .B \-mtriple= مشخص کردن رشتهٔ target triple. .UNINDENT .INDENT 0.0 .TP .B \-march= مشخص کردن معماری مورد نظر برای تحلیل کد. مقدار پیش‌فرض آن، هدف پیش‌فرض میزبان است. .UNINDENT .INDENT 0.0 .TP .B \-mcpu= مشخص کردن پردازنده برای تحلیل کد. به صورت پیش‌فرض، نام CPU به طور خودکار از روی میزبان شناسایی می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-output\-asm\-variant= مشخص کردن گونهٔ اسمبلی خروجی برای گزارش تولیدشده توسط این ابزار. در x86، مقادیر ممکن [0, 1] هستند. مقدار 0 (به ترتیب 1) برای این پرچم، قالب اسمبلی AT&T (به ترتیب Intel) را برای کدی که توسط ابزار در گزارش تحلیل چاپ می‌شود فعال می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-print\-imm\-hex ترجیح قالب هگزادسیمال (hex) برای مقادیر عددی صریح در خروجی اسمبلی چاپ‌شده به عنوان بخشی از گزارش. .UNINDENT .INDENT 0.0 .TP .B \-dispatch= مشخص کردن پهنای دیسپچ متفاوتی برای پردازنده. پهنای دیسپچ به طور پیش‌فرض روی فیلد \(aqIssueWidth\(aq در مدل زمان‌بندی پردازنده تنظیم است. اگر پهنا صفر باشد، پهنای دیسپچ پیش‌فرض استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-register\-file\-size= مشخص کردن اندازهٔ register file. در صورت تعیین، این پرچم تعداد ثبات‌های فیزیکی موجود برای اهداف تغییر نام ثبات را محدود می‌کند. مقدار صفر برای این پرچم به معنای \(dqunlimited number of physical registers\(dq است. .UNINDENT .INDENT 0.0 .TP .B \-iterations= مشخص کردن تعداد تکرارها برای اجرا. اگر این پرچم روی 0 تنظیم شود، ابزار تعداد تکرارها را روی مقدار پیش‌فرض (یعنی 100) تنظیم می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-noalias= در صورت تنظیم، ابزار فرض می‌کند که عملیات‌های بارگذاری (loads) و ذخیره‌سازی (stores) تداخل آدرس (alias) ندارند. این رفتار پیش‌فرض است. .UNINDENT .INDENT 0.0 .TP .B \-lqueue= مشخص کردن اندازهٔ صف بارگذاری در واحد load/store شبیه‌سازی‌شده توسط ابزار. به صورت پیش‌فرض، ابزار تعداد نامحدودی ورودی را در صف بارگذاری فرض می‌کند. مقدار صفر برای این پرچم نادیده گرفته شده و در عوض اندازهٔ پیش‌فرض صف بارگذاری استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-squeue= مشخص کردن اندازهٔ صف ذخیره‌سازی در واحد load/store شبیه‌سازی‌شده توسط ابزار. به صورت پیش‌فرض، ابزار تعداد نامحدودی ورودی را در صف ذخیره‌سازی فرض می‌کند. مقدار صفر برای این پرچم نادیده گرفته شده و در عوض اندازهٔ پیش‌فرض صف ذخیره‌سازی استفاده می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-timeline فعال کردن نمای خط زمانی (timeline). .UNINDENT .INDENT 0.0 .TP .B \-timeline\-max\-iterations= محدود کردن تعداد تکرارهایی که در نمای خط زمانی چاپ می‌شوند. به صورت پیش‌فرض، نمای خط زمانی اطلاعات را حداکثر تا ۱۰ تکرار چاپ می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-timeline\-max\-cycles= محدود کردن تعداد چرخه‌ها در نمای خط زمانی، یا استفاده از 0 برای بدون محدودیت. به صورت پیش‌فرض، تعداد چرخه‌ها روی ۸۰ تنظیم شده است. .UNINDENT .INDENT 0.0 .TP .B \-resource\-pressure فعال کردن نمای فشار منابع (resource pressure). این نما به صورت پیش‌فرض فعال است. .UNINDENT .INDENT 0.0 .TP .B \-register\-file\-stats فعال کردن آمار استفاده از register file. .UNINDENT .INDENT 0.0 .TP .B \-dispatch\-stats فعال کردن آمارهای اضافهٔ دیسپچ. این نما رویدادهای دیسپچ دستورالعمل و همچنین رویدادهای توقف (stall) دیسپچ ایستا/پویا را جمع‌آوری و تحلیل می‌کند. این نما به طور پیش‌فرض غیرفعال است. .UNINDENT .INDENT 0.0 .TP .B \-scheduler\-stats فعال کردن آمارهای اضافهٔ زمان‌بند. این نما رویدادهای صدور دستورالعمل (instruction issue) را جمع‌آوری و تحلیل می‌کند. این نما به طور پیش‌فرض غیرفعال است. .UNINDENT .INDENT 0.0 .TP .B \-retire\-stats فعال کردن آمارهای اضافهٔ واحد کنترل بازنشستگی (retire control unit). این نما به صورت پیش‌فرض غیرفعال است. .UNINDENT .INDENT 0.0 .TP .B \-instruction\-info فعال کردن نمای اطلاعات دستورالعمل. این نما به صورت پیش‌فرض فعال است. .UNINDENT .INDENT 0.0 .TP .B \-show\-encoding فعال کردن چاپ کدگذاری‌های دستورالعمل در نمای اطلاعات دستورالعمل. .UNINDENT .INDENT 0.0 .TP .B \-show\-barriers فعال کردن چاپ پرچم‌های LoadBarrier و StoreBarrier در نمای اطلاعات دستورالعمل. .UNINDENT .INDENT 0.0 .TP .B \-all\-stats چاپ تمام آمارهای سخت‌افزاری. این گزینه آمارهای اضافی مربوط به منطق دیسپچ، زمان‌بندهای سخت‌افزاری، register file(ها)، و واحد کنترل بازنشستگی را فعال می‌کند. این گزینه به طور پیش‌فرض غیرفعال است. .UNINDENT .INDENT 0.0 .TP .B \-all\-views فعال کردن همهٔ نماها. .UNINDENT .INDENT 0.0 .TP .B \-instruction\-tables= اطلاعات فشار منابع را بر اساس اطلاعات ایستای موجود از مدل پردازنده چاپ می‌کند. این با نمای فشار منابع متفاوت است زیرا نیازی به شبیه‌سازی کد ندارد. در عوض توزیع یکنواخت نظری فشار منابع را برای هر دستورالعمل به ترتیب چاپ می‌کند. .sp انتخاب \fI\fP میزان اطلاعات چاپ‌شده را کنترل می‌کند. \fI\fP می‌تواند \fInone\fP (پیش‌فرض)، \fInormal\fP، یا \fIfull\fP باشد\&. نکته: اگر این گزینه بدون \fI