#include#include #define BIT(x, bit) (((x) >> (bit)) & 0x00000001) int main() { unsigned int a, b, c, d; unsigned char eax_07_00, eax_15_08, eax_23_16, eax_31_24; unsigned char edx_04_00, edx_12_05; asm volatile ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "a"(0x0a)); printf("CPUID(EAX=0AH): Architectural Performance Monitoring\n"); eax_07_00 = (unsigned char)(a & 0xff); eax_15_08 = (unsigned char)((a >> 8) & 0xff); eax_23_16 = (unsigned char)((a >> 16) & 0xff); eax_31_24 = (unsigned char)((a >> 24) & 0xff); printf(" Version ID of architectural PM: %d\n", eax_07_00); printf(" Number of general-purpose PMC per logical processor: %d\n", eax_15_08); printf(" Bit width of general-purpose PMC: %d\n", eax_23_16); printf(" Length of EBX bit vector: %d\n", eax_31_24); printf("\n"); printf(" Core cycle event not available: %d\n", BIT(b, 0)); printf(" Instruction retired event not available: %d\n", BIT(b, 1)); printf(" Reference cycles event not available: %d\n", BIT(b, 2)); printf(" Last-level cache reference event not available: %d\n", BIT(b, 3)); printf(" Last-level cache misses event not available: %d\n", BIT(b, 4)); printf(" Branch instrunction retired event not available: %d\n", BIT(b, 5)); printf(" Branch mispredict retired event not available: %d\n", BIT(b, 6)); printf("\n"); if (eax_07_00 > 1) { edx_04_00 = (unsigned char)(d & 0x1f); edx_12_05 = (unsigned char)((d >> 5) & 0xff); printf(" Number of fixed-function PCs: %d\n", edx_04_00); printf(" Bit width of fixed-function PCs: %d\n", edx_12_05); } return 0; }
2008/12/10
C言語: ハードウェアパフォーマンスカウンタの情報を表示
CPUIDでハードウェアパフォーマンスカウンタの情報を表示するプログラム.
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿