Develop a methodology for the design phase of the development cycle. Regions identified by the analysis phase are examined during the design phase to determine changes that must be made to accommodate a threading paradigm.
Examine the type of parallelism being implemented and make necessary changes to the design to accommodate a threading model. First, inspect the code to determine whether any library functions from Intel® Integrated Performance Primitives (IPP) or the Intel® Math Kernel Library (Intel MKL) can be used in the application. For example, if the application being developed has to solve a linear system of equations in the end, it may be beneficial to use calls from Intel MKL that are threaded with OpenMP* and immediately get the benefits of threading.
If the application is more complex, however, then additional work has to be done to determine the memory conflicts and design for data restructuring, if required. If library functions cannot be used, then the decomposition type has to be determined, and with the use of Intel threading tools, the memory conflicts in the identified region can be determined.
The general methodology to be observed in the design phase is shown in the figure below:
The majority of the effort in the design phase involves the restructuring of data and code to make it optimal for performance. In order to restructure data or code, all the global data accesses by the thread have to be identified first. Without any tools, it can be a very tedious effort, especially for medium and large applications, as the developer has to go through the call sequence of the thread and examine every memory access for a global memory access.
Four common issues that arise during the design phase are addressed in separate items:
- Memory Conflicts in Functional-Decomposition Problems
- Resolve Memory Conflicts in Data-Decomposition Problems
- Avoid Excessive Synchronization
- False Sharing