【问题标题】:How to find the time value of operation to optimize new algorithm design?如何找到运算的时间价值来优化新的算法设计?
【发布时间】:2011-06-04 13:11:30
【问题描述】:

我的问题是针对 iPhone、iPod 和 iPad 的,因为我假设架构会产生很大的不同。我希望某处有一个规范(可能适用于各种芯片),或者有一种可靠的方法来测量每个特定指令的 T。我知道我可以使用任意数量的工具来测量使用的总处理器时间、使用的内存等。我想在较低级别进行量化。

所以,我能够计算出我完成了算法的主要部分多少次。例如,我在一个简单的实现中迭代 n * (n-1) 次,在另一个实现中迭代 n(最佳情况)和 n + n * (n-1)(最坏情况)之间。我还可以对指令总数(+ - = % * / 和逻辑语句)进行合理计数,并且可以比较这些计数,但这是假设每个操作的权重相同。另外,我不知道如何加权逻辑语句(if、else、for、while)与数学运算符的实际时间值......每次我“如果”的工作量与“+”一样多用它?我很想知道在哪里可以找到这些信息。

因此,为了清楚起见,我的目标是发现我对 CPU(或 GPU 或任何 U)的处理器时间要求,以便我可以围绕处理器时间设计最佳算法。有人可以告诉我从哪里开始使用 iOS 硬件吗?

编辑:This link to ClockServices.c 和开发人员门户中的 SIMD 内容对于对此感兴趣的人来说可能是一个好的开始。今晚再喝几杯咖啡,我可能会熬过去;)

【问题讨论】:

  • 我想要评估的大部分只是 C。我会很高兴。但是,如果知道遍历 NSArray 的成本会很好;但这听起来可能很复杂且多变。我只是不知道我能找到多少……我肯定会满足于基本的 C 操作;)
  • 是的,我想到了(百万次测试),但这是一个很好的评论。我考虑过像你说的那样运行测试,但我对结果有两个担心。一是我的测试在某种程度上是幼稚的,当编译器决定做一些不同的事情时,我会做很多工作来获取那些不支持的信息。其次,我只有几个设备,有的有不同的芯片。所以我最大的希望是,也许有人有图表,可以准确估计特定处理器的 C 操作的时间价值。
  • 从 NSArray 评论中笑了出来。我希望我的 NSArray 不会在我身上出现蓝屏或其他情况;)

标签: iphone algorithm ipad optimization instruction-set


【解决方案1】:

在现代平台上,处理器时间并不是唯一的限制因素。通常,内存访问是。

不过,处理器时间:
不过,您估计处理器负载的基本方法是可以的,而且是明智的:根据您对典型平台的了解,粗略估计成本。

In this article,表 1 显示了 .NET 中典型原始操作的时间。虽然您的平台可能会有所不同,但相对时间通常非常相似。也许您可以为 iStuff 找到 - 甚至制作 - 一个。

(除了处理器/指令集手册外,我还没有遇到过对其他平台如此详尽的手册,但它们处理的是汇编指令)

内存局部性:
缓存未命中可能会花费您数百个周期,磁盘访问会花费您上千倍的成本。因此,控制内存访问模式(即减少工作集、重组和以缓存友好的方式访问数据)是评估算法的重要部分。

【讨论】:

  • 谢谢。这是非常有用的信息。另外,我很高兴知道我的基本方法并不算太远。
【解决方案2】:

xCode 具有测量每个功能/操作性能的工具,您可以简单地使用它们。

【讨论】:

  • 我确实使用它们。但是我需要做的测试数量来通知一个新的算法设计可能非常大。指数,二次,对数大。这就是为什么我想(至少)找到关于各种操作的计算复杂性的指南。换句话说,我很高兴阅读手册,但我不想为整个语言+编译器+架构集编写手册。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多