armando
armando

Reputation: 1480

available threads in Knights Landing

I am programming on a Knights Landing node which has 68 cores and 4 hyperthreads/core. I am working on a hybrid MPI/OpenMP application. My question is if the 4 hyperthreads are meant to be used as OpenMP threads or how could I use them? When I run my program using the following scheme:

export OMP_NUM_THREADS=1
mpirun -np 68 ./app

it runs much more faster than when I use the scheme:

export OMP_NUM_THREADS=4
mpirun -np 68 ./app

Maybe the problem is that the threads for a certain MPI are not close to each other. However, I don't know how to do it.

In summary, can I use the 4 hyperthreads/core as OpenMP threads?

Thanks.

Upvotes: 0

Views: 110

Answers (1)

Harald
Harald

Reputation: 3180

As you're probably using Intel MPI and OpenMP runtimes, allow me to forward you some links with valuable information for pinning MPI and OpenMP threads into processor cores/threads. Process/thread binding is a must nowadays to achieve high performance. Even though the OS tries to do its best, moving one process/thread from one core/thread to another location implies that the data needs to be transferred as well. For that matter, take a look at Running an MPI/OpenMP Program and Environment Variables for Process Pinning. For instance, if you run with 68 MPI ranks, then you probably start placing each MPI rank into a different core. You can double check if mpirun is honoring your requests by setting I_MPI_DEBUG environment variable (as described here).

Upvotes: 0

Related Questions