Występują problemy z pisaniem do pliku - a mianowicie, że nie jestem w stanie napisać wystarczająco szybko.Poprawianie/optymalizowanie prędkości zapisu pliku w C++
Moim celem jest uchwycenie strumienia danych przesyłanych przez gigabitowy Ethernet i po prostu zapisanie go w pliku.
Dane surowe przychodzą z prędkością 10MS/s, a następnie są zapisywane w buforze, a następnie zapisywane do pliku.
Poniżej znajduje się odpowiedni fragment kodu:
std::string path = "Stream/raw.dat";
ofstream outFile(path, ios::out | ios::app| ios::binary);
if(outFile.is_open())
cout << "Yes" << endl;
while(1)
{
rxSamples = rxStream->recv(&rxBuffer[0], rxBuffer.size(), metaData);
switch(metaData.error_code)
{
//Irrelevant error checking...
//Write data to a file
std::copy(begin(rxBuffer), end(rxBuffer), std::ostream_iterator<complex<float>>(outFile));
}
}
Problem mam napotykając jest to, że trwa zbyt długo pisać próbek do pliku. Po mniej więcej sekundzie urządzenie wysyłające raporty z próbkami przepełnia się. Po krótkim profilowaniu kodu, prawie cały czas wykonania jest poświęcony na std::copy(...)
(w 99,96% czasu). Jeśli usuniemy tę linię, mogę uruchamiać program przez wiele godzin bez napotkania jakiegokolwiek przepełnienia.
Powiedziałem, że jestem raczej zaskoczony, w jaki sposób mogę poprawić szybkość zapisu. Przejrzałem kilka postów na tej stronie i wydaje mi się, że najczęstszą sugestią (jeśli chodzi o szybkość) jest implementacja zapisu pliku, tak jak to już zrobiłem - za pomocą std::copy
.
Jeśli to pomocne, uruchamiam ten program na Ubuntu x86_64. Wszelkie sugestie będą mile widziane.
Chodzi o USRP, czyż nie jest to –
Interesujący ... czysty kierunek wskazujący na wskaźnik C może ci się lepiej. Jeśli znasz strukturę systemu operacyjnego, możesz szybciej uzyskać dostęp do pamięci. –
Tak ... Używam USRP N210. – Mlagma