Hi, Tom
>I would like to rework fluidsynths parallel audio rendering. The current
>implementation is not very efficient, the synchronization overhead seems to
>dominate. At least for me, most of the time only >one core is fully active.
I am surprised, you get only one core active most of the time.
Please are you using a very fast machine ? did you ask to fluidsynth to play
sufficient number of notes ?
Testing this on a 4 cores CPU (from 1 to 4) and on each successive test we see
one more core in use (using Windows XP).
Here the table of results that show that the current implementation works well:
The cpu load of one voice (voice(%)) is inversely proportional to the number of
core in use.
Using 1 core:
--------------
> prof_set_notes 800
> prof_start 1 1000
Generating 800 notes, generated voices:800
Number of measures(n_prof):1, duration of one mesure(dur):1000ms
Profiling time(mm:ss): Total=0:1 Remainder=0:1, press to cancel
------------------------------------------------------------------------------
Cpu loads(%) (sr: 44100 Hz, sp: 22.68 microsecond) and maximum voices
------------------------------------------------------------------------------
nVoices| total(%)|voices(%)| reverb(%)|chorus(%)| voice(%)|estimated maxVoices
-------|---------|---------|----------|---------|---------|-------------------
800| 100.308| 99.226| 1.083| 0.000| 0.123| 801
Using 2 cores:
--------------
> prof_set_notes 800
> prof_start 1 1000
Generating 800 notes, generated voices:800
Number of measures(n_prof):1, duration of one mesure(dur):1000ms
Profiling time(mm:ss): Total=0:1 Remainder=0:1, press to cancel
------------------------------------------------------------------------------
Cpu loads(%) (sr: 44100 Hz, sp: 22.68 microsecond) and maximum voices
------------------------------------------------------------------------------
nVoices| total(%)|voices(%)| reverb(%)|chorus(%)| voice(%)|estimated maxVoices
-------|---------|---------|----------|---------|---------|-------------------
800| 55.095| 53.999| 1.096| 0.000| 0.067| 1481
Using 3 cores:
--------------
> prof_set_notes 800
> prof_start 1 1000
Generating 800 notes, generated voices:800
Number of measures(n_prof):1, duration of one mesure(dur):1000ms
Profiling time(mm:ss): Total=0:1 Remainder=0:1, press to cancel
------------------------------------------------------------------------------
Cpu loads(%) (sr: 44100 Hz, sp: 22.68 microsecond) and maximum voices
------------------------------------------------------------------------------
nVoices| total(%)|voices(%)| reverb(%)|chorus(%)| voice(%)|estimated maxVoices
-------|---------|---------|----------|---------|---------|-------------------
800| 36.216| 35.079| 1.137| 0.000| 0.043| 2287
Using 4 cores:
--------------
> prof_set_notes 800
> prof_start 1 1000
Generating 800 notes, generated voices:800
Profiling time(mm:ss): Total=0:1 Remainder=0:1, press to cancel
------------------------------------------------------------------------------
Cpu loads(%) (sr: 44100 Hz, sp: 22.68 microsecond) and maximum voices
------------------------------------------------------------------------------
nVoices| total(%)|voices(%)| reverb(%)|chorus(%)| voice(%)|estimated maxVoices
-------|---------|---------|----------|---------|---------|-------------------
800| 28.083| 26.960| 1.122| 0.000| 0.033| 2996
Sorry for the ugly formatted table
jjc.
> Message du 11/04/18 21:26
> De : "Tom M."
> A : fluid-dev@nongnu.org
> Copie à :
> Objet : [fluid-dev] Parallelize rendering using openMP
>
> I would like to rework fluidsynths parallel audio rendering. The current
> implementation is not very efficient, the synchronization overhead seems to
> dominate. At least for me, most of the time only one core is fully active. I
> would like to get rid of that manual thread handling in rvoice_mixer and use
> openMP to attempt a simpler, yet more efficient implementation. I think it
> should be possible without any hard synchronization between threads. In case
> the openMP implementation performs better than the current one, this will be
> provided as a feature for the next major version. This means, in order to
> have fluidsynth being able to render audio in parallel, it needs to be
> compiled using a compiler that supports at least openMP 3.0, because I need
> the omp task directive. OMP 3.0 was released in 2008. Nowadays all major
> compilers (clang, gcc, Intel, IBM, Sun Studio) support this version... execpt
> Microsofts VC compiler ofc, which is still lacking behind with openMP 2.0
> (rel. 2002) and apparently they have no plans to support any newer version
> [1] [2]. Just to be clear: openMP would be an optional dependency. You can
> continue to compile fluidsynth without it, it would just not be capable of
> parallel rendering.
>
> Any thoughts on that? In case anybody is interested, you may follow the
> current implementation progress: [3]
>
> Reference issue with some nice pictures illustrating the basic implementation
> of rvoice_mixer: [4]
>
> Tom
>
> [1]
> https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/2276847-support-openmp-3-0-or-3-1
> [2]
> https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/13495731-add-support-for-openmp-4-5-to-vc
> [3] https://github.com/FluidSynth/fluidsynth/compare/openmp
> [4] https://github.com/FluidSynth/fluidsynth/issues/197
>
>
> _______________________________________________
> fluid-dev mailing list
> fluid-dev@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/fluid-dev
>
_______________________________________________
fluid-dev mailing list
fluid-dev@nongnu.org
https://lists.nongnu.org/mailman/listinfo/fluid-dev