Profilowanie procesu kompilacji C++
Mam tendencję do pisania dość dużych szablonowych nagłówków-tylko biblioteki C++ i moi użytkownicy często narzekają na czas kompilacji. Po zastanowieniu się nad tą sprawą, przyszło mi do głowy, że nie mam pojęcia, dokąd zmierza czas . Czy istnieje jakiś prosty sposób na profilowanie procesu kompilacji C++ za pomocą popularnych kompilatorów, takich jak g++, icc i xlC? Na przykład, czy można zorientować się, ile czasu spędza się w każdej z faz kompilacji C++ ?
5 answers
Dla GCC istnieją opcje debugowania aby znaleźć how much time is spent within each of the phases of C++ compilation?
-Q Sprawia, że kompilator wypisuje każdą nazwę funkcji w trakcie kompilacji i wyświetla statystyki dotyczące każdego przejścia po jego zakończeniu.
-ftime-report Sprawia, że kompilator wyświetla pewne statystyki dotyczące czasu zużywanego przez każde przejście po jego zakończeniu.
Przepustki są opisane w GCCINT 9: przepustki i pliki kompilatora .
Możesz pisać wyjście kompilacji G++ z jednego pliku źródłowego z -v -ftime-report
tutaj, aby omówić to . Może być pomoc na liście dyskusyjnej GCC .
Dla kompilatorów innych niż GCC (lub GCC bardziej starożytnych niż 3.3.6) Zobacz inne opcje w tym wątku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-03 16:40:12
Jest Narzędzie z projektu Boost, który może być przydatny w prawie każdym kompilatorze i systemie budowania.
Narzędzie wymaga oprzyrządowania kodu źródłowego z wywołaniami makr TEMPLATE_PROFILE_ENTER()
i TEMPLATE_PROFILE_EXIT()
. Makra te następnie generują określoną diagnostykę (ostrzeżenia) w czasie kompilacji, które są rejestrowane i gromadzone wraz z pakietami wywołań instancji (które w konsekwencji umożliwiają budowanie i wizualizację wywołań) za pomocą skryptu. Nieźle, IMO.
I didn ' t użyj go jednak.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:09
Jeszcze nie próbowałem, ale temlight wygląda bardzo obiecująco: https://github.com/mikael-s-persson/templight
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-21 17:03:35
Można je w pewnym stopniu oddzielić (zakładam make
)
- Dodaj regułę kompilacji, która tylko preprocesuje pliki( za pomocą przełącznika
-E
), i cel.PHONY
, który zależy od plików wyjściowych preprocesora, tak jak normalny cel binarny zależy od Plików.o
. Zmierz, ile czasu zajmuje zbudowanie tego celu - Dodaj obiekt docelowy
'PHONY
, który zależy od wszystkich plików.o
, ale nie łączy ich. Zmierzyć, jak długo trwa budowa tego celu (od clean) - zmierz, ile czasu zajmuje wykonanie czystej kompilacji zwykłej binarnej
Teraz masz pojęcie, ile czasu zajmuje wstępne przetwarzanie, kompilacja i łączenie. Możesz także porównać wersje optimized i non-optimized (-O0
) drugiego i trzeciego celu, aby zobaczyć, jak długo jest spędzany w optymalizatorze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-26 10:28:13
Możesz być w stanie uzyskać trakcję z jakimś wariantem na strace -e trace=process -f -r -ttt -T
, przynajmniej dla kompilatorów takich jak g++, które są podzielone na wiele procesów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-01 19:26:47