The Linux OS uses a predictable method to map hyperthread enabled CPU threads to CPU IDs. Here’s a reminder if you need a quick way to map them:
# egrep 'processor|core id|physical id' /proc/cpuinfo | cut -d : -f 2 | paste - - - | awk '{print "CPU"$1"\tsocket "$2" core "$3}' CPU0 socket 0 core 0 CPU1 socket 0 core 1 CPU2 socket 0 core 2 CPU3 socket 0 core 3 CPU4 socket 1 core 0 CPU5 socket 1 core 1 CPU6 socket 1 core 2 CPU7 socket 1 core 3 CPU8 socket 0 core 0 CPU9 socket 0 core 1 CPU10 socket 0 core 2 CPU11 socket 0 core 3 CPU12 socket 1 core 0 CPU13 socket 1 core 1 CPU14 socket 1 core 2 CPU15 socket 1 core 3
This is a dual quad core system with hyperthreading enabled. 2 physical CPUs with 4 cores each and 2 threads per core so the OS sees 16 CPUs. CPU0 and CPU8 are 2 threads on the first core (core 0 ) on the first physical processor (socket 0)