高性能计算
常思大妹子
自学成才的社会学女硕士
展开
-
OpenCL编程(2)- 程序基本流程,以向量相加为例
下面以一个OpenCL的HelloWorld——向量相加,来说明OpenCL程序的基本流程1.查询平台信息OpenCL标准中定义平台模型的概念,一个平台会指定一个主机(host)和对应的一个或多个设备(device)处理器。比如如果是一个CPU+GPU的环境,则CPU是host,GPU是device查询平台信息分为两步,均调用clGetPlatformIDs接口第一步,查询平台个数第二部,查询平台对象示例代码如下: cl_int iStatus = 0; // 函数返回状态 cl_原创 2020-07-14 20:13:34 · 398 阅读 · 0 评论 -
OpenMP编程(6)—数据作用域(private、firstprivate、lastprivate、shared、default、reduction、copyin、threadprivate)
数据作用域说明:数据作用域定义了程序串行部分中的数据变量中的哪些以及如何传输到程序的并行部分,定义了哪些变量对并行部分中的所有线程可见,以及哪些变量将被私有地分配给所有线程。数据作用域子句可与多种指令(如parallelL、for、sections等)一起使用,以控制封闭区域变量的作用域OpenMP基于共享内存编程模型,所以大多数变量在默认情况下是共享的1. parivate2. firstprivate3. lastprivate4. shared5. shared6. defaul原创 2020-07-04 21:27:05 · 3618 阅读 · 0 评论 -
OpenMP编程(5)—同步结构(master、critical、barrier、atomic、flush、ordered)
OpenMP的同步结构(Synchronization Constructs)指令包master、critical、barrier、atomic、flush、ordered等1. master指令master指令指定的区域只由主线程执行,团队中其他线程都跳过该区域代码本指令没有隐含的barrier,即其他线程不用再master区域结束处同步,可立即执行后续代码。代码示例如下#pragma omp parallel { #pragma omp master { printf("i原创 2020-07-02 19:53:51 · 6809 阅读 · 0 评论 -
OpenMP编程(4)—sections、single指令
1. sections指令1.1 sections指令用途SECTIONS指令用于非迭代的多线程共享区。它指定各个section代码段分配给一组线程中部分线程。多个独立的section指令嵌套在sections指令中,每个section由于其中一个线程执行一次。不同的section可以由不同的线程执行。当然对于一个线程来说,如果它运行足够快,是有可能执行多个section。1.2 sections语法格式#pragma omp sections [clause ...] newline原创 2020-07-01 13:13:56 · 3154 阅读 · 0 评论 -
OpenMP编程(3)—for指令(含schedule、nowait)
1. for指令用途for指令指定紧随其后的循环迭代由一组线程并行执行。2. for指令语法格式#pragma omp for [clause ...] newline schedule (type [,chunk]) ordered private (list) firstprivate (list) lastprivate (li原创 2020-07-01 09:58:06 · 3642 阅读 · 0 评论 -
OpenMP编程(2)—并行区域(Parallel Region)
1. 并行区域(Parallel Region)概念并行区域是由多个线程执行的代码块,是基本的OpenMP并行结构。当一个线程到达并行指令时,它将创建一组线程并成为主(master)线程,其线程号为0。从这个并行区域开始,代码被复制,所有线程都将执行该代码。在并行区域的结尾有一个隐含的屏障(barrier),只有主线程继续执行超过此点。如果任何线程在一个并行区域内终止,那么该组的所有线程都将终止。2. 并行区域的代码示例 int nthreads, tid; // fork一组线程,并原创 2020-06-30 19:50:58 · 1943 阅读 · 0 评论 -
OpenMP编程(1)—基础概念
OpenMP是什么一种应用程序接口(API),可用于对程序显式地设置多线程、基于共享内存地并行处理通过来自硬件和软件行业、政府和学术界的相关方之间的协作,实现多处理的开放规范包含三种主要的API组件:编译指令(Compiler Directives)、运行时库(Runtime Library Routines)、环境变量(Environment Variables)OpenMP不是什么不能用于分布式内存并行系统不需要由所有供应商来统一实现不能保证最有效地利用共享内存OpenMP的目标原创 2020-06-29 23:55:40 · 557 阅读 · 0 评论 -
MPI编程(4)—集合通信MPI_Bcast、MPI_Gather、MPI_Scatter、MPI_Reduce
1. MPI_Bcast:广播消息MPI_Bcast用于将一个进程的buffer中的数据广播到其他进程的相同buffer变量中代码示例如下: int rank, data[10]; MPI_Init(0, 0); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) { for (int i = 0; i < 10; ++i) { data[i] = i + 1; } } //进程0广播数据原创 2020-06-22 20:24:38 · 5978 阅读 · 0 评论 -
MPI编程(3)—点对点通信(阻塞式MPI_Send/MPI_Recv和非阻塞式MPI_Isend/MPI_Irecv)
1.MPI的两种点对点通信方式MPI的点对点通信包括阻塞式和非阻塞式:阻塞式通信调用 MPI_Send/MPI_RecvMPI_Send不会返回,调用MPI_Send发送数据的进程会被阻塞,直到缓存为空MPI_Recv不会返回,调用 MPI_Recv接收数据的进程会被阻塞,直到缓存被填充非阻塞式通信调用 MPI_Isend/MPI_Irecv调用MPI_Isend或MPI_Irecv会马上返回2. MPI_Send/MPI_Recv代码示例MPI_SEND/MPI_RECV的代码示例原创 2020-06-20 23:43:11 · 8697 阅读 · 1 评论 -
MPI编程(2)—window下开发环境搭建
1. 安装包下载MPICH是MPI标准的一种实现,具有高性能和广泛地可移植性,它在10台最顶级(2016年6月的排名)的超级计算机的9台中使用。遗憾的是,MPICH在2013年就停止了对windows版本的更新,最新版本停留在了 mpich2-1.4.1,可以下载供学习用。微软官网提供了MS-MPI,MS-MPI基于mpich2实现,与mpich2兼容,而且一直在更新。MS-MPI中包含了mpich2实现的所有功能,http://www.mpich.org官网也指向该版本,下面就以该版本为例来搭建win原创 2020-06-20 09:45:39 · 984 阅读 · 0 评论 -
MPI编程(1)—基础概念
什么是MPIMessage Passing Interface的简称,信息传递接口定义了消息传递库的协议,本身是接口而不是程序库通常用于分布式存储系统或高性能计算目标可移植:可运行在不同的机器或平台上可扩展:可运行在成千上万的计算节点上灵活性:可接口隔离MPI库的开发者和使用者...原创 2020-06-17 23:06:03 · 595 阅读 · 0 评论 -
如何评估并行算法性能
1. 加速比(SpeedUp Factor)程序加速比:S(p)=TsTp程序加速比 :S(p)=\frac{_{Ts}}{{_{Tp}}}程序加速比:S(p)=TpTsTs:最优串行算法的执行时间_{Ts}:最优串行算法的执行时间Ts:最优串行算法的执行时间Tp:p个处理器的执行时间_{Tp}:p个处理器的执行时间Tp:p个处理器的执行时间线性加速比:S(p)=p,理论上最大的加速比:不是所有的计算可以并行;因为同步并行处理需要额外计算;不同处理器间需要通信超级线性加速比:S(p)>原创 2020-06-16 13:10:30 · 900 阅读 · 0 评论 -
初识并行计算
什么是并行计算通过多个处理器一起工作去解决某个问题。传统程序编写后是串行计算的,而并行计算则需要通过多个计算资源解决计算问题。并行计算与分布式计算的区别并行计算:同一时间发生多项不同活动,同一应用规模大而需分散到多个核心或处理器上,通常用于科学计算分布式计算:不同活动跨越多系统或服务器,更关注并发和资源共享,通常用于商业领域为什么需要并行计算1.节省计算时间;2.解决大规模问题,特别是单机无法解决的问题3.更好地利用底层并行硬件...原创 2020-06-15 20:09:55 · 568 阅读 · 0 评论 -
OpenCL编程(1)- 开发环境搭建(NVIDIA GPU+Win10篇)
基于NVIDIA GPU的OpenCL开发环境搭建的步骤如下:1.下载安装显卡驱动使用鲁大师或驱动精灵下载安装与显卡型号相适应的显卡驱动并安装,若采用默认路径安装,则在路径C:\Program Files\NVIDIA Corporation下可以看到安装好的驱动程序通过CPU-Z查看显卡是否支持OPENCL2. 下载CUDA并安装登录NVIDIA官网下载CUDA并安装,本人下载的是本地安装包,若采用默认安装路径,则安装完成后可在路径C:\Program Files\NVIDIA GPU Co原创 2020-06-13 00:00:04 · 3311 阅读 · 0 评论