我正在尝试将一些性能工程技术应用于Dijkstra算法的实现.为了找到(天真的和未经优化的)程序中的瓶颈,我正在使用该perf命令来记录缓存未命中的数量.相关的代码片段如下,它找到距离最小的未访问节点:
for (int i = 0; i < count; i++) {
if (!visited[i]) {
if (tmp == -1 || dist[i] < dist[tmp]) {
tmp = i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于LLC-load-misses度量标准,perf report显示程序集的以下注释:
? for (int i = 0; i < count; i++) { ?
1.19 ? ff: add $0x1,%eax ?
0.03 ?102: cmp 0x20(%rsp),%eax ?
? ? jge 135 ?
? if (!visited[i]) { ?
0.07 ? movslq %eax,%rdx ?
? mov 0x18(%rsp),%rdi ?
0.70 …Run Code Online (Sandbox Code Playgroud)