std :: buforowanie fstream a buforowanie ręczne (dlaczego zysk 10x przy buforowaniu ręcznym)?

Przetestowałem dwie konfiguracje pisania:

1) Buforowanie Fstream:

// 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) buforowanie ręczne:

// 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);

Spodziewałem się tego samego wyniku ...

Jednak moje ręczne buforowanie poprawia wydajność o współczynnik 10, aby zapisać plik o rozmiarze 100 MB, a buforowanie strumienia nie zmienia niczego w porównaniu z normalną sytuacją (bez ponownego definiowania bufora).

Czy ktoś ma wyjaśnienie tej sytuacji?

EDIT: Oto nowości: benchmark wykonany właśnie na superkomputerze (64-bitowa architektura Linuksa, trwa 8-rdzeniowy procesor Intel Xeon, system plików Luster i ... mam nadzieję, że dobrze skonfigurowane kompilatory) (i nie wyjaśniam przyczyny „rezonansu” dla ręcznego bufora 1 kB ...)

EDYCJA 2: I rezonans na 1024 B (jeśli ktoś ma pomysł na ten temat, jestem zainteresowany):

questionAnswers(3)

yourAnswerToTheQuestion