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

visual-c++ - Visual C++ 2008:找不到 omp.h?/openMP 已设置

我已经使用项目设置启用了 openMP,但是当我执行 #include 时出现错误,文件不存在。我使用的是 Visual Studio 标准版,而不是 Express……还缺少什么?我发现的每个页面都只是说在项目设置中打开它,它会起作用。

0 投票
2 回答
673 浏览

c++ - 工作线程片刻后停止工作

我有一个使用 OpenMP 并行化的串行应用程序。我只是将以下内容添加到我的主循环中:

它似乎运作良好:一开始,我所有的工作线程都执行循环的迭代,一切都进行得很快,并且我有 100% 的 CPU 负载(在四核机器上)。然而,片刻之后,其中一个工作线程停止,并停留在_vcomp::PersistentThreadFuncvcomp90.dll(文件为vctools\openmprt\src\ttpool.cpp)调用的函数中,然后是另一个,等等......直到只有主线程仍在工作。

有人知道为什么会这样吗?这在执行了大约一半的迭代后开始发生。

0 投票
4 回答
2023 浏览

openmp - 英特尔 i7 上的 OpenMP

我在 i7 CPU 中遇到 openMP 问题。

我使用 openMP 只是为了并行一个“for”循环。算法在几台不同的 PC 上使用,并且没有任何问题。最近,我们尝试在 i7 系统上运行它,但遇到了问题。软件通常运行一段时间,几个周期后它报告“内存不足”,我们试图找到内存泄漏,但我们发现软件使用的堆栈大小太大 - 有很多 1Mb 线程没有关闭。不知何故,由 openMP 创建的线程都卡在堆栈中,并且内存被它们填满。

有没有人经历过这样的行为?代码非常简单,只是一个带有一些循环的“pragma omp parallel for”,在其他 PC 上也可以正常工作。

我正在使用带有内置 openMP 库的 Microsoft Visual C++ 9.0 编译器。

谢谢谢尔盖

0 投票
1 回答
382 浏览

performance - Visual Studio 2008 SP1 引入了运行时错误还是我疯了?

我一直在绞尽脑汁想弄清楚最新(非测试版)Visual Studio 2008 SP1 到底发生了什么:

我使用 OpenMP 构建的应用程序在调试器中运行速度非常慢,使 CPU 使用率达到 100%。当它们在调试器之外运行时,它只是运行缓慢(对于发布版本)。

我使用英特尔线程构建块库或我自己的线程团队实现构建的应用程序在调试器中的运行速度比在调试器外部运行时慢(对于发布版本)。

当我转到我的另一台没有安装 SP1 的开发机器时,情况就不同了。在调试器中或外部运行对程序性能没有影响。OpenMP 加速了我的应用程序,Thread Building Blocks 或我自己的线程团队代码(为了解决这个问题而仓促编写)。

这绝对没有对应用程序进行任何更改,只需在调试器 SP1 与常规 Visual Studio 的内部或外部运行它。

我在谷歌上没有找到任何关于这件事的信息,所以我伸出脖子说些什么,希望其他人可能会意识到这正在发生在他们身上。要么,要么我看到的东西。

0 投票
4 回答
6158 浏览

c++ - 关闭 OpenMP

在我的 C++ 程序中,我想运行它的可执行文件,有时使用 OpenMP,有时不使用 OpenMP(即多线程或单线程)。我正在考虑以下两种情况中的任何一种,我的代码如何使用 OpenMP:

(1) 假设我的代码只有#include <omp.h>和 OpenMP 指令。

(2) 与 (1) 相同,我的代码进一步调用 OpenMP 函数,如omp_get_thread_num().

为了不让不同的代码用于不同的运行,这是使用一些自定义预编译器变量来保护 OpenMP 在我的代码中出现的唯一方法吗?

谢谢并恭祝安康!

0 投票
3 回答
2333 浏览

macos - 为什么我应该在 OpenMP 上使用 Grand Central Dispatch?

Apple 在 Snow Leopard 中引入了 Grand Central Dispatch(一个线程池),但没有说明为什么应该在 OpenMP 上使用它,OpenMP 是跨平台的,也适用于 Leopard。它们都非常易于使用并且在功能上看起来相似。那么,有什么想法吗?

0 投票
2 回答
342 浏览

pthreads - 在集群中创建线程

我想知道有什么方法可以在其他节点上创建线程而不在节点上启动进程。例如:-假设我有 5 个节点的集群,我在 node1 上运行应用程序。这会创建 5 个线程,我希望线程不要在同一个系统中创建,而是跨集群创建,比如 1 个节点 1 个线程类型。有什么办法可以做到这一点,还是更多地取决于负载调度程序,openMP 会做类似的事情吗?

如果问题有任何歧义,请告诉我,我会澄清的。

0 投票
7 回答
205018 浏览

multithreading - omp 并行与 omp 并行

这两者有什么区别?

[一种]

[乙]

0 投票
1 回答
502 浏览

parallel-processing - Fortran90 OpenMP 中的重要私有数据

我有一段 Fortran90 程序应该与 OpenMP 并行。

我不确定的是复杂的数据结构是否可以为每个线程私有(以及应该如何完成 - 是否firstprivate正确?)。在上面的示例代码中,targets是一个有点复杂的用户定义类型,具有同样复杂的子字段。例如,targets(s)%ham%op(1)%pulse是指向某个数组元素的指针pulses。此外,还targets(s)%work包含在快速傅里叶变换中用作工作数组的分配空间。

显然,每个线程都需要维护 和 的独立副本,并独立维护两者targets之间pulses的指针。在我看来,这可能对 OpenMP 的自动内存管理提出了太多要求。这是正确的,还是应该开箱即用?

当然,另一种选择是在每个线程中创建原始数据的副本(存储在一个数组中),并在对prop.

0 投票
1 回答
410 浏览

visual-studio-2005 - Visual Studio 2005 中的 OpenMP

我正在尝试使用 OpenMP 在 Visual Studio 2005 Professional 中创建并行 for 循环。我已经包含了 omp.h 并指定了 /openmp 编译器标志。但是,我什至无法编译最简单的并行 for 循环。

以上在#pragma 行产生编译器错误C3005。

谷歌并没有太多帮助。我只发现一个不起眼的日本网站,其中一位用户有类似的问题。没有提到决议。

一个标准的并行块编译得很好。

直到您尝试添加一个 for 循环。

以上导致编译器错误 C3001。'for' 似乎让编译器感到困惑,但它不应该如此。有任何想法吗?