请教一个OpenMP并行计算的问题,为什么并行后反而比串行更慢一倍

luxiaofan1986 luxiaofan1986 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的程序代码是:

void wd(int N,double *h,double *g,double *c0,double *c,double *d)
/* wavelet decomposition 小波分解 */
{
int k,n,l;
#pragma omp parallel for
for(k=0;k<N;k=k+2)
{
double ck=0.0,dk=0.0;
for(l=0;l<8;l++)
{
n=k+l;
ck=ck+c0[n%(N+1)]*h[l];
dk=ck+c0[n%(N+1)]*g[l];
}
c[k]=ck;
d[k]=dk;
}

}

//h,g分别是两个滤波器系数 前面有db4函数产生这两个系数


为什么我这样运行了并行的速度反而比串行慢一倍呢??
如果我想在内层再做一次并行的话该怎么办呢??

希望各位师傅帮帮忙,我刚开始学习OpenMP,一些OpenMP的内容看了,但是实际操作总是出现问题,希望大家指导
...全文

相关推荐

OpenMP并行计算程序例子

OpenMP并行计算例子,主要包括简单例子、并行循环、常用函数、分段并行、嵌套并行、求π以及同步这些例子。所有例子都已经过测试。

大侠肖

MPI与OpenMP并行计算的实验报告及源程序

MPI与OpenMP的一些并行计算代码和实验报告

Zwartz

MPI和openMP并行计算-冒泡排序

MPI和openMP并行计算-冒泡排序

「已注销」

OpenMP并行计算程序设计基础

OpenMP是由The Board of the OpenMP Architecture Review Board(ARB)提出的一套用于共享内存并行系统的多线程程序设计标准。目前,OpenMP仅支持C、C++和Fortran语言。由于OpenMP是一种共享存储的标准,所以在非共享存储系统上不能使用,如集群(Cluster)(目前在非共享存储系统上并行主要采用MPI)。简而言之,OpenMP就是一种多线程程序设计的标准,适合在个人计算机上进行并行计算。它提供了对并行算法的抽象描述,程序员只需在源代码中加入专用的pragma来指明,编译器将自动将程序进行并行。 主要内容: 一、一个简单的OpenMP例子 1 二、OpenMP概述 5 三、并行数目与并形体对运行效率的影响 8 四、求π例子 13 五、循环结构的并行 17 1、范围条件 17 2、shedule条件 22 3、threadprivate指令 24 六、分段并行 25 七、嵌套并行 29 八、OpenMP中的常用函数 33 1、设置线程数目 33 2、获取线程数目 33 3、获取最多线程数目 33 4、返回线程ID 33 5、获取程序可用的处理器数目 33 6、获取时间 34 7、是否处于并行中 34 九、同步 35 1、互斥同步 39 2、事件同步 42

大侠肖

基于fortran95,openMP的并行计算 中文版

Parallel_Programming_in_Fortran95_using_OpenMP中文版 pdf

sddxstudent
评论 3
收藏 已收藏
分享
返回顶部