openmp相关内容

OpenMP的效率与优化级别

我是Open MP的新手,但我已经对此困惑了几天,在网上找不到任何答案。希望这里有人能给我解释一下这个奇怪的现象。 我想比较同一程序的顺序版本和并行版本之间的运行时。当我在GCC-10上用-O或更高级别编译它们时,并行版本的运行速度比顺序版本(~5倍)快得多(但不同级别之间的差异相当小)。 但是,当我使用-O0编译这两个程序时,情况并非如此。事实上,当使用-O0计算这两个版本时,顺序版本甚 ..

MPI OpenMp混合

我正在尝试在Linux双核集群上运行一个为MPI和OpenMP编写的程序。 当我尝试设置OMP_NUM_THREADS变量时 export OMP_NUM_THREADS=2 我收到一条消息 OMP_NUM_THREADS:未定义变量。 我在使用OpenMP时没有获得更好的性能...我也试过了: mpiexec -n 10 -genv OMP_NUM_THREAD ..
发布时间:2022-03-30 22:03:45 其他开发

如何使用OpenMP正确地并行化这个数组?

在我尝试用openmp并行化代码后,数组中的元素是错误的,因为元素的顺序并不是很重要。还是用c++标准向量而不是数组来并行化更方便,能不能给我个简单的建议? #include #include int main() { int n = 100; int a[n*(n+1)/2]={0}; int count=0; #p ..
发布时间:2022-03-17 10:05:37 C/C++开发

用OpenMP并行化Mandelbrot

我有一个计算mandelbrot集合的函数,我正在尝试使用openMP将其并行化。 我将#pragma omp parallel for private放在每个for之前 static void calculer (Image * im, int nb_iter, double x_min, double x_max, double y_min, double y_max) { ..
发布时间:2022-03-17 10:00:55 其他开发

clang、openMP和CMake

我在使用cmake生成简单的openMP代码时遇到问题。 我已经安装了clang-omp,可以使用clang-omp -fopenmp filename.c 编译该程序 我已经尝试了很多次来制作CMakeLists.txt文件,但是没有结果! 在我包含的文件中: FIND_PACKAGE( OpenMP REQUIRED) if(OPENMP_FOUND) message("OPE ..
发布时间:2022-03-17 09:43:50 其他开发

告诉GCC不要链接libgomp,这样它就会链接libiop5

我需要找出一个可以提供给GCC的编译器/链接器指令,以便在指定-fopenmp时它不会自动链接libgomp。 原因是我试图针对Intel的MKL BLAS进行构建。MKL需要添加单独的英特尔库来处理多线程(例如,libmkl_intel_thread或libmkl_gnu_thread)。然而,并不是所有操作系统(包括我的操作系统)上都有用于链接MKL和libgomp的库。这迫使我链接li ..
发布时间:2022-03-17 09:37:09 其他开发

红黑高斯赛德尔和 OpenMP

与 MPICH 相比,我试图用 OpenMP 来证明一个观点,我编写了以下示例来演示在 OpenMP 中实现一些高性能是多么容易. Gauss-Seidel 迭代被分成两个独立的运行,这样在每次扫描中,每个操作都可以按任何顺序执行,并且每个任务之间不应该有依赖关系.所以理论上每个处理器都不应该等待另一个进程执行任何类型的同步. 我遇到的问题是,与问题大小无关,我发现只有 2 个处理器的 ..
发布时间:2022-01-24 12:00:15 C/C++开发

如何使用 g++ 编译 openmp

openmp 编译有问题. 如下代码: #include #include #include #include #include 使用命名空间标准;sem_t 空,满;堆栈stk;无效生产(int i){{sem_wait(&empty);cout 首先,我使用以下代码编译它: g++ ..
发布时间:2022-01-23 20:36:40 C/C++开发

将 GDB 与 OpenMP 一起使用

使用 GDB,我似乎无法在 OpenMP 线程中打印共享变量的值.例如,使用以下程序: #include #include #include int main(int argc, char *argv[]) {int priv, tid, 酒吧 = 100;#pragma omp 并行私有(priv,tid)num_threads(2){tid ..
发布时间:2022-01-20 20:25:38 其他开发

OpenMP set_num_threads() 不工作

我正在使用 C++ 中的 OpenMP 编写一个并行程序. 我想用omp_set_num_threads()控制程序中的线程数,但是不行. #include #include #包括“mpi.h"使用命名空间标准;int myrank;整数组大小;双倍总和;双 t1,t2;整数 n = 10000000;int main(int argc, char *a ..
发布时间:2022-01-17 09:12:47 C/C++开发

OpenMP 4 中的任务依赖性

以下代码基于 OpenMP 4.0 规范工作: out 和 inout 依赖类型.生成的任务将是所有先前生成的同级任务的依赖任务在 in、out 或 inout 中引用至少一个列表项依赖类型列表. 这意味着 task3 变得依赖于 task2.对?但这没有意义!为什么输入-输出依赖任务应该依赖于输入依赖任务? 我需要做什么才能让他们独立?ps:在 Linux 上使用 g++ 4. ..
发布时间:2022-01-15 22:47:17 C/C++开发

使用 Fortran 减少 Openmp 数组

我正在尝试并行化我编写的代码.我在对数组执行缩减时遇到问题.对于小型数组,这一切似乎都可以正常工作,但是当数组大小超过某个点时,我要么得到堆栈溢出错误,要么崩溃. 我尝试在编译时使用/F 增加堆栈大小,我在 Windows 上使用 ifort,我还尝试将 set KMP_STACKSIZE=xxx 传递给英特尔特定的堆栈大小减免.这有时会有所帮助并允许代码在我的循环中进一步前进,但最终并不能 ..
发布时间:2022-01-14 10:17:05 其他开发

OpenMP 在子程序中没有线程

我正在用 Fortran 编写一个矩阵乘法子程序.我正在使用英特尔 Fortran 编译器.我写了一个简单的静态调度并行do-loop.不幸的是,它只在一个线程上运行.代码如下: 子程序 MATMULT(A,B,C,L,M,N)真实*8 A,B,C整数 NCores、块、TID尺寸 A(L,N),B(L,M),C(M,N)参数(NCORS=8)块=(L/(NCORES+1))+1时间=0!$O ..
发布时间:2022-01-14 10:14:18 其他开发

使用 OpenMP 关键和有序

我对 Fortran 和 OpenMP 很陌生,但我正在努力了解自己的方向.我有一段代码用于计算我试图并行化的变异函数.但是,我似乎遇到了比赛条件,因为有些结果相差了千分之一左右. 问题似乎是减少.使用 OpenMP 缩减工作并给出正确的结果,但它们是不可取的,因为缩减实际上发生在另一个子例程中(我将相关行复制到 OpenMP 循环中进行测试).因此,我将减量放在 CRITICAL 部分中, ..
发布时间:2022-01-14 10:06:44 其他开发