OpenMS/OpenMS — pull request #702 by hroest (2014-02-16 17:48:33+00:00)
Title: Feature/parallel reader

Allows parallel decoding of the base64 strings in mzML and mzXML. The idea is
that encoding the base64 string takes most of the time and if this could be
done in parallel it would speed up the parsing. This is now implemened for the
mzML and mzXML parser by using a temporary vector where the base64 strings get
stored and then are decoded in parallel every n spectra (n=100 was found
favorable, see below).

benchmarks on my machine on a large (10GB) file for mzML (best of 3, Wall
time):
```
OpenMS 1.11: 9m20
OpenMS 1.10: 543.648 (9m3s)
trunk: 4m48s to 4m36s for loading
only XML parsing (xercesc only): 51 seconds wall
No actual appending (creating spectra and throw away): 1:07 to 1:24m
with patch, 1 thread n=100: 5:02 for loading
with patch, 6 threads n=100: 2:32 for loading
with patch, 4 threads n=100: 2:44 for loading
with patch, 2 threads n=100: 3:37 for loading
with patch, 6 threads n=200: 2:25 for loading
```

benchmarks on my machine on the same file converted to mzML mzXML file (best of
3, Wall time):
```
OpenMS 1.10: 300.969s (5m)
OpenMS 1.11: 5m3s
with patch, 6 threads: 1m:13s
with patch, 1 thread: 2m4s
```

There is a 4-8% performance penality of the patch when running single threaded
but a significant increase when running multithreaded.