Esiste una funzione (SSEx intrinsics è OK) che riempirà la memoria con un valore specificato int32_t
? Per esempio, quando questo valore è pari a 0xAABBCC00
memoria risultato dovrebbe assomigliare:Come riempire velocemente la memoria con un valore `int32_t`?
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
...
potrei usare std::fill
o semplice per-loop, ma non è abbastanza veloce.
Ridimensionamento di un vettore eseguito solo una volta all'inizio del programma, ciò non è un problema. Il collo di bottiglia sta riempiendo la memoria.
codice semplificato:
struct X
{
typedef std::vector<int32_t> int_vec_t;
int_vec_t buffer;
X() : buffer(5000000) { /* some more action */ }
~X() { /* some code here */ }
// the following function is called 25 times per second
const int_vec_t& process(int32_t background, const SOME_DATA& data);
};
const X::int_vec_t& X::process(int32_t background, const SOME_DATA& data)
{
// the following one string takes 30% of total time of #process function
std::fill(buffer.begin(), buffer.end(), background);
// some processing
// ...
return buffer;
}
Perché non lo si codifica da soli utilizzando le istruzioni SSE? Hai le istruzioni movxxxx per spostare la memoria (128 bit alla volta). È solo un ciclo e si muove, non dovrebbe essere difficile da fare. –
Devo ammettere che sono un po 'curioso di sapere quale potrebbe essere il tuo caso d'uso per questo che rende un ciclo for non abbastanza veloce. Hai appena a che fare con un tremendo blocco di memoria? La tua piattaforma fa schifo alle filiali? Lo fai spesso in un'app ad alte prestazioni, come un gioco o qualcosa del genere? –
@Alexandre C., le istruzioni SSE sono OK, ma ho pensato che forse c'è già qualche funzione in WinAPI. Non voglio inventare una ruota. –