Ćwiczyłem sobie ostatnio System V AMD64 ABI w asmie - otak, żeby zobaczyć dlaczego jvm wypluwa taki kod jak wypluwa.
Do tego jeszcze pobieżnie spojrzałem na SSE i AVX.
Odpadem z ćwiczeń jest rysowanie mandlebrota pod xlib - gdzie algorytm zrobilem w asm.
Kod:
https://github.com/jarekratajski/yamandel
Dziwnie wyszło. Asm szybszy prawie 2 razy od gcc.
Może dlatego, że:
- nie jestem biegły w C (20 lat nie pisze - co najwyżej oglądam i poprawiam bugi, a i to raz na ruski rok).
- w assemblerze też podobnie - w zasadzie to znałem tylko 6502 i 68k, a w tych nie byłem biegły (a x86 był dla mnie totalnie obrzydliwy).
Jakim cudem, że moj bieda asm jest szybszy od tego co gcc produkuje ? (gcc miał tak ładnie wektoryzować) To jest tym bardziej dziwne, że ten asm powstawał na zasadzie rozpaczliwej, czasem powtarzam te same operacje bo się pogubiłem co w którym rejestrze jest - mistrzostwo świata to to na pewno nie jest :-).
Pytanie - co zepsułem?
- coś uprościłem w asm ?
- zrypałem parametry gcc?
- zrypałem kod w c?
To śmieszne, np. w kontekście wątku : Jak duże spowolnienie wynika używania języków wysokiego poziomu?
Może c nie jest wysokiego poziomu, ale gcc coś powinien umieć.
Za jakiś czas sprawdze jak to robi jvm...