问题标签 [openmp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4046 浏览

fortran - Fortran 中的 OpenMP

我很少使用 fortran,但是我的任务是让遗留代码重写它以并行运行。我正在使用 gfortran 作为我的编译器选择。我在https://computing.llnl.gov/tutorials/openMP/以及其他 一些资源中找到了一些优秀的资源。

我的问题是,在我添加任何 OpenMP 指令之前,如果我只是编译遗留程序:

gfortran Example1.F90 -o Example1

一切正常,但即使不添加指令也要打开 openmp 编译器选项:

gfortran -openmp Example1.F90 -o Example1

当我运行旧程序时,会出现分段错误。使用我编写的较小的测试程序,我已经成功地编译了其他在多个线程上运行的带有 -openmp 的程序,但是我很困惑为什么单独启用该选项并且没有指令会导致段错误。

如果我的问题相当简单,我深表歉意。我可以发布代码,但它相当长。当我分配初始值时它会出错:

对“uconsold”的第一个分配工作正常,第二个似乎是错误的根源,因为当我注释掉该行时,接下来的几行会愉快地执行,直到再次使用“uconsolde”。

感谢您在这件事上提供的任何帮助。

0 投票
5 回答
7373 浏览

multicore - 多核编程。Boost 的 MPI、OpenMP、TBB 还是其他?

我完全是多核编程的新手,但我确实知道如何编程 C++。

现在,我正在寻找多核编程库。我只是想尝试一下,只是为了好玩,现在,我找到了 3 个 API,但我不确定我应该坚持哪一个。现在,我看到了 Boost 的 MPI、OpenMP 和 TBB。

对于任何使用过这 3 个 API(或任何其他 API)的人,您能告诉我它们之间的区别吗?是否有任何因素需要考虑,例如 AMD 或 Intel 架构?

0 投票
3 回答
4940 浏览

xcode - 雪豹的 OpenMP 链接器库?

目前,我正在 Snow Leopard 上的 XCode 3.2.2 上试用 OpenMP:

我还没有包含任何链接库,所以链接器抱怨:

“_omp_get_thread_num”,引用自:main.o 中的 _main
“_omp_get_num_threads”,引用自:main.o 中的 _main

好的,好的,没问题,我在现有的框架中看一下,寻找openmp或omp之类的关键字……问题来了,链接库在哪里?或者我应该说,openMP 的链接库的名称是什么?是dylib,框架还是什么?还是我需要先从某个地方得到它?

0 投票
3 回答
108 浏览

synchronization - 编译指示内部的同步构造

我有一个程序块,例如:

我尝试过并行化内循环和外循环,并将 iCount 放在关键区域。并行化此的最佳方法是什么?如果我用 omp single 或 omp atomic 包装 iCount,那么代码会给出一个错误,我发现在 omp for 中这将是无效的。我想我正在添加许多无关的东西来并行化这一点。需要一些建议...

谢谢,

萨彦

0 投票
1 回答
6616 浏览

c++ - OpenMP num_threads(1) 比没有 OpenMP 执行得更快

我在各种情况下运行了我的代码,这导致了我认为奇怪的行为。我的测试是在带有 HT 的双核英特尔至强处理器上进行的。

没有 OpenMP '#pragma' 语句,总运行时间 = 507 秒

使用 OpenMP '#pragma' 语句指定 1 个核心,总​​运行时间 = 117 秒

使用 OpenMP '#pragma' 语句指定 2 个核心,总​​运行时间 = 150 秒

使用 OpenMP '#pragma' 语句指定 3 个核心,总​​运行时间 = 157 秒

使用 OpenMP '#pragma' 语句指定 4 个核心,总​​运行时间 = 144 秒

我想我不明白为什么注释掉我的 openmp 行会使程序在没有 openmp 的 1 个线程和有 openmp 的 1 个线程之间减慢这么多。

我要改变的只是:

无论如何,如果有人知道为什么会发生这种情况,请告诉我!

谢谢你的帮助,

布雷特

编辑:我将在这里解决一些评论

我正在使用 num_threads(1)、num_threads(2) 等。

经过进一步调查,事实证明,根据代码中是否包含“schedule(guided)”行,我的结果不一致。

-当我使用 schedule(guided) 行时,无论线程数如何,我都会生成最快的解决方案。-当我使用默认调度程序时,我的结果明显变慢并且值不同 -增加线程不会获得调度(引导)改进 -没有调度(引导)我通过添加线程获得改进

我想我还没有找到足够好的描述 schedule(guided) 为我做了什么,我知道它试图拆分循环,以便首先发生最耗时的迭代,这应该产生最少的影响一个线程等待其他线程完成迭代的时间。

看来,对于我的 ~900 次迭代循环,当我使用 schedule(guided) 时,我只处理 ~200 次迭代,而没有 schedule(guided) 我正在处理所有 900 次迭代。有什么想法吗?

0 投票
2 回答
3513 浏览

c++ - boost RNG的线程安全

我有一个循环,应该通过插入一个 openmp pragma 很好地并行化:

(除非我犯了一个错误,每次执行都完全不依赖于其他人。抱歉,没有插入所有代码)。

但是我的问题是 - boost RNG 线程安全吗?他们似乎指的是 gcc 的 gcc 代码,因此即使 gcc 代码是线程安全的,其他平台也可能并非如此。

0 投票
2 回答
234 浏览

multithreading - 多个线程之间的共享列表是竞争条件吗?

我有一些通常运行良好的多线程代码,但它经常会中断。我试图查明问题,但使用 OpenMP 使这变得更加困难(问题不会在串行中发生)。我知道对变量(竞争条件)的多次访问经常会使程序崩溃。

我有一个在多个线程之间共享的列表,我很好奇该列表上的 push_back() 是否是竞争条件的候选者,因此每隔一段时间就会使我的程序崩溃?如果是这样,有没有关于如何处理这个问题的建议?
- 速度是最重要的
- 我知道 using#pragma omp critical可以解决竞争条件,但可能会减慢应用程序的速度(有两个列表,所以我需要一个关键的而不是原子的)。

我不确定的唯一原因是因为我使用 stl 容器运行了几个测试,但从未让测试代码崩溃。

任何建议将不胜感激!
先感谢您,

0 投票
2 回答
1526 浏览

c - 顺序运行的 openmp 部分

我有以下代码:

根据 Zoom 分析器,创建了两个线程,一个线程执行两个部分,另一个线程只是阻塞!

有没有人遇到过这样的事情?(是的,我确实有一台双核机器)。

0 投票
4 回答
1088 浏览

c++ - C/C++ 中的数据并行库

我有一个 C# 原型,它是大量数据并行的,并且我使用 .NETv4 中的 Parallel.For 构造实现了非常成功的数量级加速。现在我需要用本机代码编写程序,我想知道我的选择是什么。我更喜欢在各种操作系统和编译器之间具有某种可移植性的东西,但是如果迫在眉睫,我可以使用 Windows/VC++ 的东西。

我看过 OpenMP,它看起来很有趣,但我不知道这是否被其他程序员视为一个好的解决方案。我也喜欢我可以查看的其他便携式库的建议。

0 投票
3 回答
9202 浏览

fortran - 如何以惯用方式打破嵌套并行(OpenMP)Fortran循环?

这是顺序代码:

除了:

i只要找到一些 ,循环上的迭代顺序可能是任意的result(只要它满足,它是否从运行更改为运行都没有关系"some_condition")。