[ Pobierz całość w formacie PDF ]
.Niektóre z profilatorów wymagaæ mog¹ ingerencji w kod Ÿród³owyprogramu, niektóre obywaj¹ siê bez takich przygotowañ.W aplikacjachwielow¹tkowych mo¿liwe jest niezale¿ne profilowanie poszczególnych w¹tków.Spoœród wielu dostêpnych profilatorów niektóre przystosowane s¹ specjalnie dowspó³pracy z C++Builderem; sztandarowym przyk³adem takiego profilatora jestSleuth StopWatch firmy TurboPower Software, stanowi¹cy czêœæ pakietu Sleuth QASuite dostêpnego w wersji próbnej (trial) pod adresemhttp://www.turbopower.com.Profilator ten wykonuje tak¿e funkcjê deasemblacjikodu wynikowego, generuj¹c jednoczeœnie informacjê na temat parowaniainstrukcji przydatn¹ przy optymalizacji niskopoziomowej.Na potrzebyprofilowania naszej aplikacji wykorzystaliœmy jego wersjê 1.0, w chwili obecnejdostêpna jest ju¿ jego wersja 2.Pakiet Sleuth QA Suite 2 zawiera tak¿e narzêdzie o nazwie Sleuth CodeWatch,podobne w swej istocie do CodeGuard.S³u¿y ono do wykrywania „wycieków”pamiêci, ze szczególnym uwzglêdnieniem wycieków spowodowanych przez VCL;potrafi równie¿ wy³apywaæ niepo¿¹dane zapisy do pamiêci, a tak¿e nieprawid³oweparametry wywo³ania i wyniki zwracane przez funkcje Win32 API.Spoœród innych dostêpnych profilatorów wymieniæ nale¿y miêdzy innymi:QTime produkcji Automated QA, dostêpny w wersjach „Standard” i „Lite”.Wspó³pracuje z C++Builderem w wersjach 3., 4.i 5.Wersja „standard” zawierawiele interesuj¹cych funkcji, miêdzy innymi analizê pokrycia kodu (codecoverage) i œledzenie kodu (code tracing).Próbna wersja, wraz z dodatkowymiinformacjami, dostêpna jest pod adresem http://www.totalqa.com.RQ’s Profiler, niedrogi, lecz wymagaj¹cy umieszczenia specjalnych makr w kodzieŸród³owym i jego konsolidacji ze swymi bibliotekami DLL; udostêpnia w tym celuspecjalny edytor.Wspó³pracuje ze wszystkimi wersjami C++Buildera.Dostêpnyjest w wersji shareware pod adresemhttp://ourworld.compuserve.com/homepages/rq.VTune Analyzer produkcji Intel Corp.udostêpnia funkcje profilowania kodu,asystenta o nazwie CodeCoach wspomagaj¹cego optymalizacjê na poziomie koduŸród³owego, profilowanie grafu wywo³añ funkcji, analizê kodu asemblerowego wcelu wykrycia mo¿liwoœci parowania instrukcji i innych cech charakterystycznychdla poszczególnych procesorów itp.Umo¿liwia profilowanie zarówno na poziomiefunkcji, jak i na poziomie poszczególnych wierszy kodu.Nie jest jednakspecjalnie ukierunkowany na wspó³pracê z C++Builderem, jest wiêc mniej wygodnyw u¿yciu ni¿ profilatory wczeœniej wymienione.Dostêpny jest w wersji próbnejpod adresem http://developer.intel.com./vtune/analyzer.Przed rozpoczêciem profilowania nale¿y zakoñczyæ funkcjonowanie wszystkichaplikacji, mog¹cych mieæ wp³yw na szybkoœæ wykonywania aplikacji zasadniczej.Dla uzyskania bardziej wiarygodnych wyników nale¿y profilowanie kilkakrotniepowtórzyæ, a otrzymane wyniki uœredniæ.Podstawowym problemem przy profilowaniu kodu – niezale¿nie od u¿ywanegoprofilatora – s¹ rekursywne wywo³ania funkcji.Profilatory zorientowane s¹bowiem raczej na poszczególne definicje funkcji (rozumianych jakoidentyfikowane przez nazwê fragmenty kodu Ÿród³owego) ni¿ na ich wywo³ania,skutkiem czego statystyka zwi¹zana z dan¹ funkcj¹ obejmuje sumaryczniewszystkie jej wywo³ania, niezale¿nie od poziomów, na których wyst¹pi³y.Abywiêc rozdzieliæ dane odnosz¹ce siê do poszczególnych poziomów, nale¿y u¿yæpewnego triku, umo¿liwiaj¹cego wyeliminowanie rekursji do zdefiniowanegopoziomu w³¹cznie.Trik ten polega na stworzeniu pewnej liczby kopii funkcjiwywo³ywanej dot¹d rekursywnie i wywo³ywanie ich w sposób nierekursywny, a¿ dopoziomu zale¿nego od liczby tych kopii.W naszej aplikacji rekursywnemu wywo³aniu podlega funkcja SolveWord().Wpotocznym okreœleniu jest to rekursja o „odleg³oœci 1 i szerokoœci 3” – funkcjaSolveWord() wywo³uje bowiem trzy funkcje: SolveFirstWord(), SolveAdjacentWord()i SolveStandardWord(), które z kolei wywo³uj¹ funkcjê SolveWord().Rekursywnewywo³anie tej ostatniej ma wiêc charakter poœredni, a owym pojedynczym(odleg³oœæ=1) „poziomem poœrednicz¹cym” jest jedna z funkcji: SolveFirstWord(),SolveAdjacentWord() lub SolveStandardWord().W naszej aplikacji zagnie¿d¿enie rekursywnego wywo³ania funkcji SolveWord()jest wiêksze o jeden od liczby dostêpnych s³Ã³w
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL