多核编程入门

感谢 陈耿佳 投递此文。

下载地址:多核编程入门

本文是多核编程的入门资料汇总,来源主要是国外国内的一些网站及自己使用过程中一些记录,写作目的主要是内部分享用(@NSFOCUS)。在多核使用过程中,得益于很多网络资源,所以也把自己整理的产品无关的东西共享出来,希望对多核感兴趣的同学可以入门用。

在intel E5 平台上搞了几个月多核编程,中间收集并学习了一些多核编程的知识,整理了一份PDF格式的 ,欢迎大家一起探讨。

目前遇到比较难的问题是,自己做Demo的时候使用了nbds.tar.gz里一种无锁哈希的实现,但是最后发现它是没有删除的,无锁的删除真的那么难吗?有谁手上有比较稳定而且高效(必须针对缓存优化过)而且完整(lookup,insert,delete)的无锁哈希表实现吗?希望大家就这个问题给出一些建议。

 

本书目录

一. 并发与并行的区别? ……………………………………………………………………………………………………………11.1 串行 ………………………………………………………………………………………………………………………………… 11.2 并发 ………………………………………………………………………………………………………………………………… 11.3 并行 ………………………………………………………………………………………………………………………………… 1

1.4 多核编程的难点 ………………………………………………………………………………………………………………. 2

二. 多核体系架构 ……………………………………………………………………………………………………………………… 3

2.1 多核处理器定义 ………………………………………………………………………………………………………………. 3

2.2 多核发展趋势 ………………………………………………………………………………………………………………….. 3

2.3 一个多核处理器架构例子 ………………………………………………………………………………………………… 5

2.4 LINUX 线程核绑定 ……………………………………………………………………………………………………………… 6

2.4.1 核亲和性绑定 …………………………………………………………………………………………………………… 6

2.4.2 资源控制 cgroup ………………………………………………………………………………………………………. 8

三. 内存模型 …………………………………………………………………………………………………………………………….. 8

3.1 操作原子性 ……………………………………………………………………………………………………………………… 9

3.1.1 原子性的3种保证机制 …………………………………………………………………………………………….. 9

3.1.2 硬件原子操作 …………………………………………………………………………………………………………… 9

3.1.3 总线锁-原子操作原语 ……………………………………………………………………………………………… 12

3.2 缓存一致性 ……………………………………………………………………………………………………………………. 16

3.2.1 定义 ……………………………………………………………………………………………………………………….. 16

3.2.2 CC协议 ……………………………………………………………………………………………………………………. 17

3.2.3 伪共享 ……………………………………………………………………………………………………………………. 21

3.3 顺序一致性 ……………………………………………………………………………………………………………………. 24

3.3.1 定义 ……………………………………………………………………………………………………………………….. 24

3.3.2 几种顺序约束 …………………………………………………………………………………………………………. 25

3.3.3 乱序执行和内存屏障 ………………………………………………………………………………………………. 28

四. 并发级别 …………………………………………………………………………………………………………………………… 31

4.1 WAIT-FREEDOM 无等待并发 ……………………………………………………………………………………………….. 32

4.2 LOCK-FREEDOM 无锁并发 ……………………………………………………………………………………………………. 32

4.3 OBSTRUCTION-FREEDOM 无阻塞并发 …………………………………………………………………………………….. 33

4.4 BLOCKING ALGOITHMS 阻塞并发 ……………………………………………………………………………………………. 33

五. 锁 …………………………………………………………………………………………………………………………………….. 34

5.1 信号量 …………………………………………………………………………………………………………………………… 34

5.2 自旋锁 …………………………………………………………………………………………………………………………… 35

5.3 读写锁 …………………………………………………………………………………………………………………………… 35

5.4 顺序锁 …………………………………………………………………………………………………………………………… 37

5.5 RCU ………………………………………………………………………………………………………………………………… 38

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 多核编程入门

  • Trackback 关闭
  • 评论 (3)
  1. 作者整理总结得不错,多谢分享。

  2. 对于文中的有几处,我发表下我的看法。

    我不太认同4.1中,将例举的atomic_increment归为wait-free级别,虽然我不太懂C,但分析可知,它有一个冲突需要解决,除非CPU提供了一个原子指令来完成该操作,但这样的可能性比较小,所以我查了下资料(链接不让发?等下补上试试),根据资料中的分析,它其实有一个失败重试的循环,所以应该是lock-free级别的。

    另外,我不太赞同将CAS划为lock-free,CAS只是处理同步问题的一种手段而已,跟级别无关,有一些wait-free算法就是用CAS实现的,我自己也编写过一些这样的算法,只不过wait-free的算法比较少见,大家看到的大多是lock-free级别的。

    对于无锁编程,我在本站写过一个实战系列(最后一篇还在审核),欢迎交流探讨。

  3. blog点chinaunix点net斜杠uid-23046336-id-3262445点html

return top