Asembler w kodzie linuxa | ||
---|---|---|
<<< Wstecz | Asembler - ale po co? | Dalej >>> |
W tym celu należy zastosować się do poniższych kroków:
W pierwszym tworzymy całość w języku wyższego poziomu
W drugim analizujemy jego zachowanie tak, aby wyznaczyć tzw."wąskie gardła"
W trzecim kompilujemy te fragmenty do Asemblera
W ostatnim dostrajamy je ręcznie wprowadzając już tylko drobne zmiany
Do takich języków można m.in. zaliczyć ObjectiveCAML, SML, CommonLISP, Scheme, ADA, Pascal, C i C++. Każdy z nich posiada właśnie taki kompilator, który zoptymalizuje olbrzymią cześć naszego kodu, robiąc to czasem skuteczniej, niż gdyby był on dostrajany ręcznie. Dzięki nim możemy skoncentrować się na bardziej wysokopoziomowych szczególach, jednocześnie mając możliwość wprowadzania pewnych poprawek tak jak było to przedstawione powyżej. Istnieją również komercyjne programy optymalizujące kod, mogące poprawiać szybkość działania naszych programów.
Poniższych kroków nie należy wykonywać dla całego programu, a tylko dla fragmentów zidentyfikowanych przez nas jako "wąskie gardło". Spróbujmy więc dla każdego z nich:
spróbować innego algorytmu, który mogłby poprawić złożoność
jeśli takiego nie ma, to zamiast przepisywać, spróbujmy raczej skompilować go do asemblera
zapoznać się również należy z możliwościami jakie daje nam kompilator. Mogą to być zarówno opcje, z którymi się go wywołuje, jak również podpowiedzi, które umieszcza się w kodzie programu
próbujemy ręcznie dostroić w asemblerze nasz kod
Jest wiele powodów, dla których możemy potrzebować nadzorowania kodu generowanego przez kompilator. Oto niektóre z nich:
sprawdzić, czy kod może być jeszcze przez nas usprawniony
zapoznania się z nim w celu ulepszenia go, zamiast pisania od nowa
ostatecznie, wykorzystanie tylko otoczki tego kodu, umożliwiającej komunikację z innymi częściami programu.
wyszukiwanie błędów w naszym kompilatorze
<<< Wstecz | Spis treści | Dalej >>> |
Asembler - ale po co? | Początek rozdziału | Linux i asembler |