上一页 1 ··· 4 5 6 7 8 9 下一页
摘要: 1 工程上已经使用并行技术的例子1.1 网络设备 :Intel DPDKIntel 推出的基于x86平台的数据包处理方案,目前已经开源:http://dpdk.org/,网上最新版本是 1.3.1,主要内容包括:多核框架,基于大内存页的内存管理方案,无锁队列,用户态网卡驱动,这几个核心模块的底层实现用到了本文档前面提到的诸多概念,在前面概念的描述过程中,也引用了一些dpdk的代码。1.2 网络游戏虽然文章一开头已经提到,目前家用PC和手机核数最高已经超过10颗,但很多网络游戏的主引擎还是单进程的,比较确定的使用了多核系统的,有云风主导开发的一款游戏(据说采用多进程模型),另外,剑侠奇缘现在有选 阅读全文
posted @ 2013-08-08 17:19 cgj 阅读(536) 评论(0) 推荐(0) 编辑
摘要: 1 一些资源http://openmp.org/wp/ openmp 开放标准的并行程序指导性注释,没用过http://software.intel.com/zh-cn/articles/parallelization-using-intel-threading-building-blocks-intel-tbb intel tbb ,Intel的C++多线程库,没有用过,有人说性能很不好https://code.google.com/p/nbds/ 无锁数据结构库,关键是针对缓存做了优化,需要注意的是里边的哈希表是没有删除的,说多了都是泪http://mcg.cs.tau.ac.il/pro 阅读全文
posted @ 2013-08-08 17:17 cgj 阅读(3120) 评论(0) 推荐(0) 编辑
摘要: 简单介绍了锁,这章简单介绍一下无锁编程。有一个观念需要先了解:虽然无锁编程对于多核编程作用有限,但是它对于理解多线程编程的许多深层次问题还是有很好的借鉴作用。前半句的意思是说无锁编程的难度导致只能有极少一部分人能真正利用这种技术做出东西,其他人只能等待这部分人的成果,后半句的意思是即便你成为不了前面这些人,但稍微了解一下他们做的东西,可以大大帮助你理解多核编程的很多概念。1 什么是无锁编程基本的概念与第四章,并发级别是一致的,就是多线程程序里,不需要依赖于锁这样的阻塞机制就可以保证同步的编程技术。2. 无锁编程相关技术从上图可以看到,如果要自己编写无锁程序,基本上要掌握前面几章涉及的所有概念。 阅读全文
posted @ 2013-08-08 17:13 cgj 阅读(887) 评论(0) 推荐(0) 编辑
摘要: 锁的概念是承接原子操作的,根本目的都是为了并发保护,只不过抽象的层次更高,多核环境下的锁的实现要依赖于第三章的理论基础。下面是几种常见的锁机制的简介,这里不谈具体实现,具体实现可以参考linux内核代码1.1 信号量Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时, 阅读全文
posted @ 2013-08-08 17:10 cgj 阅读(1054) 评论(0) 推荐(0) 编辑
摘要: 在看多核编程相关论文时,往往一个并发算法会说自己是wait-free的或者lock-free的,或者是 non-blocking 的,这些专有词汇其实表示的是并发的程度,或者说并发的级别。并发级别的理解是阅读各种并发算法设计论文以及并发数据结构实现的必备基础。1.1 Wait-freedom 无等待并发Wait-freedom 指的是每一个线程都一直运行下去而无须等待外部条件,整个流程中任何操作都能在一个有限的步骤内完成,这是最高的并发级别,没有任何阻塞。结合之前原子操作部分的知识,可以简单认为能够直接调用一个原子操作实现的算法或程序就属于Wait-free,比如下面的 increment_r 阅读全文
posted @ 2013-08-08 16:50 cgj 阅读(3580) 评论(0) 推荐(0) 编辑
摘要: 1 定义Sequential consistency , 简称 SC,定义如下… the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program [lamport]下面用一个小例子说明这个定义的意思 阅读全文
posted @ 2013-08-08 16:47 cgj 阅读(5086) 评论(0) 推荐(2) 编辑
摘要: 1 定义缓存一致性 Cache coherence 简称 CC, 缓存一致性协议是在共享缓存多处理器架构确保最终一致性最突出、最重要的机制。这些协议在缓存线(cache-line)级别实现了对一致性的保证。缓存线是从主内存中读取数据和向内存中写入数据的缓存单位(至少从一致性机制的角度看是这样的)。商用处理器上三个最突出最重要的缓存一致性协议—MOESI, MESI, and MESIF—的缩写都来自它们为缓存线定义的各种状态:Modified(已修改), Owned(被占用),Exclusive(独占的), Shared(共享的), Invalid(无效的), and Forward(转发的) 阅读全文
posted @ 2013-08-08 16:39 cgj 阅读(4640) 评论(0) 推荐(0) 编辑
摘要: 问题1:内存模型是什么?答案:CPU硬件有它自己的内存模型,不同的编程语言也有它自己的内存模型。如果用一句话来介绍什么是内存模型,我会说它就是程序员,编程语言和硬件之间的一个契约,它保证了共享的内存地址里的值在需要的时候是可见的,它保证了机器执行代码的结果与程序员脑子里的预期是一致的。。它最大的作用是取得可编程性与性能优化之间的一个平衡。[parallellabs.com]问题2:多核并行编程为什么需要关注内存模型?答案:目前缺少一个并发的内存模型,使得开发多核程序的程序员不得不面对内存操作的一些细节。从语言来说,.net , java 基于虚拟机的语言其内存模型相对完整,c,c++的内存模型 阅读全文
posted @ 2013-08-07 18:53 cgj 阅读(1673) 评论(0) 推荐(0) 编辑
摘要: 1.1 多核处理器定义多内核处理器架构是指:芯片设计工程师在单个处理器中集成两个或多个 “执行内核(即计算引擎)”。多内核处理器可直接插入到单一处理器基座中。但是,操作系统会把它的每个执行内核作为独立的逻辑处理器,为其分配相应的执行资源。要利用多核处理器的运算能力,需要改写操作系统和编译器,广泛使用的vista, vin7 等都能支持多核体系架构。1.2 多核发展趋势首先思考一个问题: 为什么微处理器要从单核转向多核?答案是: 功耗问题限制了单核不断提高性能的发展途径.有几个简单的公式可以说明这个问题:1)处理器性能 = 主频 * IPC , 主频是指每秒时钟周期数,比如1Ghz,是每秒10亿 阅读全文
posted @ 2013-08-07 18:37 cgj 阅读(2828) 评论(0) 推荐(0) 编辑
摘要: 首先了解几个概念1. 串行最基本的程序执行方式,串行程序的整个运行时,只有一个调用栈和一个运行时上下文。2. 并发多线程出现后比较常见的程序执行方式,多线程程序运行时,会有多个运行时上下文和对应的多个调用栈。逻辑上多个线程同时发生,物理上是由操作系统调度,CPU某一时刻依然只执行一个线程的任务。3. 并行多核处理器出现后会越来越常见的程序执行方式,物理上多个任务可以同时运行,这个概念介于操作系统和体系架构之间,从操作系统而言,依然是调度多个线程去CPU执行,只不过有了多个CPU/核心,不同线程可以绑定从而完全占用一颗核心,所以从体系架构的角度,同一时刻是有多个任务同时运行,另外一些说法,如‘多 阅读全文
posted @ 2013-08-06 18:12 cgj 阅读(2668) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 下一页