std :: fstream buffering vs manual buffering (¿por qué 10 veces de ganancia con el almacenamiento manual)?
He probado dos configuraciones de escritura:
1) Fstream buffering:
// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream;
stream.rdbuf()->pubsetbuf(buffer, length);
stream.open("test.dat", std::ios::binary | std::ios::trunc)
// To write I use :
stream.write(reinterpret_cast<char*>(&x), sizeof(x));
2) Almacenamiento en búfer manual:
// Initialization
const unsigned int length = 8192;
char buffer[length];
std::ofstream stream("test.dat", std::ios::binary | std::ios::trunc);
// Then I put manually the data in the buffer
// To write I use :
stream.write(buffer, length);
Esperaba el mismo resultado ...
Pero mi almacenamiento en búfer manual mejora el rendimiento en un factor de 10 para escribir un archivo de 100 MB, y el almacenamiento en búfer de fstream no cambia nada en comparación con la situación normal (sin redefinir un búfer).
¿Alguien tiene una explicación de esta situación?
EDITAR: Aquí están las noticias: un punto de referencia que se acaba de realizar en una supercomputadora (arquitectura de Linux de 64 bits, sistema Intel Xeon de 8 núcleos, sistema de archivos Lustre y ... compiladores bien configurados con suerte) (y no explico la razón de la "resonancia" para un búfer manual de 1kB ...)
EDIT 2: Y la resonancia en 1024 B (si alguien tiene una idea al respecto, me interesa):