Quando sono giù per spremere l'ultimo pezzo di prestazioni da un kernel, di solito trovo che la sostituzione del operatori logici (&&
e ||
) con operatori bit per bit (&
e |
) rende il kernel di un po 'più veloce . Ciò è stato osservato osservando il riepilogo del tempo del kernel in CUDA Visual Profiler.CUDA: Perché gli operatori bit a bit sono talvolta più veloci degli operatori logici?
Quindi, perché gli operatori bit a bit più veloci rispetto agli operatori logici in CUDA? Devo ammettere che sono non sempre più veloce, ma molte volte lo sono. Mi chiedo quale magia possa dare questa accelerazione.
Disclaimer: Sono consapevole del fatto che gli operatori logici di cortocircuiti e operatori bit a bit no. Sono ben consapevole di come questi operatori possano essere utilizzati impropriamente con conseguente codice errato. Uso questa sostituzione con cura solo quando la logica risultante rimane la stessa, c'è un aumento di velocità e l'aumento ottenuto mi importa :-)
Grazie per l'ottimo consiglio di ottimizzazione! –
Roger: Felice di aiutare! Sono stato sorpreso anche quando ho scoperto questo :-) –