Java 稀疏矩阵乘法执行时间

Java 稀疏矩阵乘法执行时间,java,sparse-matrix,Java,Sparse Matrix,我正在研究来自JGF基准测试的java版本稀疏矩阵乘法程序。我用多种cpu频率运行这个程序。我也为这个项目做了一些简介。我将其归类为内存密集型程序,因为缓存位置不好,并且内存访问量大。这种程序在较慢频率下运行时的执行时间应该比较快频率下的执行时间稍微减少,因为它会在暂停时浪费cpu周期。但在我的实验中,这个程序的执行时间与cpu频率成正比。原因为何 矩阵(数组)的维数为500000,该程序在具有三层缓存的i7-920中运行。 有32KB的一级数据2KB、一级指令每核、二级256KB每核和三级8M

我正在研究来自JGF基准测试的java版本稀疏矩阵乘法程序。我用多种cpu频率运行这个程序。我也为这个项目做了一些简介。我将其归类为内存密集型程序,因为缓存位置不好,并且内存访问量大。这种程序在较慢频率下运行时的执行时间应该比较快频率下的执行时间稍微减少,因为它会在暂停时浪费cpu周期。但在我的实验中,这个程序的执行时间与cpu频率成正比。原因为何

矩阵(数组)的维数为500000,该程序在具有三层缓存的i7-920中运行。 有32KB的一级数据2KB、一级指令每核、二级256KB每核和三级8MB共享缓存

我还通过perf获得了执行统计数据:

“java-cp”的性能计数器统计信息。JGFSSparseMatMultBenchsizec':

  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的值的整数对象可能会被JVM缓存以节省内存,这可能会在其中起到一定的作用

也许缓存的大小足以使内存访问变得无关紧要。您没有提供有关问题大小和缓存大小的任何信息。您如何确定缓存位置不正确?一个好的包应该优化缓存的使用。另外,您的数据是什么样的?如果它是非常结构化或重复的,那么实现可能会检测到这一点,并进一步优化以减少内存访问。存在严重的缓存未命中,并且该程序的IPC较低。