Wpis z mikrobloga

@leoha: Tylko należy tutaj zadać pytanie jaki wpływ na wydajność programu ma samo iterowanie po kolekcji, a jaki pozostałe operacje wykonywane na jej elementach. W rzeczywistych przykładach okaże się, że optymalizacja pętli spowodowała wzrost wydajności o oszałamiające 0.01% ( ͡° ͜ʖ ͡°)

Tak jak w przypadku uC taka zabawa może mieć sens, tak w przypadku helloworlda w javie już niekoniecznie.
  • Odpowiedz
@leoha: po 1: koszt samej iteracji vs operacje tam zazwyczaj sprawia że różnica jest niewidoczna
po 2: java sobie sama zrobi unrolla a nawet czasem zwektoryzuje

@InformacjaNieprawdziwaCCCLVIII: fun fact: taki wyjątek potrafi pomóc, ale po 1: pętla musi być w #!$%@? duża, po 2: operacje w niej w #!$%@? proste, po 3: catch pusty, i jeszcze pewnie coś pomijam. Ale no, nie warto w 99.9999% przypadków.
  • Odpowiedz
1. Nie daje nic (kompilator Javy sam jest w stanie zrobić tę optymalizację)


@InformacjaNieprawdziwaCCCLVIII: no nie do końca, tylko zakładając że to jakaś tablica/ArrayList, czasem warto pamiętać, bo raz widziałem że ktoś napisał coś takiego a .size w środku miało jakieś synchronizacje/locki i jebut po wydajności.
  • Odpowiedz
@leoha: Instrukcja LOOP jest wolniejsza niż napisanie tego samego przy użyciu kilku instrukcji, a współczesne kompilatory jej nie emitują. Ostatni procesor, na jakim opłacało się użyć LOOP, to Intel 286.
Jeśli zaś chodzi o liczenie w górę lub w dół jako takie, to kompilator sam to zmieni, jeśli uzna, że jest to poprawne i opłacalne.
  • Odpowiedz
@Blackhorn: Ktoś popłynął mocno xD Benchmark w debugu na pewno dawał "oczekiwany" wynik.

Niemniej... jest jeden przykład podobnej optymalizacji, która do niedawna nie była wspierana przez kompilator - kolejność iteracji w wielowymiarowych tablicach.
  • Odpowiedz