问题标签 [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 投票
6 回答
8324 浏览

parallel-processing - 糟糕的性能 - 一个简单的开销问题,还是存在程序缺陷?

我在这里有一个我理解的相对简单的 OpenMP 构造。问题在于,与 2 个线程相比,1 个线程的程序运行速度要快 100-300 倍。该计划的 87% 用于gomp_send_wait(),另外 9.5% 用于gomp_send_post.

该程序给出了正确的结果,但我想知道代码中是否存在导致某些资源冲突的缺陷,或者仅仅是线程创建的开销对于块大小为 4 的循环来说完全不值得。 p范围从 17 到 1000,取决于我们模拟的分子的大小。

我的数字是针对最坏情况的,当 p 为 17 且块大小为 4 时。无论我使用静态、动态还是引导式调度,性能都是相同的。使用p=150和块大小75,程序仍然比串行慢 75x-100x。

0 投票
1 回答
201 浏览

c++ - 使用 OpenMP 的阻塞函数

我有一个 GUI 应用程序,它从第二个线程监听网络端口。我在看 OpenMP,我想知道是否有简单的方法来创建这样的线程。我正在搜索文档,但 OpenMP 站点浏览起来不是很方便。有人可以帮忙吗?

0 投票
6 回答
20185 浏览

multithreading - 并行化:pthreads 还是 OpenMP?

科学计算领域的大多数人在共享内存并行化方面使用 OpenMP 作为准标准。

是否有任何理由(除了可读性)在 pthreads 上使用 OpenMP?后者似乎更基本,我怀疑它可能更快更容易优化。

0 投票
4 回答
533 浏览

openmp - 将并行程序转换为集群程序。从 OpenMP 到?

我想编写一个代码转换器,它采用基于 OpenMP 的并行程序并在集群上运行它。

我该如何解决这个问题?我使用哪些库?如何为此设置一个小型集群?

我发现在互联网上很难找到关于集群计算的好资料。

编辑:如果不可能,那么英特尔是如何做到的?英特尔编译器似乎完全符合我的要求。我没有要运行的任何特定应用程序。我想编写“转换器/编译器”,而不是应用程序。我知道共享内存与分布式内存不同,但必须有一种同步内存的方法,如果不是针对所有情况,那么对于某些特定情况,即使这意味着应用程序是使用自定义构造编写的。

0 投票
4 回答
32793 浏览

c++ - 用于最小值、最大值、中值、平均值的 OpenMp C++ 算法

我在 Google 上搜索提供一些简单 OpenMp 算法的页面。可能有一个例子可以从一个巨大的数据数组中计算最小值、最大值、中值、平均值,但我无法找到它。

至少我通常会尝试将每个核心的数组分成一个块,然后进行一些边界计算以获得完整数组的结果。

我只是不想重新发明轮子。


附加说明:我知道有成千上万的例子可以使用简单的归约。例如计算 PI。

但是当这些算法不可用时,几乎没有减少算法的例子。

0 投票
6 回答
790 浏览

c - 在运行计算密集型任务时将数据保存到磁盘的有效方法

我正在开发一个非常占用 cpu 的科学软件(它的 proc 绑定),但它需要经常将数据写入磁盘(i/o 绑定)。

我正在为此(OpenMP)添加并行化,我想知道解决写入磁盘需求的最佳方法是什么。模拟没有理由在 HDD 上等待(这就是它现在正在做的事情)。

我正在为此寻找“最佳实践”,而速度是我最关心的(这些可能是非常长的模拟)。

谢谢~亚历克斯

第一个想法:

有一个单独的进程实际写入磁盘,因此模拟有两个进程:一个是 CPU 密集型(模拟),一个是 IO 密集型(写入文件)。这听起来很复杂。

可能是管道/缓冲区?我对这些有点陌生,所以也许这可能是一个可能的解决方案。

0 投票
3 回答
513 浏览

c++ - 将多个可执行文件转换为单个应用程序

我有三个共享大量源代码和数据的遗留应用程序。用户可以随时执行这些应用程序中的每一个的多个实例,例如,一次可以激活十几个混合应用程序执行。这些应用程序目前通过共享内存和消息传递技术进行通信,以便它们可以保持公共光标定位等。这些应用程序主要用 C++ 编写,使用 Qt,总共运行约 500 万行代码。只有一些现有代码是线程安全的。

我想将这三个可执行文件合并到一个可执行文件中,并使用多线程功能来允许三个功能分支中的每一个的多个实例同时执行。有人建议我研究 Boost 提供的一些特性,例如共享指针,并使用 OpenMP 来协调多个线程的整体执行。

任何有关如何进行的评论都将受到赞赏,特别是有关解决此类重构问题的最佳方法的参考。

0 投票
5 回答
20957 浏览

c++ - 在没有 OpenMP 的机器上忽略它

我有一个使用 OpenMP 的 C++ 程序,它将在可能安装或未安装 OpenMP 的几台机器上运行。

我怎样才能让我的程序知道机器是否没有 OpenMP 并忽略那些#include <omp.h>OpenMP 指令(如#pragma omp parallel ...)和/或库函数(如tid = omp_get_thread_num();)?

0 投票
3 回答
8078 浏览

c++ - 如何判断 OpenMP 是否适用于我的 C++ 程序

我正在使用 OpenMP 对嵌套循环进行多线程处理。由于对这些东西不熟悉,我不确定我是否以正确的方式使用 OpenMP,以便它实际上可以进行并行编程。所以我想知道我是否可以测量我使用 OpenMP 的 C++ 程序的性能,这样我就可以知道它确实有效并且我在正确的轨道上?就像有多少线程并行运行以及每个线程完成需要多长时间。谢谢并恭祝安康!

0 投票
6 回答
69700 浏览

linux - 如何在 Linux 上检查 OpenMP 的版本

我想知道如何在 Linux 远程机器上检查 OpenMP 的版本?

我也不知道它安装在哪里。