ARM架构double计算比float计算快现象

在评估rk3588处理器性能发现,现在处理器计算双精度浮点比单精度浮点要快上不少,其测试程序如下

int main(){

    auto a = HAL::time().ns();

    float f1 = 0.1;
    for (int i = 0; i < 1e7; i++)
    {
        if (i%2)
            f1+=1e-2;
        else
            f1-=1e-2;
    }
    
    auto b = HAL::time().ns();

    double d1 = 0.1;
    for (int i = 0; i < 1e7; i++)
    {
       if (i%2)
            d1+=1e-4;
        else
            d1-=1e-4;
    }

    auto c = HAL::time().ns();

    std::cout<< b-a <<std::endl;
    std::cout<< c-b <<std::endl;

    std::cout<< f1 <<std::endl;
    std::cout<< d1 <<std::endl;

    return 0;
}

rk3588测试结果

Apple M3测试结果

GPT的解释

现代 CPU 通常对 double 有很好的硬件支持,甚至可能对 double 进行 SIMD 优化。

• float 可能在一些架构中需要额外的内部转换(例如扩展为 double 计算后再存储为 float),导致额外的性能开销。

山和山不相遇,人与人要相逢