I don't believe that the disk reading can be so slowly Then you better start believing. Disks are incredibly slow compared to CPUs. Parallel I/O usually only helps when you're reading from multiple sources such as separate disks or network connections.It can solve latency problems well, but not bandwidth problems Trying reading in all your data in one go, serially, and then processing it in a parallelized loop.
I don't believe that the disk reading can be so slowly... Then you better start believing. Disks are incredibly slow compared to CPUs. Parallel I/O usually only helps when you're reading from multiple sources such as separate disks or network connections.It can solve latency problems well, but not bandwidth problems.
Trying reading in all your data in one go, serially, and then processing it in a parallelized loop.
Trying reading in all your data in one go" - Yes, I've already done it :) – Max Tkachenko Nov 14 at 12:01 @MaxTkachenko: if this answers your question, then please click the checkmark next to the answer to accept it. – larsmans Nov 14 at 13:00.
Disk readings cannot be parallelized*: whether you have 1 or 24 CPU cores won't change your disk I/O throughput. If one performCalculations(); call is faster than reading the content of one of your 40 MB files, then there's no need to parallelize on several CPU. Your program execution is limited by your disk bandwidth.
Have you measured this? *: They can, but require hardware. Just like parallelizing execution on multiple CPU require actual multiple CPU hardware, parallelizing disk I/O require more disk I/O hardware.
If you are using a conventional HDD, there won't be any visible speedups because there would be many concurrent file reads. A HDD mostly can't handle such current file reading. That is why you only have 0-5% CPU usages, which means most of parallel loops just wait for the file operations.(Note that disk readings can be parallelized so long as multiple file readings are on different physical disks or platters.) There are a couple of solutions: Try to use a SSD that can support much better random/concurrent accesses.
Although it's not easy to explain everything in this answer, try to use pipeline parallelism. OpenMP isn't good for pipelining, but TBB supports an easy-to-use pipeline template. Pipeline allows the file read step and the other calculation steps, so you could have a decent speedup.
Of course, there should be enough computation.
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.