openmp相关内容

gcc openmp 线程重用

我正在使用 gcc 的 openmp 实现来尝试并行化程序.基本上,任务是添加 omp pragma 以在找到 友好数字的程序上获得加速.> 给出了原始的串行程序(除了我在最后添加的3行注释外,如下所示).我们必须首先并行化外循环,然后才并行化内循环.外循环很容易,对于给定数量的处理器,我接近理想的加速.对于内部循环,我的性能比原始串行程序差得多.基本上我想做的是减少 sum 变量. 查看 ..
发布时间:2021-12-30 21:41:03 其他开发

OpenMP 中的插入排序

我正在尝试为插入排序编写 OpenMP 解决方案,但我在使其并行运行并给出正确结果时遇到问题:).有什么办法可以让插入排序并行运行. 这是我的代码: void insertsort(int *A, int num){//时钟_t 开始,停止;////开始=时钟();国际 k;#pragma omp parallel for shared(A) private(k)for(int n = 1 ..

使用 OpenMP 计算直方图

我想并行化这段代码以获得最佳性能.“直方图"存储某种颜色的外观数量(有 10 种不同的颜色,因此直方图的大小为 10).“img"是存储特定图像信息的数组.在 img 的每个索引中都存储了一个颜色(整数值,范围 0..9).这是代码: for( i=0; i 我试过了,但性能太差(比串行执行更糟糕): #pragma omp parallel for schedule(static, N1/ ..
发布时间:2021-12-30 21:36:57 其他开发

为什么我应该使用减少而不是原子变量?

假设我们想对 OpenMP 循环中的某些内容进行计数.比较减少 int counter = 0;#pragma omp 用于减少(+:计数器)为了 (...) {...计数器++;} 原子增量 int counter = 0;#pragma omp for为了 (...) {...#pragma omp 原子计数器++} 原子访问立即提供结果,而减少仅在循环结束时假定其正确值.例如,减少不 ..
发布时间:2021-12-30 21:36:42 其他开发

如何分析 OpenMP 瓶颈

我有一个由 OpenMP 并行化的循环,但由于任务的性质,有 4 个 critical 子句. 分析加速并找出哪个关键子句(或者可能是非关键子句(!))在循环中占用最多时间的最佳方法是什么? 我使用 Ubuntu 10.04 和 g++ 4.4.3 解决方案 OpenMP 包括用于测量时序性能的函数 omp_get_wtime() 和 omp_get_wtick() (此处的文 ..
发布时间:2021-12-30 21:34:50 C/C++开发

OpenMP 4 中的任务依赖

以下代码基于 OpenMP 4.0 规范: out 和 inout 依赖类型.生成的任务将是所有先前生成的兄弟任务的依赖任务引用 in、out 或 inout 中的至少一个列表项依赖类型列表. 这意味着 task3 变得依赖于 task2.对?但这没有意义!为什么输入输出依赖任务应该是输入依赖任务的依赖? 我需要做什么才能让他们独立?p.s:在 Linux 上使用 g++ 4.9 ..
发布时间:2021-12-30 21:32:35 C/C++开发

您使用哪些并行编程 API?

考虑到当今多核和多处理硬件的巨大重要性,试图了解人们目前实际上是如何编写并行代码的.对我来说,占主导地位的范式似乎是 pthreads(POSIX 线程),它在 Linux 上是原生的,在 Windows 上可用.HPC 人员倾向于使用 OpenMP 或 MPI,但在 StackOverflow 上这些似乎并不多.或者您是否依赖 Java 线程、Windows 线程 API 等而不是可移植标准?在 ..
发布时间:2021-12-30 21:29:12 其他开发

OpenMP 如何在reduction 子句中使用原子指令?

OpenMP 如何在归约构造函数中使用 atomic 指令?完全不依赖原子指令吗? 比如下面代码中的变量sum是不是用atomic '+'操作符累加的? #include #include 使用命名空间标准;int main(){整数米 = 1000000;向量v(m);for (int i = 0; i 解决方案 OpenMP如何在reduce内部使用原子指令?不是吗完全依赖原 ..
发布时间:2021-12-30 21:24:40 C/C++开发

并行化广度优先搜索

我只是自学了一些 OpenMP,这可能很愚蠢.基本上,我试图在 C++ 中并行化广度优先搜索程序,每个节点都需要很长时间来处理.这是一个示例代码: queueq;q.push(头);而 (!q.empty()) {qSize = q.size();for (int i = 0; i 处理函数 doStuff() 非常昂贵,我想对其进行并行化.但是,如果我通过将 #pragma omp par ..
发布时间:2021-12-30 21:23:59 C/C++开发

并行计算——混乱的输出?

我正在尝试学习并行计算的基础知识,但我的计算机遇到了问题.看看我下面的代码.基本上,我想打印出“Hello World!"这一行.对于我的计算机拥有的每个核心.我的电脑有四个核心,所以它应该打印出那行四次.如果我使用注释掉的 'cout' 行而不是 'printf' 行,输出将全部混乱.这是因为 '\n' 转义命令与“Hello World!"是分开执行的,所以新行输出会随机出现.'printf' ..
发布时间:2021-12-30 21:23:29 C/C++开发

系统地并行化 fortran 2008 `do concurrent`,可能使用 openmp

fortran 2008 do concurrent 构造是一个 do 循环,它告诉编译器没有迭代影响任何其他循环.因此可以安全地并行化. 一个有效的例子: 程序主隐式无整数 :: i整数,维度(10):: 数组做并发(我= 1:10)数组(i) = i结束做结束程序主 可以以任何顺序进行迭代.您可以阅读有关它的更多信息 rlwhbh2rlwh2afwh2afgwh2afwh2afgwh ..
发布时间:2021-12-30 21:22:11 其他开发

OpenMP:局部变量是否自动私有?

#pragma omp parallel{整数 x;//每个线程私有?}#pragma omp 并行用于for (int i = 0; i 谢谢! 附言如果局部变量是自动私有的,使用 private 子句有什么意义? 解决方案 是的,局部变量是自动私有的. 存在 private 子句的原因是 您不必更改代码. 没有private 子句的唯一并行化以下代码的方法 in ..
发布时间:2021-12-30 21:20:39 C/C++开发

使用 openmp 并行 for 循环获得出乎意料的良好性能

我在之前的评论(尤其是@Zboson)之后编辑了我的问题以提高可读性 我一直遵循并观察到传统观点,即 openmp 线程的数量应该与机器上的超线程数量大致匹配,以获得最佳性能.然而,我在我的新笔记本电脑上观察到了奇怪的行为,它配备了英特尔酷睿 i7 4960HQ,4 核 - 8 线程.(请参阅此处的英特尔文档) 这是我的测试代码: #include #include #include ..
发布时间:2021-12-30 21:14:46 其他开发

omp 并行与 omp 并行

这两者有什么区别? [A] #pragma omp parallel{#pragma omp forfor(int i = 1; i [B] #pragma omp parallel forfor(int i = 1; i 解决方案 我认为没有什么区别,一个是另一个的捷径.尽管您的确切实现可能会以不同的方式处理它们. 合并的并行工作共享结构是一种快捷方式指定包含一个工作共 ..
发布时间:2021-12-30 21:11:05 其他开发

gfortran openmp 分段错误发生在基本 do 循环上

我有一个程序可以将粒子分布到细胞内的云网格中.只需遍历粒子总数 (Ntot) 并填充 256^3 网格(即每个粒子分布在 8 个单元上). % gfortran -fopenmp cic.f90 -o ./cic 哪个编译得很好.但是当我运行它 (./cic) 时,我遇到了分段错误.我的循环是一个经典的 omp do 问题.当我不在 openmp 中编译该程序时,它可以工作. !$omp 并 ..
发布时间:2021-12-30 21:10:21 其他开发