JuPin - Pinning Visualisation Tool

Choose a supercomputer partition on which you want to simulate the pinning.



Choose between the Node-Mode, the Task-Mode and the Hex2Bin-Mode.
  • Node-Mode: you can visualize the pinning amongst multiple nodes.
  • Task-Mode: the pinning for a single node is visualized by showing each task individually.
  • Hex2Bin-Mode: you can enter a SLURM-Process-Pinning-Mask in hexadecimal to visualize it.



Enter a SLURM-Process-Pinning-Mask in hexadecimal to visualize.



Select the numbers of nodes on which you want to simulate the pinning. Only available in Node-Mode.



Select the numbers of tasks per job.



Select the numbers of requested CPUs per task.



Choose an option to bind the CPU threads per task.
  • Rank: Each task is pinned to as many threads as it requests, just filling cores consecutively. Spread the threads and tasks to as many cores as possible. This type is not influenced by the second and third part of the distribution option.
  • Threads: Each task is pinned to as many threads as it requests. Which threads each process gets is controlled by the distribution option.
  • Rank_Ldom: Each task is pinned to as many threads as it requests, just filling the nodes rank by rank cycling NUMA-sockets and cores. This type is not influenced by the second and third level of the distribution option. The threads of a task are always packed to as few cores as possible. This is the same as cpu-bind=threads distribution=block:cyclic:block.
  • Cores: In a first step the requested CPU threads of a task are assigned in exactly the same way as with cpu-bind=threads. But the final affinity mask for the task is the whole core where any thread is located that it is assigned to. This means if a task is assigned to any thread that is part of a core, it will be bound to the whole core. (The "whole" here means to each thread of the core that is allocated to the job)



Select the number of threads per core.



Choose a distribution-option. The first part controls the distribution of the task over the nodes:
  • Block: Distribute tasks to a node such that consecutive tasks share a node.
  • Cyclic: Distribute tasks to a node such that consecutive tasks are distributed over consecutive nodes (in a round-robin fashion).
The second part controls the distribution of tasks over NUMA-sockets inside one node:
  • Block: Each NUMA-socket is first filled with tasks before the next NUMA-socket will be used.
  • Cyclic: Each task will be assigned to the next NUMA-socket(s) in a round-robin fashion.
  • Fcyclic: Each thread inside a task will be assigned to the next NUMA-socket in a round-robin fashion, spreading the task itself as much as possible over all NUMA-sockets.
Fcyclic implies cyclic.
The third part controls the distribution of tasks over cores inside one node:
  • Block: Each core is first filled with tasks before the next core will be used.
  • Cyclic: Each task will be assigned to the next core(s) in a round-robin fashion. The threads of a task will fill the cores.
  • Fcyclic: Each thread inside a task will be assigned to the next core in a round-robin fashion, spreading the task itself as much as possible over all cores.
Fcyclic implies cyclic.
Node
Socket
Core



Zoom in or out