查找与计算成本


12

我有兴趣进行计算以检查是否满足距离标准:即向量和花药向量x j之间的距离应小于某个值r m a x。我的数据根据​​坐标的正交网格进行分区。由于我的临界值小于最近邻坐标的端点之间的距离,因此我想添加一个“ octant”变量来检查设置是否正确:xixjrmax

if octant[j] in allowed_list continue

作为“短路”

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

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


3
您愿意分支代码并对其进行测试吗?我觉得其中大多数的标准答案是“(一种方式)还是(某种方式)进行编码?” 问题类型为“尝试并进行基准测试”。
Geoff Oxberry 2012年

1
只是我的2美分。正如Geoff所写的那样,当我对Stackoverflow提出类似的问题时,我总是得到这样的建议:C ++代码:首先编写所有代码,组织代码,以便保持模块化和可重用性,然后才开始重构。有80-20条规则:软件将80%的时间花费在20%的代码上。等到结构完成后,再进行更改,测试,更改,测试..
tmaric 2012年

@GeoffOxberry:我的问题不是那么具体:我只是想知道与进行浮点运算相比,进行布尔检查是否具有硬件或编译器优势。
aeismail 2012年

3
但是您的问题太笼统了。没有看到一些具体的代码,谁也说不清。有一条经验法则说,即使没有优秀的程序员,也无法通过分析来分辨代码瓶颈所在。我花了过去的25年编程时间,我知道这对我来说是对的。
Wolfgang Bangerth 2012年

Answers:


15

我的经验法则是,如果您可以在每双精度值少于50触发器的情况下有效地计算一些数量(FPU的良好利用率),那么重新计算比存储要好。数十年来一直稳定的趋势是浮点功能的提高速度快于存储器性能,并且由于物理限制和快速存储器的能量需求,这种趋势不太可能持久。对于所有流行的计算平台(Intel / AMD,Blue Gene和GPU),值50的大小正确。

每个核心的大概成本估算

[2011/2012年基于Intel和AMD的计算机的准则]

  • 0.05
  • 0.2
  • 0.4
  • 0.40.8
  • 2
  • 35
  • 35
  • 5
  • 48
  • 12
  • 12
  • 3050
  • 100
  • 1031 μ
  • 10410 μ
  • 106
  • 2106MPI_Allreduce
  • 107
  • 5108
  • 1.81012

进一步阅读


我发现此信息非常有用。顺便问一下,您是从哪里获得这些数据的?我正在寻找引用。
Eldila
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.