程序运行速度限制 --《深入理解并行编程》

CPU流水线

带有长流水线的CPU想要达到最佳性能,需要程序给出高度可预测的控制流。此时CPU可以正确预测在大多数情况下,代码循环结束后的分支走向。在这种程序中,流水线可以一直保持在满状态,CPU高速运行。否则如果遭遇pipeline flush,会影响CPU性能。

内存引用

虽然现代微型计算机上的大型缓存极大减少了内存访问延迟,但是只有高度可预测的数据访问模式才能让缓存发挥最大的作用。

原子操作

原子操作的概念在某种意义上与CPU流水线上的一次执行一条的汇编操作冲突了。会存在一些指令是流水线必须延迟甚至需要flush,以便一条原子操作完成。
不幸的是,原子操作通常只用于数据的单个元素。由于许多并行算法都需要在更新多个数据元素时,保证正确的执行顺序,大多数CPU都提供了内存屏障。

内存屏障

为了防止有害的乱序执行,锁操作原语必须包含或显式或隐式的内存屏障。由于内存屏障的作用是防止CPU为了提升性能而进行的乱序执行,所以内存屏障几乎一定会降低CPU的性能。

Cache Miss

对于多线程程序来说,还有个额外的障碍影响CPU性能提示—“Cache Miss”。现代CPU使用大容量的高速缓存来降低由于较低的内存访问速度带来的性能惩罚。但是,CPU高速高速缓存事实上对于多CPU间频繁访问的变量起反效果。因为当某个CPU想更改变量值,极有可能该变量的值刚被其他CPU修改过。在这种情况下,变量存在于其他CPU而不是当前CPU的缓存中,这将导致代价高昂的Cache Miss.

I/O操作

I/O操作涉及网络、大容量存储器,或者(更糟的)人类本身,I/O操作对性能的影响远远大于之前提到的各种障碍.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值