Page 1 of 1

[已解决] ESP32-S2的循环运行速度比ESP32慢很多

Posted: Sat May 29, 2021 10:08 am
by darkhouse
我想测试一下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;
}

Re: ESP32-S2的循环运行速度比ESP32慢很多

Posted: Mon May 31, 2021 2:21 am
by ESP_Gargamel
导致此现象的原因为:ESP32 支持硬件浮点单元,而 S2 不支持,S2 进行浮点运算时使用的是软件,效率较硬件低,而并非是由于循环导致。你第二个循环改用整形,会发现循环耗费的时间其实是一样的。另外,你可以看一下反汇编,也可以发现两者的差异。比如:xtensa-esp32s2-elf-objdump -S build/blink.elf > build/blink.S

Re: ESP32-S2的循环运行速度比ESP32慢很多

Posted: Mon May 31, 2021 3:59 am
by darkhouse
多谢,S2的浮点计算要想法改成整形了. :x

Re: ESP32-S2的循环运行速度比ESP32慢很多

Posted: Mon May 31, 2021 1:17 pm
by kaisey
这,我以为ESP32-S2支持浮点呢,赶紧改代码,