Warning long technical post…
I have been doing some amateur experiments in trying to get HQP to run on the performance cores of my new i5 13500 processor. When I did cpu-info in the ubuntu operating system, my processor has 20 logical processors, which is made up of 12 logical processors from 6 performance cores that each supports 2 processes (logical processors 0-11 inclusive), and 8 efficiency cores with 1 logical processor (12-19 inclusive). cpu-info output is below.
Packages:
0: Intel 13th Gen Core i5-13500
Microarchitectures:
14x unknown
Cores:
0: 2 processors (0-1), Intel unknown
1: 2 processors (2-3), Intel unknown
2: 2 processors (4-5), Intel unknown
3: 2 processors (6-7), Intel unknown
4: 2 processors (8-9), Intel unknown
5: 2 processors (10-11), Intel unknown
6: 1 processor (12), Intel unknown
7: 1 processor (13), Intel unknown
8: 1 processor (14), Intel unknown
9: 1 processor (15), Intel unknown
10: 1 processor (16), Intel unknown
11: 1 processor (17), Intel unknown
12: 1 processor (18), Intel unknown
13: 1 processor (19), Intel unknown
Logical processors (System ID):
0 (0): APIC ID 0x00000000
1 (1): APIC ID 0x00000001
2 (2): APIC ID 0x00000008
3 (3): APIC ID 0x00000009
4 (4): APIC ID 0x00000010
5 (5): APIC ID 0x00000011
6 (6): APIC ID 0x00000018
7 (7): APIC ID 0x00000019
8 (8): APIC ID 0x00000020
9 (9): APIC ID 0x00000021
10 (10): APIC ID 0x00000028
11 (11): APIC ID 0x00000029
12 (12): APIC ID 0x00000030
13 (13): APIC ID 0x00000032
14 (14): APIC ID 0x00000034
15 (15): APIC ID 0x00000036
16 (16): APIC ID 0x00000038
17 (17): APIC ID 0x0000003a
18 (18): APIC ID 0x0000003c
19 (19): APIC ID 0x0000003e
With HQPE playing, when I do htop I see:
From what I see from cpu-info, the performance threads are 0-11 inclusive, but it seems that HQP is putting most of the resource onto threads 12-19 inclusive, so it seems the wrong way round to me - I would have thought we would want HQPE to put its processes on the performance cores.
I have been playing around with CPU affinity via the taskset command and the pids of the HQP processes to move them to the logical processors in the performance core range and this has had moderate success. For example, with the default setup, I get frequent drop outs when transcoding PCM to DSD 512 using Sinc-M and AMSDM7EC 512+fs, but always the highest loaded process is 13 or 14, which is in the efficiency range. If I move the highest load HQPE processes to the performance core range, I get far far fewer drop outs, which is the moderate success referred to above. The problem is that as soon as I pause the player the processes die and I have to change the affinity of the new processes all over again once I un-pause.
I guessed that HQPE has done all this process affinity under the hood already and I shouldn’t need to mess with affinity manually, so I looked in the HQPE log and it says:
2023/01/27 14:14:07 Processors physical=14 logical=20 performance=14 efficiency=0 groups=1 packages=1 nodes=1
So it is detecting something about the processor, but the result looks incorrect to me since it seems that HQP reckons my processor has all performance cores and no efficiency ones (which is not the case), so it thinks it can put its processes anywhere it likes, and I am guessing that it is putting them on the efficiency cores.
I am rather new to this affinity thing, so I could have got all this wrong but it would be interesting to explore a bit since there might be potential to get some more performance out of a CPU and access more HQP filters (like the Sinc-M test above). Any light shed on this would be appreciated.
BTW my current fave is DSD 512, poly-sinc-long-ip-2s, AMSDM7EC 512+fs, which has been enabled by the purchase of this new processor. V nice balance of presence, space and transients for the electronica I listen to a lot.