desempenho do fwrite () bem abaixo da capacidade do disco

Eu tenho uma matriz alocada dinamicamente de umstruct com 17 milhões de elementos. Para salvá-lo em disco, escrevo

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

Em uma etapa posterior, li com um equivalentefread declaração, ou seja, usandosizeof(Struct) e uma contagem deNumStructs. Espero que o arquivo resultante tenha cerca de 3,5 GB (isso é tudo x64).

Em vez disso, é possível passarsizeof(Struct) * NumStructs como o tamanho e1 como a contagem para acelerar isso? Estou coçando a cabeça por que a operação de gravação pode demorarminutos em um computador rápido com 32 GB de RAM (bastante cache de gravação). Eu executei benchmarks de fabricação caseira e o cache é agressivo o suficiente para que 400 MB / s para os primeiros 800 MB a 1 GB sejam típicos. O PerfMon mostra que está consumindo 100% de um núcleo durante a gravação.

Eu vi a perguntaaqui Então, o que estou perguntando é se existe algum loop interno no fwrite que pode ser "enganado" para ir mais rápido, dizendo-lhe para escrever 1 elemento do tamanho n * s em oposição a n elementos do tamanho s.

EDITAR

Eu executei isso duas vezes no modo de lançamento e, nas duas vezes, desisti de esperar. Em seguida, executei-o no modo de depuração, sabendo que normalmente ofwrite as operações demoram muito mais. O tamanho exato dos dados a serem gravados é de 4.368.892.928 bytes. Nos três casos, o PerfMon mostra duas explosões de atividade de gravação em disco com aproximadamente 30 segundos de intervalo, após o que a CPU atinge 100% de um núcleo. O arquivo está nesse ponto 73.924.608 bytes. Eu tenho pontos de interrupção em ambos os lados dofwrite então eu sei que é onde está sentado. Certamente parece que algo está preso, mas vou deixá-lo funcionando durante a noite e ver.

EDITAR

Deixou isso durante a noite e definitivamente ficoufwrite, o arquivo nunca passou dos 70 MB.

questionAnswers(1)

yourAnswerToTheQuestion