Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
doku:likwid_ir [2015/09/24 11:49] – [Background:] ir | doku:likwid_ir [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 3: | Line 3: | ||
==== Background: ==== | ==== Background: ==== | ||
- | It is proving increasingly difficult to exert control over the assignment of different threads to the available CPU cores in multi-threaded OpenMP applications. Particularly troublesome are hybrid MPI/OpenMP codes. Here, the developer usually has a comprehensive knowledge of the regions running in parallel, but relies on the OS for optimal assignment of different physical cores to the individual computing threads. A variety of methods do exist to explicitly state the link between CPU core and a particular thread, however, in practice many of these configurations turn out to be either non-functional, | + | It is proving increasingly difficult to exert control over the assignment of different threads to the available CPU cores in multi-threaded OpenMP applications. Particularly troublesome are hybrid MPI/OpenMP codes. Here, the developer usually has a comprehensive knowledge of the regions running in parallel, but relies on the OS for optimal assignment of different physical cores to the individual computing threads. A variety of methods do exist to explicitly state the link between CPU core and a particular thread. However, in practice many of these configurations turn out to be either non-functional, |
==== Example: ==== | ==== Example: ==== | ||
- | Suppose we have the following little test program, {{: | + | Suppose we have the following little test program, {{: |
Line 23: | Line 23: | ||
| | ||
- | * Note the repeated declaration of the initial core #3 which is due to the fact that we are still calling | + | * Note the repeated declaration of the initial core #3. This is required |
* Thread #0 must run on the same core the parent process (main task) will run at (e.g. core #3 in the above example). | * Thread #0 must run on the same core the parent process (main task) will run at (e.g. core #3 in the above example). | ||
- | * There is plenty of additional ways to define appropriate masks for thread domains (see below link), for example, to employ all available physical cores in an explicit order on both sockets, | + | * There are plenty of additional ways to define appropriate masks for thread domains (see link below), for example, |
- | * On the good note, likwid-pin works exactly the same way for INTEL-based compilers, for example | + | * The good news is, likwid-pin works exactly the same way for INTEL-based compilers. For example, the above submit script would have led to exactly the same type of results when compiled |
- | + | ||
==== MPI/OpenMP: ==== | ==== MPI/OpenMP: ==== | ||
- | '' | + | '' |
# | # |