An interesting follow-on remark is that these design principles are reusable, standardized and can be applied to any application domain. They grew from exposure to CAD, process control, holography and computational finance.
My forthcoming 2nd edition on C++ instrument pricing formalizes these domain architectures in computational finance.
Very much so. Mine focused solely on improving the nested loop a.k.a the monte carlo simulation. Based on the feedback from @APalley the better approach would've been similar to what you did at the client level. Also I solely relied on subtype polymorphism to implement SDE, RNG and FDM instances but as I stated in my systems design document my improvement to this would be something quite similar to your approach. I did use boost signals for the pre and post process functions which meant I could price multiple options with one call to the start function. But overall I would say it's something I'll continue to revisit to see where I can make improvements.
The book uses OpenMP 2.0 and MPI code snippets which is of course good. Maybe a 2nd edition would be nice.
Nowadays parallel design patterns are ready-to-run in libraries such as C++ Concurrency, PPL, TBB, TPL, actor systems (and many other languages of course).
An important modelling construct is the usefulness of creating a task dependency graph up front.