为了得到一个简短的报告,我们的类使用gcc-O0和icc-O0在集群上运行代码我们发现在没有任何优化的情况下,gcc的速度大约是icc的2.5倍这是为什么?gcc-O0实际上是做了一些小的优化,还是只是碰巧对这个系统工作得更好?
这段代码是用c编写的naive string search algorithm foundhere的实现。
谢谢你
最佳答案
有几点需要考虑:
默认情况下,每个编译器使用的指令集。例如,如果您的GCC构建默认生成i686代码,而ICC将自己限制为i586操作码,那么您可能会看到一个显著的性能差异。
集群中的实际CPU。如果您使用的是AMD处理器,而不是英特尔CPU,那么ICC处于劣势,因为它当然是专门针对英特尔处理器的。
你提到过使用集群这个速度差是否存在于单个处理器上?如果使用编译器提供的任何并行化工具,可能会有显著的差异。
简单地说,当优化被禁用时,编译器为每个代码构造使用预先生成的“模板”由于这些模板将在以后进行优化,因此它们的构造方式使优化过程能够生成更好的代码。使用-O0
时,它们可能会变慢或变快,这并不意味着什么——例如,更明确的初始代码可能更容易优化,但执行起来要慢得多。
也就是说,找出问题所在的唯一方法是分析代码的执行情况,如果有必要,查看代码中存在主要差异的部分的程序集。
关于c - 为什么gcc -o0比icc -o0快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5112439/