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

darkhouse
Posts: 4
Joined: Sat May 29, 2021 9:17 am

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

Postby darkhouse » 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;
}

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

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

Postby ESP_Gargamel » Mon May 31, 2021 2:21 am

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

darkhouse
Posts: 4
Joined: Sat May 29, 2021 9:17 am

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

Postby darkhouse » Mon May 31, 2021 3:59 am

多谢,S2的浮点计算要想法改成整形了. :x

kaisey
Posts: 81
Joined: Tue Mar 24, 2020 5:54 am

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

Postby kaisey » Mon May 31, 2021 1:17 pm

这,我以为ESP32-S2支持浮点呢,赶紧改代码,

Who is online

Users browsing this forum: No registered users and 68 guests