[pulseaudio-discuss] "Hot" function optimization recommendations
Thomas Martitz
kugel at rockbox.org
Tue Apr 9 00:49:18 PDT 2013
Am 08.04.2013 21:02, schrieb Justin Chudgar:
> On Thursday, April 04, 2013 04:08:43 PM Justin Chudgar wrote:
>> I had experimentally thrown an optimization into my module's only
>> significantly warm functions. Since I am a novice, this was a
>> just-for-kicks experiment, but I would like to know whether to optimize at
>> all beyond the general "-O2", and what platforms are critical to consider
>> since I only use pulse on systems that are sufficient to run at "-O0"
>> without noticeable problems beyond unnecessary power consumption.
>>
>> From another thread:
>>> I'm not sure what to think about the __attribute__((optimize(3))) usage.
>>> Have you done some benchmarking that shows that the speedup is
>>> significant compared to the normal -O2? If yes, I guess we can keep
>>> them. <tanuk>
>> I don't know what to think of them either. I did a really simplist benchmark
>> with the algorithm on my core i3 laptop initially to determine if it was
>> useful to keep everything double or float. There was no benefit to reducing
>> presicion on this one system, but that attribute was dramatic. Did not try
>> O2, though, just 03 and O0. I thought about messing with vectorization, but
>> I only have x86-64 PCs and that seems most valuable for embedded devices
>> which I cannot test at the moment.
>>
>> 11: Determine optimization strategy for filter code.
>> http://github.com/justinzane/pulseaudio/issues/issue/11
>>
>>
>> _______________________________________________
>> pulseaudio-discuss mailing list
>> pulseaudio-discuss at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
> Just some very simplistic benchmark results of
> "__attribute__((optimize(#))) function()"
> in code similar to a biquad filter:
> optimize(0), 1867570825, 27.828974
> optimize(1), 1017762024, 15.165836
> optimize(2), 951896198, 14.184359
> optimize(3), 952574300, 14.194463
> This is for "memchunk" analogs of single channel 2^16 doubles being filtered
> and averaged over 2^10 runs with forced cpu affinity. The benchmark itself was
> compiled with -O0.
>
> With the supporting code compiled -O2, the numbers are:
> optimize(0), 1436955156, 21.412300
> optimize(1), 1020384309, 15.204911
> optimize(2), 952980992, 14.200523
> optimize(3), 952473365, 14.192959
> Not much difference there.
>
> With the benchmark compiled -O3, there is a DRASTIC change:
> optimize(0), 1442046736, 21.488171
> optimize(1), 1017924249, 15.168253
> optimize(2), 954029138, 14.216142
> optimize(3), 374432, 0.005579
> That was such a freakish improvement, that I ran it several times, but the
> results are quite reliable on my dev system.
>
This seems wrong. Does the code still execute *correctly*, does it even
run the benchmark at all at -O3? I suspect -O3 optimized large sections
of code away which may (or may not) produce incorrect code, perhaps
because because the benchmark code relies on undefined behavior or a bug
in gcc.
Best regards.
More information about the pulseaudio-discuss
mailing list