Instructivo FLOPS con perf y libpfm

Universidad Nacional de Córdoba

Facultad de Matemática, Astronomía, Física y Computación

Computación Paralela 2021


Para comenzar deben descargar perf, que viene con las linux-tools, yo lo hize con:

$ sudo apt-get install linux-tools-generic

pueden probar que funcione con:

$ perf record /bin/ls

Si les hace problema (especificamente con perf_event_paranoid=4) lo arreglan con permisos de root (sudo) o si quieren evitarse hacerlo cada vez, con:

$ sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

Para lo siguiente, deben descargar la ultima version de libpfm con:

$ git clone git://perfmon2.git.sourceforge.net/gitroot/perfmon2/libpfm4

Y luego compilarlo (primero entro al directorio):

$ cd libpfm4
$ make

Dentro del directorio examples, corren el archivo showevtinfo para listar todos los eventos posibles que el micro moderno se banca, ademas de las masks y algunos modificadores. Pero como es feo buscar algo interesante de ahi, hacen:

$ ./showevtinfo > events.txt

Y ahora tienen en ese archivo events todo lo que imprimia showevtinfo y pueden abrirlo con su editor (o grep) y buscar los eventos que matcheen con 'FP_'. Van a ver que cada evento tiene un name, una descripcion, un code y varias masks (con el prefijo Umask) y cada una dice que tiene de interesante y un codigo en hexadecimal para cada umask.

1

1

Guardan ese codigo hexadecimal, y en la terminal, tambien dentro del directorio de examples, se encuentra el ejecutable check_results, que pueden pasarle los parametros de la siguiente forma:

$ check_events <event name>:<umask>[(:modifers)*]

En mi caso: 2

Eso les dice muuucha informacion, pero se quedan especificamente con el Code que aparece al final que tambien es un hexadecimal.

3

3

Con ese codigo obtenido recien, se lo pueden pasar como parametro de evento a perf al momento de correr el archivo y luego de terminar les dira el resultado para el evento que ustedes tomaron el codigo. (le pueden pasar muchos codigos de eventos para tomar mas mediciones).

$ perf stat -e r<code> <file>

En este caso lo corri con (headless nombre de mi ejecutable):

$ perf stat -d -e r1531eca -e r5201c7 -e r5302c7 ./headless
4

4

Pueden ver que aparecen la cantidad de operaciones que realiza al ejecutar para distintos tipos de codigos de eventos, en mi caso eran 22 billones de operaciones de punto flotante de precision simple, 55 mil de precision doble.

Posiblemente tengan otros eventos y otros codigos, depende de la arquitectura de cada micro (en mi caso es un Intel I3-6200 2.30GHz).


Referencias:

HPC events, Bojan Nikolic (circa 2012)

Measure FLOPS, Bojan Nikolic (2012)


Autores