Potrzebujemy w Qt pojemnika do przechowywania dużych ilości próbek typu double. Mówimy tutaj o ilościach próbek przekraczających nawet 4 miliony.
Logika podpowiada, że najlepszy byłby QVector. Bo czym jest QVector? Tablicą z ficzerami. Powinien być pomijalnie wolniejszy i zajmować pomijalnie więcej. Test dla 3kk próbek na prealokowanej pamięci pokazał natomiast, że QVector zajął w pamięci programu 1/3 więcej, zapis do niego był ponad 5x wolniejszy i odczyt z niego był 2,5 krotnie wolniejszy. W porównaniu do zwykłego arraya oczywiście.
To jest w ogóle możliwe, żeby on wypadł tak bardzo źle? Wkradł się jakiś element losowy związany np. ze schedulerem OSu?
@kalectwo: A orientujesz się czy QCustomPlot przyjmie jako argument std::vector? Bo coś kurde pamiętam, że wymuszał na mnie QVector jak ostatni raz używałem. Oczywiście, że QCustomPlot się zesra przy 3kk próbek, ale pytanie czy w ogóle się da mu zapakować jako argument. Bo to, że próbki trzeba będzie wybierać to inna kwestia.
@kalectwo: No napisałem, że nie ma szans. Więc teraz pytanie brzmi jaki jest górny limit QCustomPlota. Bo prawdopodobnie będzie tak, że próbki trzymane masowo w zwykłym arrayu albo std::vector będę musiał jakoś wybierać i np. przerzucać do QVectora gdzie będzie ich o wiele mniej i czas nie będzie taki istotny w porównaniu do mielenia tych próbek (np. aby brał medianę z każdych kolejnych xx próbek czy cokolwiek).
@kalectwo: No oczywiście, że rozsadzę :D To jest wykluczone aby jakikolwiek plotter mi to ogarnął. Poza tym na ekranie nie masz takiej rozdzielczości aby to nawet zobaczyć.
Pytanie do programistów Qt i w sumie nie tylko.
Potrzebujemy w Qt pojemnika do przechowywania dużych ilości próbek typu double. Mówimy tutaj o ilościach próbek przekraczających nawet 4 miliony.
Logika podpowiada, że najlepszy byłby QVector. Bo czym jest QVector? Tablicą z ficzerami. Powinien być pomijalnie wolniejszy i zajmować pomijalnie więcej. Test dla 3kk próbek na prealokowanej pamięci pokazał natomiast, że QVector zajął w pamięci programu 1/3 więcej, zapis do niego był ponad 5x wolniejszy i odczyt z niego był 2,5 krotnie wolniejszy. W porównaniu do zwykłego arraya oczywiście.
To jest w ogóle możliwe, żeby on wypadł tak bardzo źle? Wkradł się jakiś element losowy związany np. ze schedulerem OSu?
ale i tak raczej nie wrzucałbyś milionów próbek w wykres?
i być może bardziej odpowiednią strukturą będzie
QVarLengthArray.Ciekawostka:
Containers tests BEGIN. Number of samples: 3000000 , iterations: 10
"Array"
Teraz mnie dziwi ile szybsze są QVectory i QArraye od ich pierwowzoru. Jak to jest możliwe w ogóle?
źródło: comment_2mUKb8iM1hqcCeS5ch3p20cj7vh82jc5.jpg
PobierzNo wychodzi tak ciągle.
źródło: comment_cozpYRoi1Bkhqir1qW0zYfHs4PCBeJO4.jpg
PobierzContainers tests BEGIN. Number of samples: 10000000 , iterations: 10
"Array" WorkingSetSize used: 157 MB
"Array" PageFile used: 154 MB
"Array" creationTime:
https://www.sendspace.com/file/5wfggd
Jak masz Qt 5.5.1 64 bit i Visual Studio 2013 z kompilatorem MSVC 12.0 amd64, to możesz odpalić z marszu cały projekt.
Containers tests BEGIN. Number of samples: 10000000 , iterations: 40
"Array" WorkingSetSize used: 157 MB
"Array" PageFile used: 154 MB
"Array" creationTime: