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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top