并行计算学习之并行程序设计导论

  • 如何编写并行程序?
  1. 任务并行:将待解决问题所需要执行的各个任务分配到各个核上执行
  2. 数据并行:将待解决的问题所需要处理的数据分配给各个核,每个核在分配到的数据集上执行大致相似的操作。
  • 协调过程
  1. 通信
  2. 负载平衡:每个核被分配到大致相同数目的数据来计算
  3. 同步
  • 并行系统的种类
  1. 共享内存系统:各个核能够共享访问计算机的内存,理论上每个核能够读、写内存的所有区域。-----Pthreads、OpenMP
  2. 分布式内存系统:每个核拥有自己的私有内存,核之间的通信是显式的,需要使用类似于网络中发送消息的机制。-----MPI

  • 并发计算、分布式计算
  1. 并发计算:一个程序的多个任务在同一时段内可以同时执行
  2. 并行计算:一个程序通过多个任务紧密协作来解决某个问题
  3. 分布式计算:一个程序需要与其他程序协作来解决某个问题

  因此,并行程序和分布式程序都是并发的

  • MPI(消息传递接口)

原文地址:https://www.cnblogs.com/cola-1998/p/11150478.html

时间: 2024-08-09 02:47:39

并行计算学习之并行程序设计导论的相关文章

并行程序设计导论学习笔记——OpenMP(1)

使用OpenMP需要在编译器上打开OpenMP开关,并包含omp.h文件.我使用的是在Windows下的Visual Studio 2015,只需在工程选项中打开OpenMP支持就可以了.按照书上的说法,GCC增加参数-fopenmp就可以了. OpenMP有两个重要的函数: omp_get_thread_num() omp_get_num_threads() 他们的返回值都是无符号整数,第一个用来返回当前执行的线程编号,而第二个返回一共有的线程数量.和C语言的数组下标类似,当前执行的线程编号的

【CUDA并行程序设计系列(1)】GPU技术简介

http://www.cnblogs.com/5long/p/cuda-parallel-programming-1.html 本系列目录: [CUDA并行程序设计系列(1)]GPU技术简介 [CUDA并行程序设计系列(2)]CUDA简介及CUDA初步编程 [CUDA并行程序设计系列(3)]CUDA线程模型 [CUDA并行程序设计系列(4)]CUDA内存 [CUDA并行程序设计系列(5)]CUDA原子操作与同步 [CUDA并行程序设计系列(6)]CUDA流与多GPU 关于CUDA的一些学习资料

《Java程序性能优化》学习笔记 Ⅲ 并行程序优化

第四章 并行程序优化4.1 并行程序设计模式4.2 JDK多任务执行框架4.3 JDK并发数据结构4.4 并发控制方法4.5 锁的性能和优化4.6 无锁的并行计算 1.非阻塞同步避免了基于锁的同步的缺陷,无锁算法没有锁竞争带来的系统开销,也没有线程间频繁调度带来的开销.CAS算法:包含3个参数CAS(v,e,n).V表示要更新的变量,E表示预期值,N表示新值2.JDK的java.util.concurrent.atomic包下,有一组使用无锁算法实现的原子操作类,如AtomicInteger/A

OpenMP并行程序设计——for循环并行化详解

转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/40018735 在C/C++中使用OpenMP优化代码方便又简单,代码中需要并行处理的往往是一些比较耗时的for循环,所以重点介绍一下OpenMP中for循环的应用.个人感觉只要掌握了文中讲的这些就足够了,如果想要学习OpenMP可以到网上查查资料. 工欲善其事,必先利其器.如果还没有搭建好omp开发环境的可以看一下OpenMP并行程序设计--Eclipse开发环境的搭建 首

翻新并行程序设计的认知整理版(state of the art parallel)

近几年,业内对并行和并发积累了丰富的经验,有了较深刻的理解.但之前积累的大量教材,在当今的软硬件体系下,反而都成了负面教材.所以,有必要加强宣传,翻新大家的认知. 首先,天地倒悬,结论先行:当你需要并行时,优先考虑不需要线程间共享数据的设计,其次考虑共享Immutable的数据,最糟情况是共享Mutable数据.这个最糟选择,意味着最差的性能,最复杂啰嗦的代码逻辑,最容易出现难于重现的bug,以及不能测试预防的死锁可能性.在代码实现上,优先考虑高抽象级别的并行库(如C++11的future,PP

JavaScript高级程序设计学习笔记--面向对象程序设计

工厂模式 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用 工厂模式的一种变体. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var

并行计算复习————第三篇 并行计算理论基础:并行数值算法

第三篇 并行计算理论基础:并行数值算法 注:此篇较水,=.= Ch9 稠密矩阵运算 9.1 矩阵的划分 矩阵的划分一般分为带状划分和棋盘划分,在此基础上又有循环划分的变体: 带状划分:把矩阵的若干行或若干列连续地划分给一个处理器 循环带状划分:把矩阵的若干行或若干列间断且等间隔地划分给一个处理器 棋盘划分:把方阵连续地划分成若干子方阵,每个处理器指派一个子方阵 循环棋盘划分:把方阵间断且等间隔地划分成若干子方阵,每个处理器指派一个子方阵 一般情况下,棋盘划分的划分方法能够开发出更高并行度的算法

多处理器编程的艺术(二)-并行程序设计

当处理器的性能的发展受到各方面因素的限制的时候,计算机产业开始用多处理器结构实现并行计算来提高计算的效率.我们使用多处理器共享存储器的方式实现了多处理器编程,也就是多核编程.当然在这样的系统结构下我们面临着各种各样的挑战,例如如何协调各个处理器之间的数据调度以及现代计算机系统固有的异步特征等等. 在接下来的一系列文章中,我将会介绍一些基础的原理以及并行程序的设计和并发程序的设计及实现,写这篇文章是对近期学习课程的总结,方便自己温故时习,感谢USTC付明老师的<多核并行计算>课程,了解更多推荐&

学习MPI并行编程记录

简单的MPI程序示例 首先,我们来看一个简单的MPI程序实例.如同我们学习各种语言的第一个程序一样,对于MPI的第一个程序同样是"Hello Word". /* Case 1 hellow.c */ #include <stdio.h> #include "mpi.h" int main( int argc, char *argv[] ) { int rank; int size;     MPI_Init( argc, argv ); MPI_Comm