Статья по исследованию других операций: Сравнение производительности стандартных функций из rts2800_fpu32 и rts2800_fpu32_fast_supplement библиотек
Проверил производительность вычисления остатка на процессоре TMS320F28335:
int i = 1000;
int module = 990;
int res;
<...>
res = i % module;
<...>
В режиме View → Mixed Source/ASM
:
Примечание! FFC XAR7,22bitAddr Fast function call
Результаты профилирования в CCStudio:
Вывод: реализация модулярной арифметики будет занимать 42 процессорных такта. Про смысл значений в таблице можно почитать тут. Означают они то, что профилируемый участок кода выполнялся 7 раз, на это ушло в итоге 294 такта, на одно выполнение профилируемой области максимально тратится 42 такта. На выполнение той же области, но исключая время, затраченное на подпрограммы, ушло 7 тактов, т.к. asm команда FFC - это команда вызова функции (вызывает какую-то встроенную, ассемблерную функцию).
На подобную конструкцию в коде затрачивается 49 тактов процессора:
Теперь попробую свой вариант.
/* modulo.h */
#ifndef MODULO_H
#define MODULO_H
namespace dsp {
typedef int int32;int32 modulo(const int32 &num, const int32 &module);
}
#endif // MODULO_H
/* modulo.cpp */
#include "modulo.h"
namespace dsp {
int32 modulo(const int32 &num, const int32 &module) {
return ( num - ( module * (int)(num/module) ) );
}
} // dsp::
Результаты сравнения:
Вывод: реализованная функция в два раза медленней сгенерированной компилятором CCStudio функции. Однозначно, смело можно пользоваться средствами С++, компилятора и run-time support library с поддержкой FPU . Обе функции будут компилироваться без проблем на любой платформе, только вот скорость их выполнения будет зависеть от железа и оптимизации кода под это железо. Для процессоров С28х TI постаралось перегрузить оператор взятия остатка %, спрятав в библиотеку реализацию этого способа (скорее всего, при помощи ассемблера производилась оптимизация кода для С2000 семейства).
Примечание! При использовании Fast RTS Library (rts2800_fpu32_fast_supplement.lib) результаты производительности точно такие же.
Примечание! Статья появилась с целью осознать издержки при использовании остатка от деления в циклических буферах, а фактически, в КИХ фильтрах.
Комментариев нет:
Отправить комментарий