openmp相关内容

在 OpenMP 区域内调用内部子例程

我有一个包含一个子程序的模块,该子程序又包含另一个子程序.外部子例程有一个并行的 OpenMP 区域,我在其中调用内部子例程.代码编译运行没有任何错误但结果不正确. 模块 my_module包含子程序 a(...)*...一些变量*!$OMP 并行执行默认(私有)共享(...)*...做一些工作*呼叫 b(...)!$OMP 结束并行执行包含子程序 b(...)*...一些变量**...做一些工 ..
发布时间:2022-01-14 10:04:43 其他开发

OpenMP 几个“共享"指令?

你好,我在 OpenMP 中有一个很长的共享变量列表,所以我必须在 fortran 中拆分行并使用“&"-语法来确保这些行粘在一起! 类似的东西: !$OMP PARALLEL DEFAULT(private) SHARED(vars....,&更多变量...,&更多变量...&) 在没有 OpenMP 的情况下编译时会出现错误,因为只有第一个赞被识别为评论!现在的问题是我不能添加“!" ..
发布时间:2022-01-14 09:53:06 其他开发

MPI Fortran 代码:如何通过 openMP 在节点上共享数据?

我正在编写一个已经使用 MPI 的 Fortan 代码. 现在,我面临一种情况,一组数据增长得非常大,但每个进程都相同,所以我希望每个节点只将它存储在内存中一次,并且一个节点上的所有进程都访问相同的数据. 为每个进程存储一次会超出可用 RAM. 是否有可能使用 openMP 实现类似的目标? 每个节点的数据共享是我唯一想要的,不需要其他每个节点的并行化,因为这已经通过 MP ..
发布时间:2022-01-14 09:44:37 其他开发

带有子例程和函数的 Fortran OpenMP

免责声明:我很确定这已经在某个地方得到了回答,但是我和另一个人一直在努力寻找却无济于事. 我有一个看起来像这样的代码: 程序主!$omp 并行执行!$omp 私有的(一些东西) 共享的(其他东西)做 i=1,n...调用我的子程序(参数)...a=我的函数(更多参数)...ENDDO!$omp end parallel do结束程序SUBROUTINE mysubroutine(东西). ..
发布时间:2022-01-14 09:29:55 其他开发

为什么此 openmp 代码中发生分段错误?

主程序: 程序主程序使用 omp_lib使用 my_module隐式无整数,参数 :: nmax = 202000实数(8) :: e_in(nmax) = 0.D0整数 i调用 omp_set_num_threads(2)!$omp 并行默认值(firstprivate)!$omp 做做我=1,2打印 *, e_in(i)打印 *, eTDSE(i)结束做!$omp 结束做!$omp 结束并行 ..
发布时间:2022-01-14 09:20:09 其他开发

带有 -fopenmp 的段错误,用于一个简单的程序

我正在刷新 openmp,并陷入了这种奇怪的情况.剃掉一堆,我创建了这个显示问题的最小的琐碎案例 程序 ex2隐式无整数,参数 :: n=10000000整数 :: 我实数 :: x(n)做 i=1,nx(i) = 0.0d0结束结束程序 没有指定标志,mac (10.6) 上的 gfortran 4.3.4 编译,程序正确执行. 但是,如果我使用 -fopenmp 启用 openmp, ..
发布时间:2022-01-12 15:51:06 其他开发

OpenMP 是否可以在 MFC 应用程序中工作?

我想通过并行处理提高 MFC 应用程序的性能.当然,我在互联网上搜索过 OpenMP 和 MFC.大多数帖子都是关于如何将 OpenMP 集成到 MFC 应用程序中.这导致了这个问题. 是否可以将 OpenMP 用于 MFC 应用程序? 更新:似乎 Currency Runtime 可以做 OpenMP 所做的事情用于 MFC.但我还是想确定一下上面的问题. 解决方案 我看不出 ..
发布时间:2022-01-12 15:21:24 C/C++开发

在我的 c++ 项目中到处禁用 OpenMP pragma 语句

在我的 c++ 项目中,有几个 #pragma omp parallel for private(i) 语句.当我尝试使用 valgrind 跟踪代码中的错误时,OpenMP 修饰会导致“可能丢失"的内存泄漏消息.我想完全禁用上述所有 #pragma 语句,以便隔离问题. 但是,我在我的代码中使用 omp_get_wtime(),并且我不希望禁用这些函数调用.所以我不想在我的项目中完全禁用所 ..
发布时间:2022-01-11 19:57:34 C/C++开发

有条件的“pragma omp"

我正在尝试使用 OpenMP 进行不同类型的并行化.结果,我的代码中有几行 #pragma omp parallel for 我(取消)交替注释.有没有办法让这些行有条件地使用类似下面的东西,而不是工作代码? 定义 OMPflag 1#if OMPFlag pragma omp parallel for为了 ... 解决方案 OpenMP 并行构造可以指定 if 子句.在 Fortran ..
发布时间:2022-01-11 19:40:51 其他开发

OMP:错误 #15:正在初始化 libiomp5.dylib,但发现 libiomp5.dylib 已初始化

我正在尝试运行一个测试程序来检查我的 Anaconda 环境是否配置正确.但是,当我运行我的测试程序时,我会在程序设置图形时收到此错误消息(准确地说是 on_train_end() 回调): OMP:错误 #15:正在初始化 libiomp5.dylib,但找到了 libiomp5.dylib已经初始化.OMP:提示 这意味着 OpenMP 运行时的多个副本已经存在,因为它会降低性能或导致不 ..
发布时间:2022-01-10 20:58:50 Python

OpenMP 中的并行累积(前缀)总和:线程之间的通信值

假设我有一个函数 f(i) 取决于索引 i (以及其他无法预先计算的值).我想填充一个数组 a 以便 a[n] = sum(f(i)) 从 i=0 到 n-1. 编辑:在 Hristo Iliev 发表评论后,我意识到我在做的是 累积/前缀总和. 这可以写成代码 浮点数 = 0;for(int i=0; i 现在我想使用 OpenMP 并行执行此操作.我可以使用 OpenMP 执行 ..
发布时间:2022-01-09 15:41:11 其他开发

OpenMP - 在外循环之前具有并行时,嵌套的 for 循环会变得更快.为什么?

我目前正在实施一种动态规划算法来解决背包问题.因此我的代码有两个 for 循环,一个外循环和一个内循环. 从逻辑的角度来看,我可以并行化内部 for 循环,因为那里的计算彼此独立.由于依赖关系,无法并行化外部 for 循环. 所以这是我的第一种方法: for(int i=1; i THRESHOLD)for(int c=1; c 代码运行良好,算法正确解决问题.然后我在考虑优化 ..
发布时间:2022-01-07 13:23:12 C/C++开发

在 openmp 中迭代 std 容器

我正在尝试使用 openmp 通过 std::set 对循环进行多线程处理.当我编写以下代码时 - #pragma omp parallel forfor (std::set::const_iterator i = s.begin(); i != s.end(); ++i) {const A a = *i;操作(一);} 我收到此错误: 错误:迭代变量“i"的类型无效错误:无效的控制 ..
发布时间:2022-01-07 11:26:21 C/C++开发

如何使用g++编译openmp

我有关于 openmp 编译的问题. 像下面的代码: #include #include #include #include #include 使用命名空间标准;sem_t 空,满;堆栈stk;无效产品(int i){{sem_wait(&empty);cout ..
发布时间:2022-01-04 21:29:43 C/C++开发

openmp 是否分配内存并在之后全部释放

openmp 是否分配内存并释放所有内存?因为我运行了 valgrind,并且释放了我所有的列表.我 malloc 的所有东西都释放了. ==11442== HEAP 摘要:==11442== 退出时正在使用:1 个块中的 192 个字节==11442== 总堆使用量:2,001 次分配,2,000 次释放,已分配 2,917,280 字节==11442====11442== 泄漏摘要:==11 ..
发布时间:2021-12-31 00:09:50 其他开发

openmp中的并行for循环

我正在尝试并行化一个非常简单的 for 循环,但这是我很长时间以来第一次尝试使用 openMP.我对运行时间感到困惑.这是我的代码: #include #include 使用命名空间标准;int主(){int n=400000,m=1000;双 x=0,y=0;双 s=0;向量 我用 编译它 g++ -O3 testMP.cc -o testMP -I/opt/boost_1_48_0/i ..

使用 OpenMP 按列和行并行化矩阵乘以向量

对于我的一些作业,我需要实现矩阵与向量的乘法,并按行和列对其进行并行化.我确实理解行版本,但我对列版本有点困惑. 假设我们有以下数据: 以及行版本的代码: #pragma omp parallel default(none) shared(i,v2,v1,matrix,tam) private(j){#pragma omp forfor (i = 0; i 这里计算正确,结果正确 ..
发布时间:2021-12-30 21:42:41 其他开发

未使用所需数量的处理器

我正在使用 openmp 并行运行以下 Fortran 代码,但只有一个处理器在工作.我在代码中添加了一些执行例程,例如 OMP_SET_NUM_THREADS 和 OMP_GET_NUM_THREADS 以遵循并行处理.这是代码的相关部分: 整数 a,b,omp_get_num_procs,omp_get_max_threads,&omp_get_num_threadsopen( unit=1 ..
发布时间:2021-12-30 21:42:07 其他开发

错误 C3017:OpenMP 'for' 语句中的终止测试形式不正确

我有一个定义了所有变量的 for 循环 #pragma omp parallel forfor(long long l = 1; l 当我在 Visual Studio 2012 中使用 /openmp 命令行选项编译它时,它给了我 错误 C3017:OpenMP 'for' 语句中的终止测试形式不正确 我不知道为什么'for'语句的形式不正确. OpenMP 的正确语句是什么?如 ..