Capisco quando una succursale è facilmente prevedibile è meglio usare un'istruzione IF perché il ramo è totalmente gratuito. Ho imparato che se il ramo non è facilmente prevedibile, allora un CMOV è migliore. Tuttavia, non capisco come questo possa essere raggiunto?Che cos'è il CMOV che migliora le prestazioni della pipeline della CPU?
Sicuramente il dominio del problema è sempre lo stesso: non conosciamo l'indirizzo della prossima istruzione da eseguire? Quindi non capisco fino in fondo la pipeline, quando viene eseguito il CMOV, in che modo ciò avrebbe potuto aiutare il feticcio dell'istruzione (10 cicli di CPU in passato) a scegliere il percorso corretto e prevenire uno stallo della pipeline?
Qualcuno potrebbe aiutarmi a capire come CMOV migliora la ramificazione?
possibile duplicato di [Perché una mossa condizionale non è vulnerabile per errore di previsione ramo?] (Http://stackoverflow.com/questions/14131096/why-is-a-conditional-move-not-vulnerable-for-branch -errore-errore) –
Come "non si conosce l'indirizzo della prossima istruzione da eseguire?" Se la sequenza di istruzioni è 'I1; cmov; I3', le istruzioni 'I1', quindi' CMOV', quindi 'I3' vengono eseguite, sempre in questo ordine. Quello che viene dopo 'I1' è' CMOV'. Quello che viene dopo 'CMOV' è' I3'. –
Un ramo con una sola istruzione è un caso molto speciale; si presta a ottimizzazioni che un ramo di scopo generale non ammette. –