任务并行
出自 MBA智库百科(https://wiki.mbalib.com/)
目录 |
任务并行,是平行计算程序设计模型的一种。在这个模型中,每一个线程执行一个分配到的任务,而这些线程则被分配(通常是操作系统内核)到该并行计算体系的各个计算节点中去。
任务并行是并行计算程序设计模型的一种。在这个模型中,每一个线程执行一个分配到的任务,而这些线程则被分配(通常是操作系统内核)到该并行计算体系的各个计算节点中去。
一般任务在处理器上的调度是通过用户线程(User Thread,相对于内核线程 - Kernel Thread 而言)实现的。操作系统内核通过操纵调度器(Scheduler)对线程进行调度从而将任务映射到各个处理器上。这种调度方式一般不能满足用户自由安排分配任务的要求:通常需要操作系统提供一个用户模式下的调度器来完成这个任务。调度器的任务就是尽可能合理的将任务分配和均衡到个处理器上。
同步是任务并行里涉及到最重要的任务之间通信的方法,分为进程同步(或者线程同步)和 数据同步。进程同步主要研究如何确定数个进程之间的执行顺序和避免数据竞争(Data race condition)的问题。避免数据竞争的主要方法是在程序中设立临界区,即一次只允许一个线程执行的一段代码,通常用于保护重要的公共变量。然而也有理论研究一次允许数个线程执行临界区代码的一般情况,称为l-exclusion问题。
就编程方法来说,保持进程间同步的主要方法有内存屏障(Memory barrier),互斥锁(Mutex),信号量(Semaphore)和锁(Lock),管程(Monitor),消息(Message),管道(Pipe)。
数据同步则是研究如何保证在一个变量的多个副本之间保持一致性的问题。数据同步通常涉及到的话题有Cache一致性(Cache Coherence),数据复制(Data replication)等等。
数据同步和进程同步的目的是为了使程序在多处理器执行的条件下保持一定的内存模型。