Wpis z mikrobloga

przykład jest może rzeczywiście źle dobrany, ale unrolling pętli jest dobrze znanym sposobem optymalizacji. Wieć nie do końca jest się z czego śmiać tutaj.


@leoha: tak zgadzam się i w JVM robi to JIT, więc ręczny unrolling to hinduizm programistyczny i nie ma sensu tego stosować
  • Odpowiedz
@Blackhorn: dramat k---a dramat... najgorzej jak ktoś to zapamięta i później w pracy nie da sobie przegadać:/

Był tu już taki co zawsze jak miał mnożenie w kodzie razy 2 to bity przesuwał bo po co pisać mniej wydajny kod i za c---a sobie nie dał przegadać że robi źle. Jeszcze się tym chwalił i był z tego dumny.

Pkt 1 jako jedyny ma jeszcze rację bytu, gdy wynik metody
  • Odpowiedz
@Blackhorn: przecież to wszystko kompilator sobie sam zatenteguje lol

może jeszcze niech przy pętlach mniejszych niż 5 wypisują cały kod z palca a pętle wyrzucą bo to jeden cmp/je/jmp mniej będzie ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@Blackhorn: o borze, moje oczy.

Przecież 1-3 i tak ostatecznie zostaną rozwinięte i po uruchomieniu kodu nie będzie tam żadnej pętli, a 4 to żart a nie kod. Ktoś tam słyszał na tych studiach o wielowatkowości? Co, jak w drugim wątku ktoś będzie dopisywać dane do tej tablicy?

Trick xD
  • Odpowiedz
A już ten ostatni "trik" to po prostu esencja polskiej myśli informatycznej


@InformacjaNieprawdziwaCCCLVIII:

Ale to akurat prawda, bo porównanie z zerem jest szybsze. Problem tego obrazka jest taki, że są to to tzw. "premature optimizations". W teorii przyspieszają kod, ale w praktyce są bez znaczenia - no chyba, że piszemy jakiś algorytm, który na prawdę mocno opiera się na takich pętlach i każda, nawet najmniejsza optymalizacja się liczy.
  • Odpowiedz
@Blackhorn: trzeba było jeszcze wspomnieć, że prowadzący sam podchodził do tego z dużą dozą dystansu i podkreślał, że niektóre rzeczy z tego slajdu już są nieaktualne lub załatwiane za programistę przez kompilator.
Jeżeli chodzi o ostatni przykład z try..catch, to pokazał to tylko jako ciekawostkę i mówił, żeby za żadne skarby czegoś takiego nie robić.
Rozumiem heheszki, ale strasznie mnie w-----a jak co roku ktoś ciśnie bekę z tego slajdu
  • Odpowiedz
@leoha w javie nigdy nie robi się loop unrollingu bo mamy JIT który jako pierwsze 2 operacje w gorących miejscach robi inlinowanie metod i unrollowanie pętli :)
  • Odpowiedz
@Blackhorn To jest masakra że nauczyciele zatrzymali się na czasach gdzie trzeba było oszczędzać milisekundy (teraz to samo wykonanie zajmuje pewnie mikro/nano)

Zamiast skupić się na obecnych technikach optymalizacji, jakimi może być niemutowalnosc, batchowanie, nie odpytywanie zewnętrznych serwisów w petlach, cashowanie, TLS offloading i wiele innych to oni rozwiązują problemy dawno rozwiązane przez kompilatory i JITy xdd
  • Odpowiedz
jaka jest roznica w iterowaniu do 0, a do N?

@ni0bi: pewnie chodzi o to, że na x86 jest instrukcja loop, która decrementuje ecx i skacze jeśli nie jest zerem i domniemywa się, że jvm pod spodem tak będie robić (czyli masz petlę w jednej instrukcji)


@leoha: Nie tylko x86.
Zaletę iterowania do 0 jest dość łatwo wytłumaczyć jak ktoś zna jako-tako assemblera i architektury procesorów. Pętla na poziomie assemblera zwykle
  • Odpowiedz