草庐IT

OpenMP_FLAG_DETECTED

全部标签

c++ - 谐波级数和 c++ MPI 和 OpenMP

我正在尝试同时使用MPI和opemMP制作并行版本的“HarmonicProgressionSum”问题。但是输出在每个过程中都是不同的。谁能帮我解决这个问题?并行程序:(MPI和OpenMP)#include#include#include#include#include#include#include#defined10//NumbersofDigits(Example:5=>0,xxxxx)#definen1000//ValueofN(Example:5=>1/1+1/2+1/3+1/4+1/5)usingnamespacestd;doublet_ini,t_fim,t_tot;

c++ - 什么是 OpenMP?

什么是OpenMP的高级描述?Wikipediaarticle声明“OpenMP(开放式多处理)是一种应用程序编程接口(interface)(API),它支持在许多体系结构(包括Unix和MicrosoftWindows平台)上使用C、C++和Fortran进行多平台共享内存多处理编程。它由一组影响运行时行为的编译器指令、库例程和环境变量。”什么?它与线程、线程池和工作窃取等其他并发方法相比如何? 最佳答案 它是一组扩展,使C/C++能够并行运行代码的某些部分,而无需显式管理(创建、销毁、分配)线程。它允许您以声明方式并行运行代码的

C++:OpenMP 共享内存保护

如果我使用一个共享变量,比方说double变量,来计算程序执行过程中的某种总和。无论如何,这是否容易受到不稳定操作的影响?我的意思是,是否有可能多个内核以异步方式访问此变量并导致不稳定的结果?例如:这是一个全局变量:doubletotalTime=0;在每个核心中调用一个命令:totalTime+=elapsedTime;最后的操作/语句是通过获取totalTime的值,将其放入CPU寄存器,然后进行加法来执行的。我可以想象,多个核心会在同一时刻获取相同的值,然后添加新的elapsedTime,然后由于延迟,存储在totalTime中的值将被错误的值覆盖。那可能吗?我该如何解决这个问题

c++ - 微软的OpenMP自旋锁时间如何控制?

英特尔编译器使用的OpenMP支持环境变量KMP_BLOCKTIME(docs),我相信它控制着线程等待新工作所花费的忙等待(自旋锁定)时间(链接文档声称这默认为200毫秒)。Gnu编译器使用的OpenMP支持环境变量GOMP_SPINCOUNT(docs),我相信它也控制着该库的等效实现细节(尽管显然表示为迭代计数而不是时间).我的问题是:Microsoft提供什么控件(如果有)来控制Microsoft编译器使用的OpenMP中的此参数?(目前我感兴趣的是VS2010。)(我很清楚,如果我的程序的并行性完全基于OpenMP,那么就没有理由担心这一点,但我的兴趣是由大型复杂系统的一些v

c++ - 如何在 openmp 中并行执行 while 和 while 循环?

我正在尝试学习使用OpenMP进行并行编程,并且我有兴趣将以下dowhile循环与其中的多个while循环并行化:do{while(left0&&data[right]>=pivot)right--;/*swapelements*/if(left我实际上还没有弄清楚如何并行化while和dowhile循环,找不到任何资源专门描述如何并行化while和dowhile循环。我找到了for循环的说明,但我无法从中对while和dowhile循环做出任何假设。那么,您能否描述一下我如何并行化我在此处提供的这些循环?编辑我已将dowhile循环转换为以下仅使用for循环的代码。for(i=1;i

c++ - OpenMP - 嵌套 for 循环在外部循环之前并行时变得更快。为什么?

我目前正在实现一种解决背包问题的动态规划算法。因此我的代码有两个for循环,一个外循环和一个内循环。从逻辑的角度来看,我可以并行化内部for循环,因为那里的计算彼此独立。由于依赖关系,外部for循环无法并行化。所以这是我的第一种方法:for(inti=1;iTHRESHOLD)for(intc=1;c代码运行良好,算法正确解决了问题。然后我在考虑优化它,因为我不确定OpenMP的线程管理是如何工作的。我想防止在每次迭代期间对线程进行不必要的初始化,因此我在外部循环周围放置了一个外部并行block。第二种方法:#pragmaompparallelif(weightColumns>THRE

c++ - OpenMP 代码远比串行慢 - 内存或线程开销瓶颈?

我正在尝试并行化(OpenMP)一些科学C++代码,其中大部分(>95%)的CPU时间花在计算N阶的讨厌(且不可避免)O(N^2)交互上~200种不同的颗粒。该计算重复1e10个时间步长。我用OpenMP尝试了各种不同的配置,每一个都比串行代码慢一些(至少一个数量级),并且随着额外的内核的添加,扩展性很差。下面是相关代码的草图,具有代表性的虚拟数据层次结构Tree->Branch->Leaf。每个Leaf对象存储自己的位置和当前和前三个时间步长的速度,等等。然后每个Branch存储一组Leaf对象,每个Tree存储一组Branch对象。这种数据结构非常适合复杂但CPU密集度较低的计算,

c++ - 主区域 : "master region may not be closely nested inside of work-sharing or explicit task region" 的 OpenMP for 循环

我有以下代码,我认为它应该显示一个进度条来近似整个过程的进度(因为循环的每个并行线程应该以大致相同的速度进行)#pragmaompparallelforfor(longintx=0;x但是,我收到以下错误:warning:masterregionmaynotbecloselynestedinsideofwork-sharingorexplicittaskregion[enabledbydefault]现在,当我运行代码时,我确实得到了想要的结果。但我不喜欢警告。为什么这会给我一个警告,是否有更好的方法来完成此操作?谢谢! 最佳答案

c++ - 为什么在使用嵌套的 OpenMP pragma 时 c++11 线程变得不可连接?

以下代码应该非常简单,但在尝试使用嵌套的OpenMP代码在线程上执行.join()时,似乎最终陷入了挂起状态。使用GCC编译器4.7.2x64和来自http://sourceforge.net/projects/mingwbuilds的pthreads使用g++threadexample.cpp-Wall-std=c++11-fopenmp-othreads//threadexample.cpp#include#include#includeusingnamespacestd;voidhello(inta){#pragmaompparallelforfor(inti=0;i

c++ - 使用 OpenMP 创建 FFTW 计划

我正在尝试并行执行多个FFT。我正在使用FFTW和OpenMP。每个FFT都是不同的,所以我不依赖FFTW的内置多线程(我知道它使用OpenMP)。intm;//assume://intnumberOfColumns=100;//intnumberOfRows=100;#pragmaompparallelfordefault(none)private(m)shared(numberOfColumns,numberOfRows)//num_threads(4)for(m=0;m一切正常。但是,如果我从计划创建(fftw_plan_dft_r2c_2d)周围删除关键构造,我的代码将失败。有