Wykop.pl Wykop.pl
  • Główna
  • Wykopalisko214
  • Hity
  • Mikroblog
  • Zaloguj się
  • Zarejestruj się
Zaloguj się

Popularne tagi

  • #ciekawostki
  • #informacje
  • #technologia
  • #polska
  • #swiat
  • #motoryzacja
  • #podroze
  • #heheszki
  • #sport

Wykop

  • Ranking
  • Osiągnięcia
  • FAQ
  • O nas
  • Kontakt
  • Reklama
  • Regulamin
To Znalezisko jest w archiwum

323

Dlaczego przetwarzanie posortowanej tablicy trwa krócej niż nieposortowanej?

Dlaczego przetwarzanie posortowanej tablicy trwa krócej niż nieposortowanej?

Prosty kod napisany w C++ (jak i Javie) wykonuje się znacznie szybciej w sytuacji gdy tablica danych zostanie wcześniej posortowana. Dlaczego? Świetny przykład jak działa i jak istotne jest przewidywanie rozgałęzień w procesorach, polecam przeczytać :)

a.....r
a.....r
konto usunięte
z
stackoverflow.com
dodany: 19.12.2012, 09:49:59
  • #
    technologia
  • #
    programowanie
  • #
    c
  • #
    java
  • #
    branchprediction
  • 115
  • Otrzymuj powiadomienia
    o nowych komentarzach

Treści powiązane (2)

Optimizing software in C++: An optimization guide for Windows, Linux and Mac
zrakiep
z agner.org
  • 4
Kurs na MIT w którym takie rzeczy wyjaśnione są krok po kroku
kundziad
z ocw.mit.edu
  • 1

Komentarze (115)

najlepsze

anonim1133
anonim1133
19.12.2012, 09:52:35
  • 30
tl;dr Procesor zgaduje jaki będzie kolejny wynik działania, jeżeli się pomyli(a przy losowych danych jest na to 50% szans), to musi zaczynać od początku i liczyć.

Jeżeli zgadnie, przechodzi do kolejnej instrukcji. A przy posortowanych danych jest wysokie prawdopodobieństwo, że zgadnie.

Niżej autor wyjaśnienia prezentuje też sposób który działa równie szybko na posortowanych i nieposortowanych danych. Który w przypadku c++ działa równie szybko co przy posortowanych danych, a więc oszczędzamy czas, bo
  • 36
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

a.....r
a.....r
konto usunięte
Autor
19.12.2012, 11:59:23
  • 38
Treść przeznaczona dla osób powyżej 18 roku życia...
m_i_n
m_i_n
19.12.2012, 11:04:18
  • 10
Procesor zgaduje jaki będzie kolejny wynik działania, jeżeli się pomyli(a przy losowych danych jest na to 50% szans), to musi zaczynać od początku i liczyć.


@anonim1133: Ale skąd wie że się pomylił bądź nie? Bo jeśli wie jaki jest poprawny to po co ma zgadywać? ;) Domyślam się że zastosowałeś jakiś skrót myślowy, możesz to rozwinąć?
_Liquid
_Liquid
19.12.2012, 14:37:32
  • 24
Nic nie rozumiem. WYKOP!
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

t.....4
t.....4
konto usunięte 19.12.2012, 14:40:38
  • 16
Dodałem do zakładek, poczytam jak będę inteligentniejszy
  • 3
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

echelon_
echelon_
19.12.2012, 14:51:19
  • 2
@t3m4: Inteligencja tu nie ma nic do gadania - raczej wiedza ;)
czuraj
czuraj
19.12.2012, 18:38:27
  • 0
@t3m4: @echelon_: Brzmi mądrze i do tego po angielsku - wykop bez żadnego zawahania :).
applicative_functor
applicative_functor
19.12.2012, 10:44:49
  • 14
Do autora najbardziej zaplusowanej odpowiedzi należy również rekord najdłuższego rozwinięcia dziesiętnego liczby pi, mianowicie do 10 bilionów miejsc po przecinku (10^12):

http://www.numberworld.org/misc_runs/pi-10t/details.html
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

k.....e
k.....e
konto usunięte 19.12.2012, 12:51:17
  • 6
Ale jak to:

if (data[c] >= 128)

sum += data[c];

zamieniło się w to
  • 9
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

a.....r
a.....r
konto usunięte
Autor
19.12.2012, 12:58:16
  • 38
@kite: To jest hack, który ma realizować dokładnie to samo co wyjściowy program.

Zastanów się co robi

int t = (data[c] - 128) >> 31
. Jeśli data[c] jest większe lub równe 128 to wyjdzie tam liczba nieujemna (a więc bit znaku
Tojot
Tojot
Tojot
20.12.2012, 08:24:27
  • 3
Treść przeznaczona dla osób powyżej 18 roku życia...
prusi
prusi
prusi
19.12.2012, 16:40:41
  • 5
Cóż, właściwie można zakopać jako informację nieprawdziwą - otóż wspomniana różnica istnieje tylko gdy kompiluje się bez włączonych w kompilatorze optymalizacji - gdy się je włączy cały warunek znika i zostaje zastąpiony rozkazem cmove i problemu nie ma - pipe jest załadowany do końca, w cache całość danych (bo tablica niewielka), więc procesor to wykonuje szybciutko.
  • 3
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

a.....r
a.....r
konto usunięte
Autor
19.12.2012, 18:00:21
  • 3
@prusi: Jest napisane nawet w tej odpowiedzi, że różne kompilatory się różnie zachowują. Testowałem to u siebie i na poziomie -O2 w gcc jest widoczny wpływ sortowania. -O3 faktycznie problem rozwiązuje, ale z tego co wiem, nie jest on powszechnie stosowany (na przykład w Fedorze -O2 to był domyślny poziom optymalizacji, na gentoo chyba też był zalecany). Zawsze byłem uczony, że "-O3" może być zbyt agresywny ale być może coś
prusi
prusi
prusi
19.12.2012, 19:37:07
  • 0
@almafater: w wypadkach, gdy O3 jest zbyt agresywne takie różnice w czasie wykonywania nie są istotne. bowiem nie zawsze szybkość wykonania jest priorytetem.
Regis86
Regis86
Regis86
19.12.2012, 11:19:49
  • 4
Odżyły wspomnienia! Prof. Biernat <3
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

nargil
nargil
19.12.2012, 18:37:55
  • 1
U mnie:

Mingw 4.7.2 (win7 natywnie)

Sorted: 7.44

Unsorted:
  • 6
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

prusi
prusi
prusi
20.12.2012, 10:03:36
  • 0
@R3d: debug i release to zestaw ustawień kompilatora i linkera, a nie jeden przełącznik w linii poleceń. w dodatku można je dowolnie zmieniać.
R3d
R3d
20.12.2012, 09:38:00
  • 0
@nargil:

Różnica jest ogromna. Myślałem, że w środowiskach dostosowanych pod GCC z automatu środowisko daje -g.

Co do czasów to nie wiem jakie powinny być, ale po prostu bez -g rzeczy się inaczej wykonują. Na bank to odczujesz w MSVC i pojemnikach z STLa, kompilując z GCC powinno być podobnie.
Cummykaze
Cummykaze
19.12.2012, 15:34:35
  • 1
Miniaturka idealnie oddaje zawartość znaleziska
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

xanio
xanio
19.12.2012, 15:33:02
  • 1
No, wreszcie coś ciekawego a nie animowany gif.
  • 1
  • Otrzymuj powiadomienia
    o nowych odpowiedziach

S.....k
S.....k
konto usunięte 19.12.2012, 17:25:45
  • -1
@xanio: A jakby tak wyjaśnienie w formie animowanego gifu?:)
  • <
  • 1
  • 2
  • Strona 1 z 2
  • >

Hity

tygodnia

Polska wygrywa Ligę Narodów 2025 Liga Narodów (Polska-Włochy 3-0)
Polska wygrywa Ligę Narodów 2025 Liga Narodów (Polska-Włochy 3-0)
2826
Sąd oddalił skargi. Zielone światło dla terminala kontenerowego w Świnoujściu
Sąd oddalił skargi. Zielone światło dla terminala kontenerowego w Świnoujściu
2522
"Jak jakiś artysta przez lata zarabiał dużo, a nie ma emerytury, to jest id**tą.
"Jak jakiś artysta przez lata zarabiał dużo, a nie ma emerytury, to jest id**tą.
2369
AFERA: Skutery wodne między kajakami! Totalna patologia na rzece Piława
AFERA: Skutery wodne między kajakami! Totalna patologia na rzece Piława
2102
InPost NIE JEST polską firmą!
InPost NIE JEST polską firmą!
2104
Pokaż więcej

Powiązane tagi

  • #ciekawostki
  • #nauka
  • #komputery
  • #zainteresowania
  • #stacjakosmiczna
  • #polska
  • #informatyka
  • #rozrywka
  • #swiat
  • #internet
  • #wydarzenia
  • #sztucznainteligencja
  • #motoryzacja
  • #ai
  • #telefony

Wykop © 2005-2025

  • O nas
  • Reklama
  • FAQ
  • Kontakt
  • Regulamin
  • Polityka prywatności i cookies
  • Hity
  • Ranking
  • Osiągnięcia
  • Changelog
  • więcej

RSS

  • Wykopane
  • Wykopalisko
  • Komentowane
  • Ustawienia prywatności

Regulamin

Reklama

Kontakt

O nas

FAQ

Osiągnięcia

Ranking