我正在研究来自JGF基准的java版稀疏矩阵乘法程序。我在很多种cpu频率下运行这个程序。我也为这个程序做了一些简介。我把它归类为内存密集型程序,因为缓存局部性很差并且内存访问量很大。与较快频率相比,以较慢频率运行的这种程序的执行时间应略微减少,因为它会浪费停顿中的cpu周期。但是这个程序的执行时间与我实验中的cpu频率成正比。原因何在?
矩阵(数组)的维数是500000,这个程序在i7-920中运行,它有三层缓存。 每个内核有32KB L1数据2KB,L1指令,每个核心L2 256KB和L3 8MB共享缓存。
我还通过perf获得了执行统计信息:
'java -cp的性能计数器统计信息。 JGFSparseMatmultBenchSizeC':
83925.084119 task-clock-msecs # 1.001 CPUs
2,045 context-switches # 0.000 M/sec
28 CPU-migrations # 0.000 M/sec
29,687 page-faults # 0.000 M/sec
223,130,573,396 cycles # 2658.688 M/sec (scaled from 66.68%)
66,679,432,987 instructions # 0.299 IPC (scaled from 83.33%)
12,779,607,690 branches # 152.274 M/sec (scaled from 83.32%)
11,389,605 branch-misses # 0.089 % (scaled from 83.32%)
11,056,332,293 cache-references # 131.740 M/sec (scaled from 83.34%)
3,847,329,243 cache-misses # 45.842 M/sec (scaled from 83.35%)
83.816412311 seconds time elapsed
答案 0 :(得分:0)
表示值接近0的整数对象可以由JVM缓存以节省内存 - 也许这可能在其中起一定作用。