• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

goto a przetwarzanie potokowe

Object Storage Arubacloud
0 głosów
329 wizyt
pytanie zadane 20 października 2017 w C i C++ przez Virus_K Początkujący (280 p.)
Cześć wszystkim!

Dzisiaj na wykładzie dowiedziałem się, że rozkazy skoku powodują zmniejszenie wydajności procesora w którym zastosowane jest przetwarzanie potokowe. Skojarzyłem to z instrukcją goto, której podobno w żadnym wypadku nie wolno mi stosować ;) Rozumiem, że goto może być nieczytelne w dużych programach, ale czy to (wydajność) właśnie jest powodem dla którego nie powinienem korzystać z goto nawet w małych programach?

2 odpowiedzi

+2 głosów
odpowiedź 20 października 2017 przez adrian17 Ekspert (344,860 p.)
wybrane 20 października 2017 przez Virus_K
 
Najlepsza

ale czy to (wydajność) właśnie jest powodem dla którego nie powinienem korzystać z goto nawet w małych programach?

Nie.

Warunkowe elementy języka (takie jak if, while, for, czasem switch) zazwyczaj kompilują się do warunkowych instrukcji skoku. `goto` to tylko dodatkowy bezwarunkowy skok. A jeśli weźmiemy pod uwagę zdolności optymalizacji kompilatora, to w wynikowym kodzie często nie da się rozpoznać czy w ogóle było w oryginalne wpisane jakiekolwiek `goto`.

W praktyce w niskopoziomowych projektach `goto` jest wręcz czasem używane do pisania wydajnego kodu, który normalniej trudniej byłoby zapisać; na przykład maszyny stanu. Cała główna pętla Pythona to jeden wielki switch mający po kilka goto na każdej gałęzi.

A co do samego procesora:

że rozkazy skoku powodują zmniejszenie wydajności procesora w którym zastosowane jest przetwarzanie potokowe.

Skoki warunkowe są potencjalnym problemem, tak. Ale... w dużym stopniu rozwiązany problem przez branch prediction. (link z przyjemnym opisem https://stackoverflow.com/a/11227902 ).

Skoki bezwarunkowe pod znany adres (odpowiednik `goto`) są względnie bardzo niewielkim problemem dla pipeline'u.

komentarz 20 października 2017 przez Virus_K Początkujący (280 p.)
Dzięki za odpowiedź, ciekawy i przystępnie napisany artykuł
+1 głos
odpowiedź 20 października 2017 przez mokrowski Mędrzec (155,460 p.)

Edsger W. Dijkstra 1966 "Go To Statement Considered Harmful"

Zacznij tu: https://en.wikipedia.org/wiki/Structured_programming

Ogólnie wydajność nie jest głównym problemem. Problemem jest pozbawienie się możliwości analizy jak progam działa.

komentarz 20 października 2017 przez Virus_K Początkujący (280 p.)
Dzięki za odpowiedź ;)

Podobne pytania

0 głosów
1 odpowiedź 172 wizyt
pytanie zadane 27 lutego 2016 w C i C++ przez Łukasz Kutyński Początkujący (330 p.)
+2 głosów
0 odpowiedzi 146 wizyt
0 głosów
1 odpowiedź 319 wizyt
pytanie zadane 25 marca 2021 w C i C++ przez Artrix Początkujący (290 p.)

92,566 zapytań

141,420 odpowiedzi

319,614 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...