¿Hay una función (los intrínsecos de SSEx son correctos) que llenará la memoria con un valor especificado de int32_t
? Por ejemplo, cuando este valor es igual a 0xAABBCC00
la memoria del resultado debe ser similar:Cómo llenar la memoria rápidamente con un valor `int32_t`?
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
AABBCC00AABBCC00AABBCC00AABBCC00AABBCC00
...
que podría utilizar std::fill
o simple para-loop, pero no es lo suficientemente rápido.
Cambio de tamaño de un vector realizado una vez al principio del programa, esto no es un problema. El cuello de botella está llenando la memoria.
código simplificado:
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;
}
¿Por qué no lo codifica usted mismo usando las instrucciones de SSE? Tiene las instrucciones movxxxx para mover la memoria (128 bits a la vez). Es solo un ciclo y se mueve, no debería ser difícil de hacer. –
Admitiré que tengo un poco de curiosidad en cuanto a cuál podría ser su caso de uso para esto, lo que hace que un bucle for no sea lo suficientemente rápido. ¿Estás lidiando con un tremendo bloque de memoria? ¿Su plataforma es mala para la bifurcación? ¿Lo haces con frecuencia en una aplicación de alto rendimiento, como un juego o algo así? –
@Alexandre C., las instrucciones SSE están bien, pero pensé que tal vez ya hay alguna función en WinAPI. No quiero inventar una rueda. –