c ++ - Qt tråd problem med single core CPU på Windows XP

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg udvikler en krydsplatform fraktal explorer ved hjælp af Qt. Jeg oplever et præstationsproblem, når jeg kører på en enkelt CPU under Windows XP (program udarbejdet med MSVC Express 2010), jeg har ikke prøvet andre versioner af Windows. Med to kerner kører programmet fint. Det går også fint under Linux med enten en kerne eller to kerner (kompileret med GCC).


Ydelsesproblemet har noget at gøre med at kalde en slot i widgeten via signalet i beregningstråden. Widget indeholder en QImage, og jeg sender en peger til sine pixels til beregningstråden. Tråden beregner fraktalen og tegner pixlerne på billedet. I slutningen af ​​hver række sender tråden et signal til widgeten for at fortælle det om at opdatere displayet i hovedtråden. Som jeg forstår, er det en køforbindelse.


Med Windows og en enkelt CPU opdateringen er meget langsom, meget langsommere end beregningen. Det gør programmet ubrugeligt.


Den relevante kode ligner Mandelbrot eksemplet i Qt docs, bortset fra mit signal har ingen argumenter, fordi Qimage er placeret i widgeten ikke tråden, og jeg konverterer ikke QImage til en QPixmap.


Har nogen nogen ideer om, hvad problemet kunne være, og hvordan man skal løse problemet? Er det noget at gøre med planlægning, tidsskæring tildeling? Er der et compiler flag i MSVC, som jeg skal indstille? Eller skal jeg ændre mit program nogle hvordan?


Mange tak!

Bedste reference


Du siger opdateringen er langsommere end beregningen - hvor meget langsommere? Har du lavet en omfattende profilering for at se, hvor præcis flaskehalsen opstår? En overfladisk google finder denne profiler, som kan hjælpe dig. [1]


Husk, at for ældre CPU'er er trådkontekstskift meget dyrt. Dette kan være en del af dit problem, men igen ved jeg ikke specifikke.