ZawzietyRobaczek
ZawzietyRobaczek
#cpp #visualstudio #programowanie #programista15k #gamedev Cześć, czy Ktoś może wie ak wynikają te wartości z profilera? Chodzi mi tu głównie o pierwszą linijkę, gdzie wykonuje dość prostą operację int cellX = (int)floor_x >> 6; jest ona zaznaczona na czerwono a ta poniżej już nie.. i na końcu 3 ostatnie linijki, z czego może wynikać ta duża wartosć? chodzi o dostęp do pamięci? to jest bufor w pamięci RAM alokowany przez new, akurat ten fragment bede jeszcze optymalizował poprzez zastapienie tych 3 indeksów (RGB) jedna komórką pamięci, moze cos to pomoze
  • Najlepsze
  • Wszystkie komentarze
leoha
leoha
1
te mapowanie


@laoong: to mapowanie #grammarnazi
laoong
@ZawzietyRobaczek: Profiler pracuje nie na wierszach kodu, tylko na instrukcjach procesora, których położenie jest potem mapowane na wiersze kodu. W buildzie release te mapowanie jest dosyć chaotyczne i dlatego są takie kwiatki. A ostatnie wskazania rzeczywiście są przez dostęp do pamięci.
zibizz1
zibizz1
@ZawzietyRobaczek: nie znam się na tym ale czy słyszałeś o czymś takim jak cache?
Chodzi o ostatnie 3 linijki. Bo masz tam dostęp do elementów sporej tablicy. Więc w pierwszej linijce masz może duży koszt pobrania danych z RAM do np L3, a w kolejnych 2 już mniejszy bo już te daje masz blizej. Dlatego jak iterujesz coś to dobrze poruszać się kolejno a nie skakać. Bo wtedy korzystasz z
Saly
Saly
0
@ZawzietyRobaczek: pewnie dostęp do pamięci tyle trwa. W takiej sytuacji najlepiej jest popatrzeć na wygenerowany assemblera, bo optymalizator może mocno przerobić ten kod
laoong
@zibizz1: @Saly: Dostęp do pamięci na końcu pętli nie jest sekwencyjny - kod wyżej oblicza indeks tablicy - więc to dość oczywiste, że nie trafia w cache.
zrakiep
@ZawzietyRobaczek: jak spojrzysz w wygenerowany ASM to pewnie wszystko się wyjaśni. Stawiam, że kompilator poupraszczał sobie te tymczasowe zmienne i zamiast 20 linii obliczen robi parę czarów na rejestrach i ma wynik.

I tak, dostęp do pamięci jest kilkaset razy wolniejszy niż obliczenia. W takiej pętli mieszanie w tablicach będzie najwolneijsze. Największy gain jaki możesz tu mieć to takie poprzekładanie, by te ucoutputbuffer zapełniać po kolei.