53得票4回答
在Mac OS X(Sierra和Mojave)中启用clang的OpenMP支持

我使用的是 Mac OS X Sierra 操作系统,发现 clang (LLVM 版本 8.1.0 (clang-802.0.38)) 不支持 OpenMP: 当我运行 clang -fopenmp program_name.c 命令时,会出现以下错误: clang: error: un...

51得票9回答
OpenMP中的SECTIONS指令如何分配任务?

在使用 omp sections 时,OpenMP会将线程分配到 sections 内部的块中,还是每个线程都分配到每个 section 中? 当 nthreads == 3 时:#pragma omp sections { #pragma omp section { ...

48得票4回答
OpenMP set_num_threads() 不起作用。

我正在使用C++中的OpenMP编写并行程序。 我想使用omp_set_num_threads()控制程序中线程的数量,但它不起作用。#include <iostream> #include <omp.h> #include "mpi.h" using namesp...

45得票6回答
并行化:使用pthreads还是OpenMP?

在科学计算中,大多数人在共享内存并行化方面使用OpenMP作为准标准。 除了可读性之外,是否有任何理由选择OpenMP而不是pthreads?后者似乎更基础,我怀疑它可能更快且更容易优化。

45得票5回答
我可以安全地使用C++11和OpenMP吗?

OpenMP标准仅支持C++ 98 (ISO/IEC 14882:1998)。这意味着没有标准支持在C++03甚至C++11下使用OpenMP。因此,任何使用C++ >98和OpenMP的程序都是超出标准范围的,这意味着即使它在某些条件下工作,也不太可能具有可移植性,而且绝对不能保证。 对于...

43得票2回答
理解OpenMP中collapse子句

我发现了一个带有collapse子句的OpenMP代码,这对我来说是新的。我试图理解它的意义,但我不认为我完全掌握了它的含义;我找到的一个定义是: COLLAPSE:指定嵌套循环中有多少个循环应折叠成一个大迭代空间,并根据schedule子句进行划分。所有相关循环中迭代的顺序决定了折叠...

42得票5回答
在OpenMP中减少数组

我正在尝试并行化以下程序,但不知道如何在数组上进行约简。我知道这是不可能的,但是否有替代方法?谢谢。(我添加了对m的约简,但这是错误的,希望能得到如何解决它的建议。)#include <iostream> #include <stdio.h> #include <...

40得票3回答
Helgrind(Valgrind)和OpenMP(C):如何避免误报?

Valgrind线程错误检测工具Helgrind的文档可以在这里找到。 文档警告说,如果您使用GCC编译OpenMP代码,则GCC的OpenMP运行时库(libgomp.so)将由于使用原子机器指令和Linux futex系统调用而导致大量错误的数据竞争报告,而不是POSIX pthread...

40得票3回答
多线程是否强调内存碎片化问题?

描述 使用openmp的parallel for构造函数,对4个或更多线程进行随机内存分配和释放时,在测试程序的后半段运行期间,程序似乎开始泄漏大量内存。因此,它的消耗内存从1050MB增加到1500MB或更多,而实际上并没有利用额外的内存。 由于valgrind没有显示任何问题,我必须假...

39得票1回答
OpenMP 动态调度 vs 导向式调度

我正在研究OpenMP的调度,特别是不同类型。我了解每种类型的一般行为,但更清晰的解释有助于选择何时在dynamic和guided调度之间进行选择。 Intel的文档描述了dynamic调度: 使用内部工作队列,将循环迭代的块大小分配给每个线程。当一个线程完成时,它从工作队列的顶部检...