Parallel læsning hukommelse kortfil i C ++ Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Dette er mere et konceptmæssigt spørgsmål. Jeg har forsøgt at slå udførelsen af ​​fread og streame læsning fil (1Million + linjer) i C + +, som har flere datatyper. F.eks. Består filen af ​​int s, float s og string s i hver linje.


Efter forskningen besluttede jeg at gå til mindekortet, så jeg gjorde CreateFile, CreateFileMapping og MapViewOfFile. Indpakket hel kortlægningsproces omkring et objekt for at få adgang til markøren til den mappede fil, så jeg kan kalde dette objekt og få adgang til den kortlagte filpeger fra en anden funktion.


Jeg kunne læse filen med succes, men forestillingen er IKKE som forventet. Faktisk er der ingen gevinst end at bruge fread. Igen læser jeg stadig serielt, så jeg tror det er det vigtigste problem.


Mit spørgsmål er, hvordan man skal gå parallelt med læseprocessen? Jeg tænkte først på at bruge intel TBB eller openMP for at holde det enkelt, men jeg tror, ​​at dette kunne have problemer med ikke korrekt at justere med linjestykker osv.


Så alternativet er at bruge en trådpulje og en blokeringsmekanisme, og hver tråd har læst en anden blok af kortlagt hukommelse. Vil det være nogen hjælp til at forbedre ydeevnen? Eventuelle andre forslag, hvis nogen har løst et lignende problem? eller hvordan man skal gøre det i hukommelseskortede filer.


Jeg er også åben for andre parallelle fillæsningsalternativer til Windows i C ++.

Bedste reference