[nem-pl] rekursje ogonowe

"Paweł W. Olszta" Pawel.Olszta at adv.pl
Mon Jan 19 01:08:35 CET 2004


Michal Moskal wrote:

> W .NET włączenie self tail calls, bez general tail calls powoduje
> przyrost prędkości o jakieś 3% (to może być błąd pomiaru). Natomiast
> włączenie tylko general tail calls, bez self tail calls powoduje
> *spadek* prędkości o 15%. To ostatnie jest naprawdę dziwne...

:-]

Pewnie niezoptymalizowane ścieżki w generatorze kodu natywnego. Trzeba 
popatrzeć w disasembler (ale ten prawdziwy, nie ildasm). Pewnie jesteśmy 
pierwsi na świecie, co używają tail call'i (sprawdzę sml.net i f# jutro, 
ale jeśli chodzi o Mono to na pewno nikt ich nie generował, skoro nie 
działają?).

Chyba najwyższa pora skontaktować się z CLR Performance Team i przekazać 
im, że już mają dobre dane testowe ;)

Ale ogólnie to padaka (spadochron, dzięki Michał :-p). Miałem nadzieję, 
że będzie dużo lepiej. No i pytanie czemu wcześniej self tail calls 
dawał nam odczuwalne przyspieszenie?

Kod generowany przez CGil ma zdecydowanie mniej zmiennych lokalnych, niż 
ten generowany przez CGflat, poza tym niczym raczej się nie różni. Może 
to na zmiennych lokalnych były robione oszczędności (przy wejściu do 
funkcji zawsze są ustawiane na null/zero/false, co trochę też kosztuje)?

Dobranoc

Paweł

-- 
My opinions may have changed, but not the fact
that I am right. -- Ashley Brilliant





More information about the devel-pl mailing list