Previziunea ramificației între obiecte din aceeași clasă

Optimizarea unui program și încercarea de a evita o eroare de fabricație. Am două obiecte dintr-o clasă. În funcția primară a clasei există mai multe ramuri if . Fiecare obiect are o direcție diferită pe fiecare dintre aceste ramuri și fiecare execută funcția unul după altul. Intrebarile mele:

Deoarece sunt membri ai aceleiași clase și, prin urmare, împărtășesc acea funcție, aceștia împărtășesc aceeași predicție a sucursalei? În esență, fac ca sistemul să meargă la TFTFTFTF ...

Sau, deoarece acestea sunt propriile lor obiecte, au propriile lor predicții de ramură și, prin urmare, menținând previziuni consecvente (TTTTTTT ... și FFFFFFFF ...)

1
adăugat editat
Vizualizări: 3
Brand predicție? Cum ar fi Coca-Cola sau Pepsi? Apple sau PC? Eu prezic că OS/2 va fi sistemul de operare al viitorului.
adăugat autor Kerrek SB, sursa
@ Joe: Am uitat de asta - toate aceste redefinitii. Am auzit că nu mai există "puncte de secvență", iar auto este acum mașină .
adăugat autor Kerrek SB, sursa
@KerrekSB Nu ai auzit? Marca este forma singulară a sucursalelor. Ar putea fi îngropat undeva în C ++ 11 spec.
adăugat autor Joe, sursa

3 răspunsuri

Da, metoda este împărțită între instanțele unei clase.

Înseamnă, de asemenea, că prezicerile sunt împărtășite.

Cu toate acestea, există mai mult de predicție ramură decât de "ultimul" timp. Procesorul își va aminti unele dintre ultimele rezultate și va identifica modelele "ușor" (ciclice). Prin urmare, dacă schimbați în mod constant între cele două obiecte și modelul ajunge la TFTFTFTFTF atunci procesorul va ghici corect că următorul rezultat va fi un T .

Din punct de vedere semantic, cu toate acestea, te-ai gândit la utilizarea unei clase de bază și a două clase diferite derivate (+ mecanismul virtual obișnuit)?

2
adăugat
Huh. Interesant. Și nu, nu m-am gândit la metoda derivată. Aceasta este o altă opțiune pe care o voi lua cu siguranță. Multumesc pentru sfat.
adăugat autor Hanley, sursa

Deoarece o eroare de funcționare a unei ramificații va costa în mod obișnuit între 10 și 20 de cicluri, este cu adevărat importantă numai când se află într-o buclă care este executată de milioane de ori pe secundă. CPU-urile moderne fac o treabă destul de bună de predicție a sucursalelor, deci este destul de rar să vă faceți griji în legătură cu acest tip de lucruri (în comparație cu 5-10 de ani în urmă).

2
adăugat
@Hanley: cu excepția cazului în care aveți nevoie de acest lucru pentru a rula pe procesoare foarte vechi, atunci probabil că nu trebuie să vă faceți griji - mitologia de optimizare tinde să persiste mult mai târziu "cea mai bună dată înainte".
adăugat autor Paul R, sursa
Programul meu este un sintetizator, iar această funcție este numită de atâtea ori pe secundă, adică înțelepciunea convențională în rândul programatorilor DSP audio, pentru a evita apariția unei erori în cadrul acestei bucle. Deci, în cazul meu, deși știu că e rară, trebuie să mă ocup de asta.
adăugat autor Hanley, sursa

Nu vă faceți griji cu privire la detalii de nivel inferior, cum ar fi predicție pe ramură (va varia de la un model de un procesor la următorul). Lăsați acea optimizare la compilator (și este, probabil, destul de bun).

If you want to improve your application, work more on the algorithms themselves. And use profiling & measurements. Don't forget that premature optimization is evil.

2
adăugat
@Henley: folosiți un profiler decente pentru a vedea unde sunt într-adevăr blocajele și dacă există o problemă de eroare a ramurii - Pun pariu că nu este și că aveți probleme de performanță mult mai mari de care să vă faceți griji înainte de a vă da jos la aceste micro-optimizări.
adăugat autor Paul R, sursa
Ei bine, am terminat obtinerea software-ului la locul de munca, asa ca acum urmatorul pas logic este imbunatatirea ciclului de utilizare a acestuia, pentru ca acum este cam prea mare. Și, deși partea principală a lucrării mele de optimizare se concentrează pe algoritmi mai buni, această bucla este numită de atâtea ori că trebuie să reduc greșeala ramificată. Nu sunt sigur dacă într-adevăr apare o greșeală, prin urmare, întrebarea mea inițială.
adăugat autor Hanley, sursa
Acesta este un sfat bun și este pe lista de sarcini. Motivul pentru care o aduc acum este că sunt în mijlocul rescrierii unei mari bucăți din program din motive structurale și de vreme ce am mai multe căi pe care să le iau (dacă sau nu dacă) mi-am dat seama că este mai bine să determinăm asta acum. P.S. Folosesc XCode. Profilul lui este considerat "decent"?
adăugat autor Hanley, sursa