并行程序设计的常见问题
来源:互联网 发布:新手护肤步骤知乎 编辑:程序博客网 时间:2024/05/01 19:53
与线程相关的开销
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行中进行存放,避免伪共享问题(如可以将共享只读的数据和可写的数据分离开)
整理自《多核程序设计技术——通过软件多线程提升性能》
- 并行程序设计的常见问题
- 常见的并行程序设计问题的解决方法
- MPI并行程序设计的环境配置
- oracle并行查询常见问题
- oracle 并行查询常见问题
- OpenMP并行程序设计
- C++ OpenMP并行程序设计
- OpenMP并行程序设计
- 并行程序设计基础
- OpenMP并行程序设计
- OpenMP: OpenMP并行程序设计
- OpenMP并行程序设计
- MPI并行程序设计实例教程
- OpenMP并行程序设计
- 并行程序设计---cuda memory
- OpenMP并行程序设计
- 并行程序设计听课笔记
- OpenMP并行程序设计
- PGM学习之三 朴素贝叶斯分类器(Naive Bayes Classifier)
- WP8中SQLite的安装和使用
- 国际化设置
- 很全的FreeMarker教程
- 根据姓名获取拼音 C#
- 并行程序设计的常见问题
- xampp重置密码
- Bitmap的使用 防止OOM异常
- Hibernate中常见的异常总结
- 国际化未知参数值设置
- android中的左右滑屏实现By ViewPager
- Android APP在Google play中搜索不到或显示不兼容
- linux touch命令
- Zend Framework国际化 一