30-03-2012, 11:09
Pawle, jak najbardziej masz rację co do wielkości kodu startowego dla różnych procesorów oraz kompilatorów. Aby było jednolicie proponuję przyjąć jakiś popularny procesor AVR np. Atmega32. Moim zdanie w teście należy uwzględniać wszystko od adresu 0000h do końca testu, może być jako suma (prolog+test).
Pomijanie wielkości kodu startowego ( tzw. prologu ) oraz czasu jego wykonania nie do końca jest słuszne. Kompilator często umieszcza tam funkcje biblioteczne, procedury optymalizacyjne, inicjuje zasoby procesora, zmienne, stos danych a potem z nich korzysta podczas realizacji głównej części programu. Dlaczego więc mielibyśmy nie uwzględniać takich ułatwień, które kompilator przygotuje sobie do dalszej pracy ?
Drugi powód to możliwości optymalizacyjne kompilatora. Dobry kompilator usunie wszystko z czego nie będzie korzystał w celu redukcji wielkości kodu, słaby zostawi całą dołączoną bibliotekę.
Trzeci powód to możliwości konfiguracyjne kompilatora. Procesor powinien inicjować to co jest wykorzystane w programie a nie to "co mu pasuje". Sam swego czasu pytałeś czy w WinAVR da się zmusić kompilator GCC aby nie omijał wektorów przerwań i umieszczał tam normalny kod programu. Może jakiś kompilator ma taką dyrektywę ?
Algorytm zadania testowego jest prosty jednak formaty danych oraz obliczenia generują wystarczająco duży kod do porównania.
Tak naprawdę chodzi o praktyczne pokazanie różnić pomiędzy językami przy realizacji tego samego algorytmu.
Pomijanie wielkości kodu startowego ( tzw. prologu ) oraz czasu jego wykonania nie do końca jest słuszne. Kompilator często umieszcza tam funkcje biblioteczne, procedury optymalizacyjne, inicjuje zasoby procesora, zmienne, stos danych a potem z nich korzysta podczas realizacji głównej części programu. Dlaczego więc mielibyśmy nie uwzględniać takich ułatwień, które kompilator przygotuje sobie do dalszej pracy ?
Drugi powód to możliwości optymalizacyjne kompilatora. Dobry kompilator usunie wszystko z czego nie będzie korzystał w celu redukcji wielkości kodu, słaby zostawi całą dołączoną bibliotekę.
Trzeci powód to możliwości konfiguracyjne kompilatora. Procesor powinien inicjować to co jest wykorzystane w programie a nie to "co mu pasuje". Sam swego czasu pytałeś czy w WinAVR da się zmusić kompilator GCC aby nie omijał wektorów przerwań i umieszczał tam normalny kod programu. Może jakiś kompilator ma taką dyrektywę ?
Algorytm zadania testowego jest prosty jednak formaty danych oraz obliczenia generują wystarczająco duży kod do porównania.
Tak naprawdę chodzi o praktyczne pokazanie różnić pomiędzy językami przy realizacji tego samego algorytmu.
73 Adam

