gpt4 book ai didi

linux - 如何获取一段代码的 CPU 性能计数器

转载 作者:太空狗 更新时间:2023-10-29 11:43:34 31 4
gpt4 key购买 nike

众所周知,perf是获取程序CPU性能计数器的工具,如cache-misscache-reference, 指令执行

问题:如何在 cc++ 的一个程序中仅获取一段代码(例如函数)的性能计数器。
例如,我的程序首先进行一些初始化,然后执行工作,然后完成,我只想获取工作的性能计数器,例如函数 do_something_1

int main(int argc, char ** argv) {
do_initialize();
for (int i = 0;i < 100 ;i ++) {
/* begin profile code */
do_something_1();
/* end profile code */
do_something_2();
}
do_finalize();
}

最佳答案

最后,我找到了一个库来获取一段代码的那些计数器。

PAPI

例如,如果您要测量某段代码的 L3 数据缓存读取。

#include "papi.h"
#include <iostream>
#include <glog/logging.h>

#define ASIZE 2684354560

#define event_count (1) // the number of event you want to trace

int main(int argc, char ** argv) {

int events[event_count] = {PAPI_L3_DCR}; // L3 Data Cache Read
int ret;
long long int values[event_count]; // result

int* array = new int [ASIZE ];

/* start counters */
ret = PAPI_start_counters(events, event_count);
CHECK_EQ(ret, PAPI_OK);

size_t tot_cnt = 1;
for(size_t cnt = 0; cnt < tot_cnt; cnt ++) {
for(size_t i = 0;i < ASIZE ;i ++) {
array[i] = i;
}
}

/* read counters */
ret = PAPI_read_counters(values, event_count);
CHECK_EQ(ret, PAPI_OK);

for(size_t i = 0;i < event_count ;i ++) {
LOG(INFO) << " " << values[i];
}
return 0;
}

生成文件:

CXX?=g++
INC?=-I<path to where papi is installed>/include/
LIB?=-L<path to where papi is installed>/lib/ -lpapi -lglog

main : main.cpp
${CXX} -O3 ${INC} -o $@ $< ${LIB}

all : main

.PHONY:
clean :
rm -f main

关于linux - 如何获取一段代码的 CPU 性能计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30709432/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com