Время выполнения умножения разреженной матрицы - PullRequest
1 голос
/ 02 февраля 2012

Я изучаю Java-версию программы умножения разреженных матриц, которая основана на тесте JGF. Я запускаю эту программу на разных частотах процессора. Я также делаю профиль для этой программы. Я классифицирую ее как программу с интенсивным использованием памяти, поскольку локальность кэша плохая и имеет большой доступ к памяти. Время выполнения программы такого типа, работающей на более медленной частоте, должно немного уменьшиться по сравнению с более быстрой частотой, поскольку это приведет к потере циклов процессора при останове. Но время выполнения этой программы пропорционально частоте процессора в моих экспериментах. Почему причины?

Размер матрицы (массива) равен 500000, и эта программа была запущена в i7-920, которая имеет трехслойный кэш. Имеется 32 КБ данных L1 2 КБ, инструкция L1 на ядро, L2 256 КБ на ядро ​​и общий кэш L3 8 МБ.

Я также получил статистику выполнения по 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

1 Ответ

0 голосов
/ 02 февраля 2012

Целочисленные объекты, представляющие значения, близкие к 0, могут кэшироваться JVM для экономии памяти - возможно, это может сыграть определенную роль в этом.

...