[已解决] ESP32-S2的循环运行速度比ESP32慢很多
Posted: Sat May 29, 2021 10:08 am
我想测试一下ESP32-S2的sqrtf的运算速度, 结果发现运行速度特别慢,sqrtf()需要3微秒以上,占用了接近1000个时钟周期. 然后又写了一个循环的测试.发现也很慢. 1000次循环(没有sqrtf())竟然用了360us, 大概一次循环100个时钟周期.
同样的代码,在ESP32上运行,速度提高5倍,还算正常, 1000次循环占用75us,每个循环20个时钟周期.
ESP32-S2为啥会慢? 会是模组的晶振有问题么?
int Time_SQRTF(int nCount)
{
int64_t start = esp_timer_get_time();
float v = 0.0f;
for (int i = 1; i<=nCount; ++i)
{
v += sqrtf(i);
}
int64_t t = esp_timer_get_time() - start + v/10000.0f;
start = esp_timer_get_time();
for (int i = 1; i<=nCount; ++i)
{
v += i;
}
t = esp_timer_get_time() - start + v/10000.0f;
return t;
}
同样的代码,在ESP32上运行,速度提高5倍,还算正常, 1000次循环占用75us,每个循环20个时钟周期.
ESP32-S2为啥会慢? 会是模组的晶振有问题么?
int Time_SQRTF(int nCount)
{
int64_t start = esp_timer_get_time();
float v = 0.0f;
for (int i = 1; i<=nCount; ++i)
{
v += sqrtf(i);
}
int64_t t = esp_timer_get_time() - start + v/10000.0f;
start = esp_timer_get_time();
for (int i = 1; i<=nCount; ++i)
{
v += i;
}
t = esp_timer_get_time() - start + v/10000.0f;
return t;
}