gpt4 book ai didi

c - 在不考虑 C unix 中的内存访问时间的情况下获取 CPU 指令时间的函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:28 24 4
gpt4 key购买 nike

我有下一个简单的函数来测量进程的计算时间:

double get_cpu_time()
{
//LINUX
const static int64_t NANOS_PER_SEC = 1000000000L;
struct timespec time;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time);
return (((int64_t) time.tv_sec) * NANOS_PER_SEC) + ((int64_t) time.tv_nsec);

}


ini_time = get_cepu_time();

//intesive computation code

end_time = get_cepu_time();


end_time = end_time - ini_time

;

这个函数返回每个进程的计算时间,在一个简单的等式中可以是这样的:

Tcomp = Tcpu + Taccmen => inst * ILP + #miss cache * 延迟时间

有趣的是只获取Tcpu时间(执行指令的时间而不考虑查找数据的时间),你知道有什么函数可以获取这个时间,或者返回内存访问时间的函数,那么我可以sustract( tcomp - Taccmem)

最好的问候,

最佳答案

在 linux 上使用 perf 命令来获取这种性能数据。

例如在x86平台上

perf stat -B sleep 5

Performance counter stats for 'sleep 5':

0.344308 task-clock # 0.000 CPUs utilized
1 context-switches # 0.003 M/sec
0 CPU-migrations # 0.000 M/sec
154 page-faults # 0.447 M/sec
977183 cycles # 2.838 GHz
586878 stalled-cycles-frontend # 60.06% frontend cycles idle
430497 stalled-cycles-backend # 44.05% backend cycles idle
720815 instructions # 0.74 insns per cycle
# 0.81 stalled cycles per insn
152217 branches # 442.095 M/sec
7646 branch-misses # 5.02% of all branches

5.002763199 seconds time elapsed

这会运行 sleep 5 命令,并为您提供从 x86 处理器上的性能计数器收集的详细信息。您会感兴趣的是查看执行的指令数和周期数,该比率是它为您计算的每个周期的指令数,它还告诉您处理器每条指令平均停顿了多少个周期。要获得缓存引用的数量和未命中的数量,您需要明确要求

perf stat -B -e cache-references,cache-misses,cycles,instructions

参见 Why doesn't perf report cache misses?

关于c - 在不考虑 C unix 中的内存访问时间的情况下获取 CPU 指令时间的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739795/

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