- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I've got a machine with 2 processors 8 cores each which gives me a total of 16 physical cores.I want to launch an application on the second processor, cores 8-15. The application uses one mpi process and 8 omp threads.Documentation suggests using I_MPI_PIN_DOMAIN to controll threads distribution. The value omp:compact pinned all threads on the first processor. But I didn't manage to find the way to move them on the second.I have also tried launching the program without any pinning options for MPI but using numactl instead. I've tried numactl both on mpiexec.hydra and the application itself but the threads seem to ignore numactl.So is there a way to solve my problem? Also is there a way to specify what cores can be used by each process?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Have you tried using I_MPI_PIN_PROCESSOR_LIST? This should allow you to specify by core number. If your second processor is numbered with cores 8-15, then I_MPI_PIN_PROCESSOR_LIST=8-15 should pin the process to those cores. I would recommend using cpuinfo to check the core numbering, as it isn't always sequential.
Sincerely,
James Tullos
Technical Consulting Engineer
Intel® Cluster Tools
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The suggestion about setting separate PROCESSOR_LIST strings should work with -env option of mpiexec, or inside a script.
If you have a cluster resource manager which allows you to specify a job to get a subset of the cores on a node, that would seem a solution. As far as I know, after some debate, choice of resource manager has been left entirely up to the cluster provider and sysadmins.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Everything is controlled through the process pinning mechanism. And yes, you will need to use I_MPI_PIN_DOMAIN, as this allows a process to be pinned to multiple cores. Using the masklist option will let you specify which cores are available to each process. In your case, try I_MPI_PIN_DOMAIN=[FF00].
Sincerely,
James Tullos
Technical Consulting Engineer
Intel® Cluster Tools
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
That depends on if you're in Windows* or Linux* In Linux* you can use something like this:
[plain]mpirun -n 2 -host 16corehost -env I_MPI_DOMAIN [FF00,00FF] ./a.out : -n 2 -host 8corehost -env I_MPI_PIN_DOMAIN [F0,0F] ./a.out[/plain]
That should get the behavior you are seeking. If you are in Windows* (and this also works in Linux*) you will need to use a configuration file with a similar setup, using a different I_MPI_PIN_DOMAIN for each host type.
Sincerely,
James Tullos
Technical Consulting Engineer
Intel® Cluster Tools

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page