Ziel ist es nun, aus einem größerem Programm die interessanten Stellen herauszufinden
mattestv2 ist nun ein Programm, welches nun in einer Schleife eine grosse Matrix sowohl zeilenweise als auch spaltenweise beschreibt, und zwischendurch noch eine Berechnung macht.
Analyse: perf record -e cycles:u,cache-references:u,cache-misses:u -F 1000 ./mattestv2
wobei
Bemerkung: bei Option -F braucht der Kern einen externen Zeitgeber, der mit dem APIC zusammenhängt. Der Kern muss mit CONFIG_X86_UP_APIC und mit CONFIG_X86_LOCAL_APIC (???) gebaut sein, und lapic in der Boot-Zeile des Kerns (z.B. in GRUB) angegeben sein.
perf record liefert dann:
# Events: 69 cycles # # Overhead Command Shared Object Symbol # ........ ....... ................. ................... # 99.36% mattest mattest [.] spaltenweise() 0.49% mattest ld-2.11.3.so [.] _dl_relocate_object 0.13% mattest ld-2.11.3.so [.] _dl_map_object 0.01% mattest [kernel.kallsyms] [k] page_fault 0.00% mattest ld-2.11.3.so [.] _start # Events: 1K cache-references # # Overhead Command Shared Object Symbol # ........ ....... ............. ................... # 87.70% mattest mattest [.] spaltenweise() 12.06% mattest mattest [.] zeilenweise() 0.22% mattest ld-2.11.3.so [.] _dl_relocate_object 0.02% mattest ld-2.11.3.so [.] _dl_lookup_symbol_x 0.00% mattest ld-2.11.3.so [.] do_lookup_x # Events: 1K cache-misses # # Overhead Command Shared Object Symbol # ........ ....... ............. .............. # 99.69% mattest mattest [.] spaltenweise() 0.31% mattest mattest [.] zeilenweise() # # (For a higher level overview, try: perf report --sort comm,dso) #
Damit haben wir die Funktion spaltenweise insbesondere bei cache-misses entlarvt!