Can C dati compilatore prefetch intorno alla chiamata?
-
28-09-2019 - |
Domanda
E 'possibile buon compilatore C con elevata ottimizzazione ha permesso di ottimizzare il codice con precaricamenti e al luogo precaricamenti prima che qualche chiamata di funzione:
struct *abc;
//...
function_first(&(abc->field1));
abc->field2= abc->field3+ abc->field4 + abc->field5 + ...;
// a lot work on struct fields
function_second(&(abc->field1))
Quindi, il codice può dopo l'ottimizzazione del compilatore di avere un precaricamenti per i campi abc
e spostarlo superiore chiamata function_first()
, in questo modo:
struct *abc;
//...
__prefetch(abc->field2);__prefetch(abc->field5);
function_first(&(abc->field1));
abc->field2= abc->field3+ abc->field4 + abc->field5 + ...;
// a lot work on struct fields
function_second(&(abc->field1))
La function_first()
funzione può essere annotato come clean
(non hanno effetti collaterali sui campi abc diversi campo1), o il programma può essere compilato in ottimizzazione dell'intero programma (-ipo / Qipo per Intel), dove il compilatore può controllare, cosa function_first
fare.
UPDATE: senza chiamate le precaricamenti sono possibili, ma a questa domanda è di circa mescolando chiamate e precaricamenti
Grazie.
Soluzione
Sì, il compilatore ICC di Intel può fare questo (*). E 'discutibile se si rende di fatto alcuna differenza per le prestazioni però.
(*) Vedere la rel - opt-prefetch = n interruttore .