Which HQP Filter are you using? [2015-2023]

Ok when things fail, Jussi has said we can’t rely on CPU loading number.

But my confusion is why it is failing in first place.

Can you share screenshots of all your HQP settings when it is failing

And can you try my other suggestions above

In these cases, modulator has constant load depending on output rate. Filter load varies based on filter and source rate.

For hires content you don’t need very steep filters. So you could set “1x” filter to poly-sinc-gauss-long and “Nx” filter to poly-sinc-gauss. And be happy.

Take a filter that can process 192k → DSD256.

Tried this earlier today but confirmed once more, Nx = poly-sinc-short-lp-2s is slightly better on CPU load for a 96 kHz file upsampled to DSD256 using the v2 EC modulator but it still produces skipping every 10 seconds or so. I think the v2 EC modulators are just outside the range of what an M1 Mac Mini can handle

1 Like

Well, the 4 cores doing modulation are running at 95% + on the M1 with ASDM7ECv2 and DSD256. So every increase in load, be it 48x256 instead of 44.1x256, or a slightly harder filter, or higher source rate, might push a thread past it’s threshold. There is so little margin at play here.

I know it’s not 48x256 inherently (i.e. network BW or DAC, etc) as I can play it fine under certain conditions.
Even with ext2 I get dropouts with 96 > 48x256 but not with 44.1 → 48x256 (non-integral).
I just think that things are so close to always hitting their head that unpredictable patterns might occur.

Noted but you can’t try 96k to DSD256x48k can you? Integer ratio, as being discussed above

What model DAC?

Yes that is exactly what I have done and this works with adaptive output rate off and up to 96 → 44.1x256 (but not 48x256).

I haven’t found a filter that works with 192k → DSD256 and ASDM7EC2 unfortunately.

I stream most of my content, so I think I am going to limit Qobuz to 96k for now. If I want to use 192k then I can’t use both ASDM7ECv2 and DSD256. That’s the choice!

I have a Gustard X16, I was trying to DSD256x48 on this particular file (with adaptive output rate checked)

1 Like

On the M1 this is the best I can do with content up to 96k …

This is because of filter load. Going from 48k rates to 44.1x256 is also lighter than going from 44.1k rates to 48x256.

1 Like

If poly-sinc-gauss is too much for 192k sources, you can select something like poly-sinc-short-2s for Nx instead. And you are still perfectly fine.

What about 5EC-v2 ?

With poly-sinc-short-lp-2s for Nx? 1x left at ext2

Yep, I know you did and really appreciate your input. Unfortunately, it’s not the right solution in this case. 96 → 48x256 has occasional dropouts and 96 → 44.1x256 does not. So if I set the max rate to 44.1x256 and then tick adaptive output rate then 96k will only get upsampled to DSD128.

Have you tried 5EC-v2?

Or only 7EC-v2

This is the strange part

@jussi_laako you have M1 and Spring3 - same behaviour ?

Not so strange. If ECv2 trips over the CPU at 48x256, then it just won’t work. It is a little bit more load than 44.1x256 (exactly the percentage of rate difference).

Then next is to pick up 1x and Nx filters that manage the wanted scenario to given output rate(s).

I have not been running v2 modulators much on my M1 much. So I don’t remember all the combinations.

1 Like

Yep, poly-sinc-short-2s works with 192k → 48x256 ASDM7ECv2. I have never listened to this filter before, as I liked the gauss filters a lot. I’ll give it a shot.

So, I am slightly confused by one thing. You said above that the 4 performance cores handle the modulation, and the 4 efficiency cores handle the filters. But even with harder filters, the 4 efficiency cores have low load. How are the filter choices affecting the load of the 4 performance cores??

That’s a rough rule. But for dirty details you’d need to ask Apple - and they likely won’t tell you… :smiley:

It winds down to how CPU is managed by the OS.

Filter choices also affect things like memory bandwidth and cache usage. This is really complex topic.

2 Likes

Ok I assumed 96k to DSD256x48 (integer ratio) would be less CPU load than 96k to DSD256x44.1 (non integer ratio)

If CPU load difference is exactly % rate difference though, then integer ratios is not a factor, so this explains his results

Makes sense now

Load is on different cores… First case has lower filter work load, but higher modulator work load. Second case has higher filter work load, but lower modulator work load.

Remember that you can offload filters to GPU (not on macOS though), but not modulators…

2 Likes

So at the end of the day, the M1 does barely do DSD256 and v2 EC modulators, but it requires light filters, particularly for Nx. No doubt the M1X would push us over the finish line here and allow most, if not all, filters to work.

2 Likes