查找成本与计算成本

计算科学 效率
2021-12-11 02:24:00

我有兴趣设置计算以检查是否满足距离标准:即向量之间的距离xi和花药矢量图xj应该小于某个值rmax. 我的数据根据​​正交坐标网格进行分区。由于我的截止值小于最近邻坐标端点之间的距离,我想添加一个“八分圆”变量来检查设置是否正确:

if octant[j] in allowed_list continue

作为“短路”到

if dist(x[i], x[j]) < r_max

我的问题是:相对于浮点运算,布尔查找和比较的计算效率如何?这值得在现代建筑上做吗?

1个回答

我的经验法则是,如果您可以在每个双精度值少于 50 次失败中有效地计算一些数量(充分利用 FPU),那么重新计算比存储要好。几十年来一直保持稳定的趋势是浮点能力比内存性能提高得更快,并且由于物理限制和快速内存的能量需求而不太可能缓和。对于所有流行的计算平台(Intel/AMD、Blue Gene 和 GPU)来说,50 的值是正确的。

每个核心的近似成本估算

[2011/2012 Intel 和 AMD 机器指南]

  • 0.05ns:作为矢量化代码的一部分执行一次双精度浮点运算的时间,没有数据依赖性和交错乘法/加法
  • 0.2ns:在没有矢量化或数据依赖性的情况下执行一项非矢量化浮点运算的时间
  • 0.4ns:在没有矢量化或数据依赖性但没有交错乘法/加法的情况下进行一次非矢量化浮点运算的时间(1 个时钟周期)
  • 0.40.8ns:参考 L1 缓存的延迟
  • 2ns:浮点运算的延迟(矢量化与否)
  • 35ns:从内存中加载一个双精度值作为完全预取和充分利用流的一部分的时间
  • 35ns:间接函数调用(虚拟方法或函数指针,无寄存器压力)
  • 5ns:条件分支错误预测
  • 48ns:一个除法的时间(向量化与否,不能与其他指令同时运行)
  • 12ns:从本地 L2 满足的 L1 缓存缺失
  • 12ns:最佳情况比较和交换或获取和添加原子指令
  • 30-50ns:L1 写缓存未命中或原子指令,其中缓存行在本地可用,但当前内核必须获得独占访问
  • 100ns:从off-socket或内存中满足的缓存未命中或原子指令
  • 103ns (1 μs):花哨网络的硬件网络延迟
  • 104ns (10 μs):良好映射到网络时的低数据邻居交换
  • 106ns (1 ms):在并行文件系统上创建文件的时间(每个进程)
  • 2106ns (2 ms):MPI_Allreduce大型机器上的小数据(例如范数或点积)
  • 107ns (10 ms): 本地磁盘寻道
  • 5108ns (500 ms):重写所有可用内存的时间
  • 1.81012ns(0.5 小时):检查点整个机器状态到磁盘的时间

进一步阅读