2013-06-13 9 views
3

Я реализую фильтр, и мне нужно оптимизировать как можно большую реализацию. Я понял, что есть команда, которая требуется много циклов, и я не понимаю, почему:gcc - высокое время выполнения, копируя двойное целое число

bool filters_apply(...) 
{ 
    short sSample; 
    double dSample; 
    ... 
    ... 
    sSample = (short) dSample; //needs a lot of cycles to execute 
    ... 
    ... 
} 

Я использую де НКУ Опция: -mcpu = ARM926EJ-s -mfloat-аби = softfp -mfpu = vfp Я попытался скомпилировать с FP ABI "hard", чтобы увидеть, есть ли разница, но компилятор не реализует его.

Может ли кто-нибудь объяснить мне, почему для этой инструкции требуется так много циклов?

Большое спасибо!

+0

Возможно, это связано с тем, что вы перемещаете значение из регистра процессора процессора в регистр регистров? – auselen

ответ

3

Просто взглянув на предоставленную вами информацию, это может быть из-за ларьков, возникающих при передаче данных из регистра с плавающей запятой в регистр плеч.

Этот Debian page on arm floating modes утверждает, что для такой операции может потребоваться около 20 циклов.

Попробуйте использовать переменные с плавающей запятой как можно больше, например, конвертировать sSample в поплавок. Ваш arm926ej-s (vfpv2) должен обеспечивать 32 регистра с двойной точностью (16 двойной точностью).

+0

Мне нужно передать позже sSample в короткий буфер, который реализует Frame для аудиоустройства. Это означает, что скоро мне придется переходить с двойного на короткий. –

+0

Но спасибо в любом случае @auselen! –

Смежные вопросы