Sto provando a bloccare un valore compreso tra -127 e 127 su un sistema Cortex-M microcontroller.C Questo hack senza branch è in realtà più veloce?
Ho due funzioni concorrenti, uno usa condizionali l'altro usa un attacco senza ramo che ho trovato here.
// Using conditional statements
int clamp(int val) { return ((val > 127) ? 127 : (val < -127) ? -127 : val); }
// Using branchless hacks
int clamp(int val) {
val -= -127;
val &= (~val) >> 31;
val += -127;
val -= 127;
val &= val >> 31;
val += 127;
return val;
}
Ora so in alcuni casi uno di questi metodi potrebbe essere più veloce rispetto agli altri, e vice-versa, ma in generale è la pena di utilizzare la tecnica branchless visto che in realtà non mi importa che uso, entrambi funzioneranno bene nel mio caso?
Un piccolo background sul microcontrollore, è un microcontrollore basato su ARM in esecuzione a 90 MIPS con pipeline a 3 stadi, fetch, decodifica ed esecuzione e sembra avere una sorta di predittore di ramo ma non sono riuscito a trovare dettagli.
Lo ha fatto un punto di riferimento? –
Sembra che le ottimizzazioni fossero disattivate quando il codice è stato compilato. –
Ti interessano le prestazioni su ARM, ma stai guardando l'ASM generato per x86. Questo non ti porterà da nessuna parte. – hobbs