libsndfile / libsamplerate

An audio Sample Rate Conversion library
http://libsndfile.github.io/libsamplerate/
BSD 2-Clause "Simplified" License
600 stars 167 forks source link

Multi threading #201

Open ss3git opened 11 months ago

ss3git commented 11 months ago

Experimental multi-thread implementation. (disabled by default with BUILD_MULTI_THREADING build option.)

Related issue: Parallelize resampling (with high delay) #176

compiled and tested on

FreeBSD clang version 14.0.5 (https://github.com/llvm/llvm-project.git llvmorg-14.0.5-0-gc12386ae247c) Target: x86_64-unknown-freebsd13.2 Thread model: posix

luzpaz commented 10 months ago

Is there an ETA on this ?

evpobr commented 10 months ago

@SoapGentoo , @arthurt , what do you think? I guess we can add it when it's ready.

ss3git commented 10 months ago

Hi. @evpobr

Sorry for that I did some commits after you had reviewed the code once. The change may boost the performance when an integer equivalant src_ratio is in use. I hope it works ok since I quickly merged it from my local branch (which supports S32 interface; if you are also interested: https://github.com/ss3git/libsamplerate/tree/S32Interface).

I have no more changes to this branch planned, so I'm leaving this up to you (or, maintainers) unless I find bugs.

One thing I'm aware of is that if you are actually releasing it, adding converter types like "SRC_SINC_BEST_QUALITY_MT" may be an idea to have both ST and MT versions switchable in one library.

luzpaz commented 7 months ago

Just wondering what's left here ?

ss3git commented 7 months ago

Hello @luzpaz.

This PR works well enough at least on my machine. Maybe waiting for more testers other than me?

evpobr commented 6 months ago

@ss3git , are the results bitwise identical to the reference implementation?

ss3git commented 6 months ago

Hi, @evpobr .

I've already forgotten a lot of the details though, the core calculation part is intended to be bitwise identical to the reference implementation (if you mean the single-thread version).

Since the single-thread implementation seems to have input/output processing variance depending on the number of channels processed (e.g. https://github.com/libsndfile/libsamplerate/issues/206), I am not hundred percent sure if the outputs "always" match.

evpobr commented 4 months ago

One thing I'm aware of is that if you are actually releasing it, adding converter types like "SRC_SINC_BEST_QUALITY_MT" may be an idea to have both ST and MT versions switchable in one library.

Good idea.

luzpaz commented 1 month ago

Sorry to bump, just wondering if there has been any more progress ?