比较旧/新 CPU 上的C++开销时出现奇怪的结果
Odd Results when comparing C++ overhead on old/new CPU
我有这个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
Opteron 170(较旧)计算机的二级缓存是较新计算机的两倍,这将对非常占用大量内存的操作产生很大影响。 当被访问的两个项目彼此靠近时,缓存效果将最明显---就像使用矢量---时一样,这正是我们在这里看到的。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 实现无开销push_back的最佳方法是什么
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 算术运算的结果类似于:C浮点变量中的1/3
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 密码登录程序将永远循环并显示不正确的结果
- 如何让C++'tally up'结果并制定计划?
- 比较旧/新 CPU 上的C++开销时出现奇怪的结果