We are building a large, modular application that is intended to run across mult
ID: 655033 • Letter: W
Question
We are building a large, modular application that is intended to run across multiple processors. I need to develop a method to estimate how long it will take to run all of the functions.
I already have the function's execution time on a single processor. Now I need to find a way to account for the communication overhead. I also need to identify if there is a difference in execution time based upon particular functions being spread across a number of processors instead of remaining on the same processor.
How should I simulate the overall application in order to identify the communication overhead and to provide an estimate for what the total execution time would be?
Explanation / Answer
There is only one reliable way to find this out: parallelize your application and measure the performance with a serious test data set. See what happens if you assign n different processors to your application for different values of n. How it performs depends heavily on implementation details.
For example, last time a collegue of mine thought to speed up an application by parallelizing, he distributed the work almost equally between the available processors, using multi-threading. But even when using only 2 processors, the application became around 10% slower than the one processor variant. What we forgot was that both threads shared the same dynamic memory pool, and the mutual access to that pool seemed to be the cause of that problem.
For any application of reasonable size you are better of to expect such counter-intuitive problems.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.