Il massimo teorico di larghezza di banda della memoria per un processore Core 2 con memoria DDR3 a doppio canale è impressionante: secondo lo standard Wikipedia article sull'architettura, 10+ o 20+ gigabyte al secondo. Tuttavia, le chiamate memcpy() non ottengono questo risultato. (3 GB/s è il più alto che abbia mai visto su tali sistemi.) Probabilmente, questo è dovuto al requisito del fornitore del sistema operativo che memcpy() sia ottimizzato per ogni linea di processore in base alle caratteristiche del processore, quindi un'implementazione di stock memcpy() dovrebbe essere ragionevole su un ampio numero di marche e linee.Memcopy/memmove completamente ottimizzati per l'architettura Core 2 o Core i7?
La mia domanda: Esiste una versione liberamente disponibile e altamente sintonizzata per processori Core 2 o Core i7 che possono essere utilizzati in un programma C? Sono sicuro di non essere l'unica persona che ne ha bisogno e sarebbe un grosso spreco di sforzi per tutti ottimizzare la propria memcpy().
La memcpia MSVC viene vettorizzata quando queste condizioni sono soddisfatte (all'incirca, non sono un esperto su questo): entrambi gli indirizzi di origine e destinazione sono almeno 8 byte (64 bit) allineati e la dimensione del movimento è sopra una certa soglia. L'allineamento a 64 bit deriva dalla garanzia di MSVC che il proprio 'malloc' restituisce l'allineamento a 64 bit. Quindi, su build a 32 bit, verrà utilizzato SSE2 a 128 bit (con shuffle a 64 bit se necessario) e su build a 64 bit utilizzerà i registri general purpose a 64 bit (con il dispositivo Duff) per eseguire il movimento perché quando è fatto correttamente è "abbastanza veloce" rispetto a SSE2. – rwong
/arch: minimo della CPU requisiti di architettura, uno di: SSE2 - (default) consentire l'uso di istruzioni disponibile con SSE2 abilitato CPU Questo è vc studio di vs2013.update3 visiva ++ uscita . In cui SSE2 è l'impostazione predefinita, in base al mio benchmark, utilizzare/ARCH: SSE2 non migliorerà le prestazioni memcpy, e ho benchmarkato, anche/ARCH: AVX non migliora le prestazioni memcpy. –
zhaorufei