در رایانه‌ها ، **شمارنده‌های عملکرد سخت‌افزار** ( **HPC** )،  یا **شمارنده‌های سخت‌افزار** مجموعه‌ای از ثبات‌هایی با هدف خاص هستند که درون ریزپردازنده‌های امروزی تعبیه شده‌اند تا تعداد فعالیت‌های مرتبط با سخت‌افزار در سیستم‌های کامپیوتری را شمارش بکنند. کاربران پیشرفته اغلب برای انجام تحلیل عملکرد سطح پایین یا تنظیم عملکرد به آن شمارنده ها تکیه می‌کنند.

پیاده سازی ها
-------------

تعداد شمارنده‌های سخت‌افزاری در دسترس یک پردازنده محدود است، در حالی که هر مدل پردازشگر مرکزی ممکن است رویدادهای متنوعی داشته باشد که یک توسعه‌دهنده بخواهد اندازه‌گیری کند.هر شمارنده می تواند با اندیس یک نوع رویداد، برای نظارت بر آن برنامه ریزی شود، مانند باخت در حافظه نهان L1 یا پیش بینی نادرست شاخه.

یکی از اولین پردازنده‌هایی که چنین شمارنده‌هایی را به همراه دستورالعمل `RDPMC` برای دسترسی به آن پیاده‌سازی کرد، Intel Pentium بود، اما تا پیش از آن که Terje Mathisen مقاله‌ای درباره‌ی مهندسی معکوس آنها در مجله *بایت* در ژوئیه 1994  چاپ کرد، ثبت نشده بودند.

جدول ذیل نمونه هایی از پردازشگرهای مرکزی و تعداد شمارنده های سخت افزاری موجود ‌آن ها را نشان می دهد:

| پردازنده | تعداد شمارنده های سخت‌افزاری موجود |
| --- | --- |
| UltraSparc II | 2 |
| پنتیوم III | 2 |
| ARM11 | 2 |
| AMD Athlon | 4 |
| IA-64 | 4 |
| ARM Cortex-A5 | 2  |
| ARM Cortex-A8 | 4 |
| ARM Cortex-A9 MPCore | 6 |
| POWER4 | 8 |
| پنتیوم 4 | 18 |

تقابل با تکنیک های نرم افزاری
-----------------------------

در مقایسه با **رُخ‌نمانگاری** نرم‌افزاری، شمارنده‌های سخت‌افزاری دسترسی به طیف وسیعی از اطلاعات عملکردی مربوط به واحدهای عملیاتی پردازشگر، حافظه‌های پنهان و حافظه اصلی و غیره را با سربار کم فراهم می‌کنند. مزیت دیگر استفاده از آنها این است که به طور کلی نیازی به تغییر کد منبع نیست. با این حال، انواع شمارنده های سخت افزاری و اهداف آنها از معماری به معماری دیگر متفاوت است که دلیل آن تنوع در سازمان های سخت افزاری می‌باشد.

ممکن است مشکلاتی در ارتباط دادن سنجه‌های عملکرد سطح پایین به کد منبع وجود داشته باشد. تعداد محدود ثبات‌ها برای ذخیره شمارنده ها اغلب کاربران را وا می‌دارد تا برای جمع آوری همه‌ی سنجه‌های عملکرد مورد ‌نظر، اندازه گیری‌های متعددی انجام دهند.

نمونه گیری مبتنی بر دستورالعمل
------------------------------

 خروجی نمایه IBS از CodeAnalyst .
پردازنده‌های فوق‌اسکالر امروزی، چندین دستورالعمل خارج از ترتیب را به صورت هم‌زمان برنامه‌ریزی و اجرا می‌کنند. این دستورالعمل‌های «در حین پرواز» می‌توانند در هر زمانی کنار گذاشته شوند، که [این زمان] به دسترسی به حافظه، تعداد برد در حافظه پنهان، وقفه در خط لوله و بسیاری از عوامل دیگر وابسته است. این می تواند باعث شود که شمارنده‌های عملکردی به دستورالعمل های اشتباه نسبت داده شوند و تحلیل دقیق عملکرد را دشوار یا غیرممکن کند.

AMD روش هایی را برای تقلیل برخی از این معایب معرفی کرد. برای مثال، پردازنده‌های اپترون  در سال 2007 تکنیکی را به نام نمونه گیری مبتنی بر دستورالعمل(یا IBS) پیاده‌سازی کردند. پیاده‌سازی IBS توسط AMD، شمارنده‌های سخت‌افزاری را برای هر دو نمونه‌برداری واکشی (در جلوی خط لوله‌ی فوق‌اسکالر) و نمونه‌برداری عملیاتی (در پشت خط لوله) مجهز می‌کند. این منجر به داده های عملکرد مجزا می شود که دستورالعمل های بازنشسته را با دستورالعمل AMD64 "والد" مرتبط می کند.

همچنین ببینید
-------------

* perf (لینوکس)
* چکش ردیفی

منابع
-----

1. ↑  Malone, Corey; Zahran, Mohamed; Karri, Ramesh (2011). "Are hardware performance counters a cost effective way for integrity checking of programs" (PDF). *Proceedings of the Sixth ACM Workshop on Scalable Trusted Computing - STC '11* (به انگلیسی): 71. doi:10.1145/2046582.2046596. ISBN 9781450310017. Retrieved 17 November 2022.
2. ↑  "Pentium Secrets". Gamedev.net. Retrieved 2012-02-14.
3. ↑  "Documentation – Arm Developer". *developer.arm.com*.
4. ↑  "Instruction-Based Sampling: A New Performance Analysis Technique for AMD Family 10h Processors" (PDF). AMD. Retrieved 2015-10-16.

[[رده:واحد پردازشگر مرکزی]]