【问题标题】:Odd Results when comparing C++ overhead on old/new CPU比较旧/新 CPU 上的 C++ 开销时的奇怪结果
【发布时间】:2014-11-17 18:59:52
【问题描述】:

我有这个 C++ 代码:

在容器中生成 10000 个已初始化的学生。 按字母顺序对学生进行排序。 将学生分为通过和失败。 将结果输出到控制台。

为了提高效率,使用不同的容器类型(静态和非静态)对执行进行计时,以容纳和迭代 10000 名学生。

没有从文件中读取任何内容,所有学生数据都包含在代码中。

以下是使用的两个 CPU 的基准比较,从结果应该可以看出一个是新的,一个是旧的:

http://cpuboss.com/cpus/Intel-Core-i7-3770K-vs-AMD-Opteron-170#performance

以下是比较每个 CPU 上的执行时间的结果......知道为什么新 CPU 会被旧 CPU 抛在后面吗? :

-------------------------------------------------------------------------
AMD Opteron 170 - STATIC VECTOR ( 10,000 students =  27.499 secs )
-------------------------------------------------------------------------
gen_students = 1250ms   1.25s
sort_students = 9953ms   9.953s
alpha_pass = 7937ms   7.937s
pass_fail = 8359ms   8.359s

-------------------------------------------------------------------------
i7-3770K@3.5GHz - STATIC VECTOR ( 10,000 students =  46.675 secs )
-------------------------------------------------------------------------
gen_students = 2184ms   2.184s
sort_students = 32713ms   32.713s
alpha_pass = 5164ms   5.164s
pass_fail = 6614ms   6.614s



-------------------------------------------------------------------------
AMD Opteron 170 - STATIC LIST ( 10,000 students =  32.515 secs )
-------------------------------------------------------------------------
gen_students = 890ms   0.89s
sort_students = 15875ms   15.875s
alpha_pass = 7765ms   7.765s
pass_fail = 7985ms   7.985s

-------------------------------------------------------------------------
i7-3770K@3.5GHz - STATIC LIST ( 10,000 students =  27.221 secs )
-------------------------------------------------------------------------
gen_students = 374ms   0.374s
sort_students = 17160ms   17.16s
alpha_pass = 4633ms   4.633s
pass_fail = 5054ms   5.054s



-------------------------------------------------------------------------
AMD Opteron 170 - VECTOR ( 10,000 students =  552.094 secs )
-------------------------------------------------------------------------
gen_students = 1235ms   1.235s
sort_students = 534765ms   534.765s
alpha_pass = 7750ms   7.75s
pass_fail = 8344ms   8.344s

-------------------------------------------------------------------------
i7-3770K@3.5GHz - VECTOR ( 10,000 students =  896.07 secs )
-------------------------------------------------------------------------
gen_students = 2200ms   2.2s
sort_students = 882435ms   882.435s
alpha_pass = 4696ms   4.696s
pass_fail = 6739ms   6.739s



-----------------------------------------------------------
AMD Opteron 170 - LIST ( 10,000 students =  787.984 secs )
-----------------------------------------------------------
gen_students = 906ms   0.906s
sort_students = 771422ms   771.422s
alpha_pass = 7844ms   7.844s
pass_fail = 7812ms   7.812s

-------------------------------------------------------------------------
i7-3770K@3.5GHz - LIST ( 10,000 students =  398.645 secs )
-------------------------------------------------------------------------
gen_students = 358ms   0.358s
sort_students = 388412ms   388.412s
alpha_pass = 4758ms   4.758s
pass_fail = 5117ms   5.117s

【问题讨论】:

  • 你在编译的时候优化了吗?
  • 另外,它们是用相同的工具包+版本编译的吗?
  • 向我们展示基准代码 :-)
  • 这个问题似乎离题了,因为它包含的信息不足以重现问题。
  • @tuk 我们不是来玩猜谜游戏的。这个问题是题外话,因为它没有提供一个明确的问题;您尝试解决的问题,最重要的是受影响的代码。

标签: c++ performance containers cpu


【解决方案1】:

Opteron 170(较旧)计算机的二级缓存是较新计算机的两倍,这将对内存非常密集的操作产生很大影响。当被访问的两个项目彼此靠近时,缓存效果最为明显——就像它们使用向量一样——这正是我们在这里看到的。

【讨论】:

  • 这是否也可以解释较新的 cpu 在执行期间显示非常低的使用率(
  • 我觉得这很难相信。 Core i7 具有更大的 L3 缓存 - 考虑到这样的代差异,它可能比 Opteron 的 L2 更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多