Я изучаю 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