Complessità ciclica vs prestazioni

2

Per quanto comprendo il concetto, CC è determinato da quante logiche a nidificazione annidate hanno il metodo dato. Può essere sottoposto a refactoring per verificare l'opposto del predicato originale e il richiamo della chiamata. Ad esempio:

void Foo()
{
  if (predcate0)
  {
    if (predicate1)
    {
      // some code
    }
  }
}

può essere refactored in

void Foo()
{
  if (!predicate0) return;

  if (!predicate1) return;

  // some code
}

ma la cosa è che, seguendo il ramo predicate0 && predicate1 genererà meno errori di cache in C ++ se questo percorso sarà preso molto più frequentemente.

Ovviamente ho intenzionalmente semplificato il codice. Per esempio ci possono essere decine di predicati e cose come una dipendenza da predicato su un altro predicato.

Che cosa fare in questo caso? Devo buttare via le prestazioni per una migliore leggibilità?

    
posta GuardianX 21.10.2016 - 13:07
fonte

2 risposte

8

A meno che tu non abbia davvero bisogno di quella prestazione, preferisci sempre una migliore leggibilità.

Le maggiori prestazioni vinte non derivano da micro-ottimizzazioni, ma da miglioramenti della complessità algoritmica e da altri modi per evitare di svolgere attività non necessarie. Non fare qualcosa è sempre più veloce di fare qualcosa il più velocemente possibile. Il codice Cleaner facilita l'individuazione di tali opportunità.

Se hai bisogno di quella prestazione, e puoi provare con un profiler & strumenti di benchmarking che questo cambiamento ti darà quella performance, quindi ovviamente sceglierlo. Ma sei ancora in balia del tuo compilatore per ottenere il codice della macchina che è amichevole per la previsione delle filiali. Il compilatore potrebbe improvvisamente dedurre che un ramo che precedentemente considerato improbabile è effettivamente probabile, o viceversa. Per ovviare a questo, cerca di esaminare l'ottimizzazione guidata dal profilo e / o le annotazioni e i suggerimenti del compilatore che ti consentono di contrassegnare in modo univoco un ramo come probabile o improbabile.

    
risposta data 21.10.2016 - 13:23
fonte
3

Se non sai già con certezza che dovresti eliminare la leggibilità per le prestazioni perché hai un problema di prestazioni e hai dati di profiler che dimostrano che il problema si trova qui, quindi elimina definitivamente le prestazioni.

    
risposta data 21.10.2016 - 13:14
fonte

Leggi altre domande sui tag