OpenMP基础知识
OpenMP基础知识
sxj731533730
江流儿
展开
-
6、OpenMP归约操作reduction、shared、simd
基本思想:OpenMP进行加减乘除运算的规约处理 reduction 可以支持的运算符号 +、-、*、/、&&、|、^、|| 符号#pragma omp parallel for reduction(+:sum) for(int i=0;i<num;i++) { .... }测试代码#include <iostream>#include <omp.h>#include<chrono>using原创 2021-06-27 10:41:58 · 1648 阅读 · 0 评论 -
5、OpenMP的变量私有化private、firstprivate、lastprivate
基本思想:OpenMP的变量私有化使用(1)private子句将一个或多个变量变成私有化变量,每个线程都有独立的私有化副本,并不受外部同名变量的影响它只可以用在迭代变量设置#pragma omp parallel for private(i) for( i=0;i<num;i++){ ......}或者#pragma omp parallel private(i) { ..... }测试代码#include <iostream>原创 2021-06-27 10:06:08 · 1885 阅读 · 0 评论 -
4、OpenMP的临界区critical、atomic、omp_lock_t
基本思想:OpenMP和多线程的互斥锁很像#pragma omp parallel for for(int i=0;i<num;i++) {#pragma omp critical(sum) sum=sum+i; } std::cout<<"sum="<<sum<<std::endl;}测试代码#include <iostream>#include <omp.h>#i原创 2021-06-26 15:55:03 · 4038 阅读 · 4 评论 -
3、OpenMP的分段sections、single、nowait、barrier、master、order
基本思想:sections在OpenMP里面属于分迭代任务的分担,总感觉这玩意像FPGA硬件逻辑代码中的分段模块(1)分段执行代码逻辑sections#pragma omp parallel sections {#pragma omp section for (int i = 0; i < num/2; i++) { ..... }#pragma omp section for (int i = num/2; i原创 2021-06-26 14:26:10 · 2196 阅读 · 1 评论 -
2、OpenMP的任务调度schedule(static|dynamic|guided|runtime[size])
基本思想:对于for的任务分担 schedule(static|dynamic|guided|runtime[size])(1)for的任务分担#pragma omp parallel{#pragma omp forfor(int i=0;i<num/2;i++)//num此为偶数{ .....}#pragma omp forfor(int i=num/2;i<num;i++) {.......}}测试代码#include <iostream&g原创 2021-06-26 12:38:35 · 2901 阅读 · 0 评论 -
1、OpenMP常用函数、parallel、for
基本思想:因为看NCNN源码,发现up主代码中,使用了OpenMP预编译指令,所以详细查阅了资料,简单了学习一下,等有时间在补充NCNN代码的中的实例,这里原理不详细叙述,只记录使用,以备后续用到好查阅;编译工具使用Clion2021.1.1,因为使用OpenMP的主要目的在于加速处理指令,因此会着重比较一下串行程序和OpenMP并行程序的执行效率问题,有时间在补充OpenMP和多线程的执行效率(1)OpenMP的常用的函数和使用:测试代码:(cmakelists.txt不在重复黏贴)原创 2021-06-26 11:11:26 · 1288 阅读 · 0 评论