I think you'd be surprised how many real world day to day task can be and are parallelized: [...] searching
I thought searching a large collection of documents was disk-bound, and traversing an index was an inherently serial process. Or what parallel data structure for searching did I miss?
Searching a large collection of non-indexed documents from disk is likely disk-bound, yes - except you somehow formulated a very complex search or stream from multiple disks at a time - but maybe you are searching data already in RAM. Traversing an index isn't necessarily a serial process, depending on your data structure. There are parallel implementations for binary and red-black trees, as far as I know. Or one could simply use a forest of as many trees as one has searching threads. (will get worse performance when using less threads than trees). If you only have a sorted list or array you could use a parallel search. If your data is not indexed you are likely to be faster with multiple threads (if there is no other bottle neck like, for example, disk throughput). Maybe you are searching multiple things at the same time (like a string in authors and contents of e-mails) or you are searching with multiple parameters (filetype [type], last access after [date], string in content [foo]) where not all parameters are indexed.
I never stated that my problems are 100% parallelizable. ;) Parsing: Why not? Reflow: And if I have multiple boxes at the same layer? At least as long the dimension are fixed or bounded some parallel processing could be possible, if it would benefit I can't tell.
True, each translation unit can be combined in parallel if you choose not to enable whole-program optimization. But I don't see how whole-program optimization can be done in parallel.
Many steps can be parallelized, not all, as you pointed out. And even than I am not sure if there wouldn't be a solution for whole-program / link-time optimization, but I'm no professional concerning compiler building. And even then: I happen to compile multiple binary files with one run of make most of the time, so using multiple threads is for free (there is a reason make has the -j option).