Я довольно часто вызываю функцию в обратном звуковом вызове ядра, чтобы применить эквалайзер к моим аудиосэмплам. У меня очень странные результаты работы этого метода, измеренные во временных профилях инструментов.
Я сделал 3 теста. Первый вызывает функцию и просто возвращает нулевое значение.
Instruments сообщает об этом как 1% .
inline AudioUnitSampleType LowPassProcess (struct EQEffect *obj , AudioUnitSampleType input)
{
return 0;
}
Второй тест фактически выполняет вычисления эквалайзера в функции путем доступа к структуре, содержащей параметры эквалайзера.
При работе с этим инструментом сообщается как * 40 % *!
struct globaldata
{
float cutoff;
float fs;
float f;
float q;
float scale;
AudioUnitSampleType low;
AudioUnitSampleType high;
AudioUnitSampleType band;
AudioUnitSampleType notch;
};
struct globaldata global;
inline AudioUnitSampleType LowPassProcess (struct EQEffect *obj , AudioUnitSampleType input)
{
global.low= global.low + (global.f * global.band);
global.high= global.scale * input -global.low - global.q * global.band;
global.band = global.f * global.high +global.band;
global.notch = global.high + global.low;
return global.low;
};
Наконец, я попытался снова вызвать функцию, но в этом случае не обращался к структуре EQ, но все еще выполнял то же количество вычислений.
При использовании этого инструмента сообщает как 7%
struct globaldata
{
float cutoff;
float fs;
float f;
float q;
float scale;
AudioUnitSampleType low;
AudioUnitSampleType high;
AudioUnitSampleType band;
AudioUnitSampleType notch;
};
struct globaldata global;
inline AudioUnitSampleType LowPassProcess (struct EQEffect *obj , AudioUnitSampleType input)
{
float x =10+(50*8);
float y = ((10 *5) -50)- (6*40);
float z=10 *(6+9);
float j=60+0;
return 0;
};
Итак, мой вопрос: почему моя функция тратится в 5 раз дольше на выполнение, когда я выполняю вычисления на элементах структуры, и занимает гораздо меньше времени, когда я просто выполняю вычисления на переменных?