并行程序设计的常见问题

与线程相关的开销

1)  线程的创建于销毁产生的开销

2)  保存和恢复寄存器的开销

3)  保存和回复线程cache的开销

4)  废除虚存的开销

 

与存储相关的性能问题

静态的

1)  用恰好够用的比特精度存储需要的数据

2)  对于struct数据,根据类型大小的降序,对内部元素进行声明

 

动态的cache

1)  减少CPU和存储器之间的数据移动

a)        将大数据分段,对每一小段集中处理,这样可以避免由于数据量过大造成cache的频繁更新

2)  减少CPU之间的数据移动

a)        为各个线程设置私有的数据,最后将私有数据合并获得完整的数据

 

存储一致性问题

1)  硬件的松弛一致性:发生在CPUA上的读写操作的顺序,在CPU B上看来可能会不同,但CPU A总能保证自身顺序的一致性。

2)  编译器指令重定序:必要时用volatile提示编译器

 

伪共享问题

Cache行是硬件线程交换信息的最小单位

 

高性能的数据组织

1)  线程私有数据 会被保留在cache中

2)  线程共享只读 每个线程保留一个副本

3)  不同类型的数据在特定的cache行中进行存放,避免伪共享问题(如可以将共享只读的数据和可写的数据分离开)


整理自《多核程序设计技术——通过软件多线程提升性能》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值