Rendimiento de fwrite () muy por debajo de la capacidad del disco

Tengo una matriz de una asignación dinámicastruct con 17 millones de elementos. Para guardarlo en el disco, escribo

fwrite(StructList, sizeof(Struct), NumStructs, FilePointer)

En un paso posterior lo leí con un equivalentefread declaración, es decir, usandosizeof(Struct) y un recuento deNumStructs. Espero que el archivo resultante sea de alrededor de 3.5 GB (esto es todo x64).

¿Es posible en cambio pasarsizeof(Struct) * NumStructs como el tamaño y1 como el recuento para acelerar esto? Me estoy rascando la cabeza de por qué la operación de escritura podría tomarminutos en una computadora rápida con 32 GB de RAM (mucha memoria caché de escritura). He ejecutado puntos de referencia de elaboración casera y el caché es lo suficientemente agresivo como para que sea típico 400 MB / seg para los primeros 800 MB a 1 GB. PerfMon muestra que consume el 100% de un núcleo durante la escritura.

Vi la preguntaaquí así que lo que pregunto es si hay algún bucle dentro de fwrite que pueda ser "engañado" para ir más rápido diciéndole que escriba 1 elemento de tamaño n * s en lugar de n elementos de tamaño s

EDITAR

Ejecuté esto dos veces en modo de liberación y las dos veces dejé de esperar. Luego lo ejecuté en modo de depuración sabiendo que típicamente elfwrite las operaciones llevan mucho más tiempo. El tamaño exacto de los datos que se escribirán es 4,368,892,928 bytes. En los tres casos, PerfMon muestra dos ráfagas de actividad de escritura en el disco con unos 30 segundos de diferencia, después de lo cual la CPU pasa al 100% de un núcleo. El archivo está en ese punto 73,924,608 bytes. Tengo puntos de interrupción a cada lado delfwrite así que sé que ahí es donde está sentado Ciertamente parece que algo está atascado, pero lo dejaré funcionando durante la noche y lo veré.

EDITAR

Dejé esto toda la noche y definitivamente colgófwrite, el archivo nunca pasó de 70 MB.

Respuestas a la pregunta(1)

Su respuesta a la pregunta