Wpis z mikrobloga

#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
ZawzietyRobaczek - #cpp #visualstudio #programowanie #programista15k #gamedev Cześć, ...

źródło: comment_1604628795zEXIvwVdbFSOcfy6IhQ1W7.jpg

Pobierz
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@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
  • Odpowiedz
via Wykop Mobilny (Android)
  • 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
  • Odpowiedz
@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.
  • Odpowiedz