Episode 8 of the “Hands-On Workshop (HOW) series on parallel programming and optimization with Intel® architectures” is Part 2 (of 2) in our discussion of optimization of multi-threaded applications.
Here we study thread affinity control and discuss the usage of environment variables to assign software threads to hardware cores.
Rules of thumb for affinity control are presented and demonstrated for bandwidth-bound and compute-bound applications, and also for applications that partition the system between multiple processes.
The last topic of optimization of multi-threaded application discussed here is loop scheduling and the tradeoff between scheduling overhead and load imbalance, which is demonstrated on an example application performing a solution of systems of linear algebraic equations with the iterative Jacobi method.
Performance results for all example applications are measured on an Intel® Xeon® processor and an Intel® Xeon Phi™ coprocessor and reported.
The hands-on part of the episode demonstrates the application of all the discussed techniques on a real computing system.