1.3 - HEIC enc doesn't use 2nd PHYSICAL processor socket
Posted: Thu Sep 29, 2022 8:40 pm
Hi,
BUG v1.3 - HEIC enc doesn't use 2nd PHYSICAL processor socket
I have a dual CPU Xeon E5530 based Dell workstation (aka 2 sockets, 8 cores, 16 logical processors) on Win11 Pro.
All sockets, cores, and logical processors are visible, and all 16 logical processors can be used for video encoding by apps such as Handbrake.
Running a HEIF-ENC batch conversion of 5000+ JPG images, Task Manager indicates only the 1st 8 logical processors are being used (at ~100%) - the last 8 being completely idle).Each CPU socket is a 4 core / 8 logical processor unit.
The "Use multiple CPU cores" option recognises 16 as the maximum, but regardless, encoding only occurs on the 1st CPU socket.
LibHeif supports multiple CPU sockets via the POOLS parameter
the relevant pools values that affect the CPU affinity are:
8,8 = use both CPU sockets, creating 2 pools with 8 logical processors/hyperthreads per CPU per pool
-,+ = Don't use the first CPU, Create 1 pool for the second CPU, use all hyperthreads
+,- = The reverse of the previous setting
-,- = Use only the first CPU and turn off "WPP" and "lookahead slices"
BTW: in theory +,+ = "Thread pool 0 using 16 threads on numa nodes 0,1" - but still only invoked CPU 0 in reality using libheif v1.12.0
The more CPUs/cores you have, you can add more value combinations (e.g. 8,8,8,8 -,-,+,+ etc)
Using the POOLS parameter passed to Leibheif will enable multiple CPU socket support and resolve this bug.
BUG v1.3 - HEIC enc doesn't use 2nd PHYSICAL processor socket
I have a dual CPU Xeon E5530 based Dell workstation (aka 2 sockets, 8 cores, 16 logical processors) on Win11 Pro.
All sockets, cores, and logical processors are visible, and all 16 logical processors can be used for video encoding by apps such as Handbrake.
Running a HEIF-ENC batch conversion of 5000+ JPG images, Task Manager indicates only the 1st 8 logical processors are being used (at ~100%) - the last 8 being completely idle).Each CPU socket is a 4 core / 8 logical processor unit.
The "Use multiple CPU cores" option recognises 16 as the maximum, but regardless, encoding only occurs on the 1st CPU socket.
LibHeif supports multiple CPU sockets via the POOLS parameter
the relevant pools values that affect the CPU affinity are:
8,8 = use both CPU sockets, creating 2 pools with 8 logical processors/hyperthreads per CPU per pool
-,+ = Don't use the first CPU, Create 1 pool for the second CPU, use all hyperthreads
+,- = The reverse of the previous setting
-,- = Use only the first CPU and turn off "WPP" and "lookahead slices"
BTW: in theory +,+ = "Thread pool 0 using 16 threads on numa nodes 0,1" - but still only invoked CPU 0 in reality using libheif v1.12.0
The more CPUs/cores you have, you can add more value combinations (e.g. 8,8,8,8 -,-,+,+ etc)
Using the POOLS parameter passed to Leibheif will enable multiple CPU socket support and resolve this bug.