El máximo teórico de ancho de banda de memoria para un procesador Core 2 con memoria de doble canal DDR3 es impresionante: según el Wikipedia article en la arquitectura, 10+ o más de 20 gigabytes por segundo. Sin embargo, las llamadas stock memcpy() no logran esto. (3 GB/s es el más alto que he visto en tales sistemas.) Probablemente, esto se debe al requisito del proveedor del sistema operativo de que memcpy() esté ajustado para cada línea de procesador en función de las características del procesador, por lo que una implementación stock memcpy() debe ser razonable en una gran cantidad de marcas y líneas.memcpy/memmove completamente optimizado para la arquitectura Core 2 o Core i7?
Mi pregunta: ¿Existe una versión altamente disponible y sintonizada para los procesadores Core 2 o Core i7 que pueden utilizarse en un programa en C? Estoy seguro de que no soy la única persona que lo necesita, y sería un gran desperdicio de esfuerzo para todos optimizar micro su propio memcpy().
La memcpy de MSVC se vectoriza cuando se cumplen estas condiciones (aproximadamente, no soy un experto en esto): las direcciones de fuente y de destino están alineadas por lo menos de 8 bytes (64 bits) y el tamaño de movimiento es superior un cierto umbral. La alineación de 64 bits proviene de la garantía de MSVC de que su propio 'malloc' devuelve la alineación de 64 bits. Luego, en compilaciones de 32 bits, se usará SSE2 de 128 bits (con mezcla de 64 bits si es necesario), y en compilaciones de 64 bits, usará registros de propósito general de 64 bits (con el dispositivo de Duff) para hacer el movimiento porque cuando se hace correctamente es "lo suficientemente rápido" en comparación con SSE2. – rwong
/arch: CPU mínimos requisitos de arquitectura, uno de: SSE2 - (predeterminado) permitir el uso de las instrucciones disponibles con SSE2 habilitado CPU Esta es vc visual del vs2013.update3 estudio ++ salida . En el cual SSE2 es el valor predeterminado, basado en mi punto de referencia, use/ARCH: SSE2 no mejorará el rendimiento de memcpy, y yo evalué, incluso/ARCH: AVX no mejora el rendimiento de memcpy. –
zhaorufei