Domanda

Più recenti processori ARM includono il PLD e PLI istruzioni.

Sto scrivendo stretto cicli interni (in C++) che hanno un non-sequenziale pattern di accesso alla memoria, ma un modello che naturalmente il mio codice comprende pienamente.Prevedo un notevole aumento di velocità, se potessi, prefetch, la posizione successiva, mentre l'elaborazione della posizione di memoria corrente, e mi aspetto che questo deve essere rapida sufficiente per provare sarebbe valsa la pena di provare!

Io sto usando il nuovo costoso compilatori dal BRACCIO, e non sembra essere tra PLD istruzioni ovunque, figuriamoci in questo particolare ciclo che mi interessa.

Come posso includere esplicite istruzioni di prefetch nel mio codice C++?

È stato utile?

Soluzione

Ci dovrebbe essere qualche Compilatore Caratteristiche specifiche.Non esiste un modo standard di farlo per C/C++.È un compilatore Compilatore della Guida di Riferimento.Per RealView Compilatore vedere questo o questo.

Altri suggerimenti

Se si sta tentando di estrarre veramente il massimo delle prestazioni da questi cicli, che mi sento di raccomandare di scrivere l'intero costrutto in assembler.Si dovrebbe essere in grado di utilizzare l'assembly inline, in base ai dati strutture coinvolte nel ciclo.Ancora meglio se si può svolgere qualsiasi pezzo di ciclo (come le parti coinvolte nel rendere l'accesso non sequenziale).

A rischio di chiedere l'ovvio:hai verificato che il compilatore di destinazione dell'architettura?Per esempio (umorismo me), se di default il compilatore è mirato a ARM7, sei mai andando a vedere il PLD istruzione.

Non è fuori del regno della possibilità che altre ottimizzazioni come software pipelining e il loop unrolling può ottenere lo stesso effetto come la vostra idea di prelettura (nascondere la latenza dei carichi mediante la sovrapposizione con utile di calcolo), ma senza l'ulteriore istruzione della cache di pressione causato dalle istruzioni extra.Vorrei anche andare fino a dire che questo è il caso più spesso di quanto non, per la stretta cicli interni che tendono ad avere poche istruzioni e poco controllo di flusso.È il compilatore a fare questi tipi di tradizionale ottimizzazioni, invece.Se è così, potrebbe essere la pena di guardare la pipeline diagramma di sviluppare una più dettagliata dei costi di modello di come il processore lavora, e valutare quantitativamente più se prelettura sarebbe di aiuto.

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