The central processing unit (CPU) or processor of a computer, smartphone or even a modern washing machine is responsible for the calculations needed to run applications or control other processes within the machine. Since the starting of the 21st century, CPU manufactures had troubles to increase the speed of one CPU but still wanted to increase the processing power of computers. As a solution to this problem, the processor vendors introduced dual “core” processors. This development continued until today with 100 cores per processor on the horizon.
Most of the “heavier” compute nodes of modern supercomputers are equipped with two or more processors. Since the processors have multiple cores it is not uncommon to have systems with 64 cores or more nowadays. One processor is installed in one socket.
To further increase the processing power (or complexity – depending on who you ask) Intel introduced “Hyper-threading”. For every core, hyper-threading simulates another core. This mostly helps in the day-to-day usage of a computer or in file servers but only a limited amount of scientific applications can profit from hyper-threading.
To see, how much processors and cores your computer has, run the “lscpu” command:
The most interesting lines are “Socket(s)” and “Core(s) per socket”. In most cases, you should not use more then “Socket(s)” * “Core(s) per socket” processes or threads to achieve the highest performance possible of a node. In the picture above, the command was run on a server with two Intel Xeon E5-2680V3 CPUs with Hyper-Threading enabled. While Linux sees 48 “cores”, in reality there are only 12 cores per socket. Thus, running 24 processes should yield the best performance for most applications on this machine.