![](https://img-blog.csdnimg.cn/20200613145054648.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
High Performance Compute
OpenMP,CUDA,OpenACC,MPI
千与千与千
不学无术、一无是处
展开
-
MPI六个基本的调用函数
一、初始化:1、函数原型:int MPI_Init(int *argc, char ***argv);2、调用格式:int main(int argc, char *argv[]){ MPI_Init(&argc, &argv); return 0;}3、解释:MPI_Init() 是MPI程序的第一个调用,它完成MPI程序所有的初始化工作,所有MPI程序的第一条可执行语句都是这条语句。MPI系统通过argc和argv得到命令行参数,并且将原创 2020-07-29 10:23:55 · 2457 阅读 · 0 评论 -
OpenACC——异步操作(async子语、wait子语、wait导语)
1、async子语:async子语可以出现在parallel构件或者kernels构件上,也可以出现在enter data、exit data、update、wait导语上。没有async子语的时候,在执行任何后续代码之前,主机线程会一直等待直至计算构件结束或者数据操作完成;如果有async子语,在主机线程继续执行构件或导语后面代码的同时,parallel、kernels构件区域或数据操作可以被异步地处理。2、wait子语:wait子语可以出现在parallel构件或者kernels构件上,也可原创 2020-06-14 14:56:13 · 438 阅读 · 0 评论 -
OpenACC——数据管理(data构件、enter data和exit data、update导语、declare导语)
1、data构件:在进入data构件区域时,无论是否需要将数据从主机复制到设备内存上,在离开本data构件区域时,无论是否需要将数据从设备复制到主机上,在data区域持续期间,data构件指定的标量、数组和子数组都会在设备内存上拥有空间。这样可以避免数据在设备和主机上来回传输。示例代码:#include<iostream>using namespace std;#define N 256int main(){ int i, a[N], b[N]; for(i原创 2020-06-14 11:18:36 · 822 阅读 · 0 评论 -
OpenACC——parallel计算构件和kernels计算构件的区别
1、在使用loop导语时:1.1、parallel计算构件:默认关联的循环是没有数据依赖的,可以安全的进行并行化,如果确实存在数据依赖,那后果自负。1.2、kernels计算构件:编译器会自行检测loop导语的关联循环的数据依赖性,如果存在数据依赖,或者无法确定数据独立的时候,就会拒绝并行化。2、对双重循环进行并行化时:2.1、parallel计算构件:并行化的组织方式是一维的。2.2、kernels计算构件:并行化的组织方式是二维的。3、对区域的并行组织方.原创 2020-06-13 22:02:37 · 309 阅读 · 0 评论 -
OpenACC——#pragma acc parallel
#pragma acc parallel:1、遇到一个parallel构件时,程序就创建一个或多个gang来执行这个并行区域。2、parallel区域结束时,会有一个隐式的同步障碍,线程到此等待,直到所有的线程到达此处。3、parallel导语自动探测结构块代码内的并行性,存在数据依赖时拒绝并行化。4、在没有loop导语的情况下,parallel只有一个gang来进行并行化。在使用loop导语的情况下,默认数据是没有依赖的,如果确实存在数据依赖,那后果自负。5、在一个parallel区域原创 2020-06-13 20:07:32 · 594 阅读 · 0 评论 -
OpenACC——#pragma acc kernels
#pragma acc kernels:1、kernels构件将需要进行并行化的区域,编译成一系列可以在设备上运行的CUDA kernel,这也是为什么起名叫“kernels”的原因吧。2、kernels区域结束时,会有一个隐式的同步障碍,线程到此等待,直到所有的线程到达此处。3、将kernels区域映射成CUDA内核时,线程的网格维度和块维度等参数由编译器自行进行选择,编译器可以根据设备环境自动选择合适的参数。代码示例:#include <iostream>using原创 2020-06-13 16:31:41 · 480 阅读 · 0 评论 -
OpenACC——数据子语(present,copy,copyin,copyout,create,private,firstprivate,default)
present子语:例:#pragma acc kernels present(a),表明在进入构件区域之前,变量a已在设备上开辟内存。copy子语:例:#pragma acc kernels copy(a),当进入kernels构件区域时,如果设备上已经为a变量开辟了内存,则只需要将数据传输过去;如果设备没有为变量a开辟内存,则在设备上为a开辟内存并将数据传输过去,离开kernels构件区域时,将设备上的a变量的数据,复制回主机的a变量上,并释放设备内存。copyin子语:例:#pra原创 2020-06-14 09:01:53 · 970 阅读 · 0 评论 -
CUDA 对比三种在GPU上建立三维数组的方式的时间效率(更新)
对比三两种在GPU上建立三维数组的方式直接在GPU建立全局变量三维数组在CPU端为GPU上的三维数组开辟空间在CPU端为GPU上的一维数组开辟空间,然后通过寻址的方式代码:#include "cuda_runtime.h"#include "device_launch_parameters.h"#include <iostream>#include <std...原创 2019-12-10 16:29:15 · 1422 阅读 · 0 评论 -
CUDA 对比两种在GPU上建立三维数组的方式的时间效率
直接在GPU建立全局变量的静态三维数组在CPU端为GPU上的三维数组开辟空间代码:#include "cuda_runtime.h"#include "device_launch_parameters.h"#include <iostream>#include <stdio.h>#include <time.h>using namespa...原创 2019-12-10 15:36:02 · 568 阅读 · 0 评论