C'è un modo per dire a clang di srotolare un loop specifico?clang: Force loop srotolare per loop specifico
Googling per una risposta mi dà opzioni da riga di comando che interesseranno l'intero compilatore e non un singolo ciclo.
C'è una domanda simile per GCC --- --- Tell gcc to specifically unroll a loop ma la risposta a condizione che ci non funziona con clangore.
Opzione 1 ha suggerito c'è:
#pragma GCC optimize ("unroll-loops")
sembra essere silenziosamente ignorati. Infatti
#pragma GCC akjhdfkjahsdkjfhskdfhd
viene ignorato silenziosamente.
Opzione 2:
__attribute__((optimize("unroll-loops")))
risultati in un avvertimento:
warning: unknown attribute 'optimize' ignored [-Wattributes]
Aggiornamento
joshuanapoli fornisce una bella soluzione come iterare tramite template metaprogrammazione e C + +11 senza creare un ciclo. Il costrutto sarà risolto in fase di compilazione, risultando in un corpo ripetutamente in linea. Anche se non è esattamente una risposta alla domanda, essenzialmente raggiunge la stessa cosa.
Ecco perché accetto la risposta. Tuttavia, se ti capita di sapere come utilizzare un ciclo C standard (for
, while
) e obbligarlo a srotolarlo, condividi la conoscenza con noi!
In genere, il compilatore ha un'idea molto precisa di quando è opportuno srotolare un ciclo e quando non è una buona idea.Qual è il caso speciale che stai cercando di risolvere in caso contrario? –
Potrebbe non * forzare * lo srotolamento, ma '__attribute__ ((hot))' potrebbe valere la pena di provarlo. –
@MatsPetersson Voglio misurare in modo esplicito il vantaggio dello srotolamento del ciclo. Lo srotolamento scritto a mano velocizza il codice 3 volte, ma il compilatore non lo capisce. – CygnusX1