openmp相关内容

openMP 嵌套并行 for 循环与内部并行 for

如果我像这样使用嵌套并行 for 循环: #pragma omp parallel for schedule(dynamic,1)for (int x = 0; x 这相当于: for (int x = 0; x 除了创建新任务之外,外部并行是否可以做任何其他事情? 解决方案 如果您的编译器支持 OpenMP 3.0,您可以使用 collapse 子句: #pragma om ..
发布时间:2021-12-30 21:08:30 C/C++开发

如何使用 OpenMP 通过 C++ std::list 并行化 for 循环?

我想使用 OpenMP 以并行方式遍历 std::list 中的所有元素.循环应该能够改变列表的元素.有没有一个简单的解决方案?当迭代器是随机访问迭代器时,OpenMP 3.0 似乎支持并行 for 循环,否则不支持.无论如何,我更愿意使用 OpenMP 2.0,因为我无法完全控制哪些编译器可供我使用. 如果我的容器是一个向量,我可能会使用: #pragma omp parallel fo ..
发布时间:2021-12-30 21:06:22 C/C++开发

OpenMP:嵌套并行化有什么好处?

据我了解,#pragma omp parallel 及其变体基本上是在多个并发线程中执行以下块,这与 CPU 的数量相对应.当有嵌套并行化时 - 并行内并行化,并行函数内并行化等 - 内部并行化会发生什么? 我是 OpenMP 的新手,我想到的情况可能相当简单 - 将向量与矩阵相乘.这是在两个嵌套的 for 循环中完成的.假设 CPU 的数量小于向量中的元素数量,尝试并行运行内部循环有什么好 ..
发布时间:2021-12-30 21:06:12 C/C++开发

不同主机上的 OpenMP 程序

我想知道是否可以在多个主机上运行 OpenMP 程序.到目前为止,我只听说过可以在多个线程上执行但都在同一台物理计算机中执行的程序.是否可以在两个(或更多)客户端上执行程序?我不想使用 MPI. 解决方案 是的,可以在分布式系统上运行 OpenMP 程序,但我怀疑它是否在每个用户的范围内.ScaleMP 提供了 vSMP——一种昂贵的商业管理程序软件,允许在许多联网主机上创建虚拟 NUMA ..

OpenMP 和 Python

我在为共享内存机器(在 C 和 FORTRAN 中)编写 OpenMP 以执行简单的任务,如矩阵加法、乘法等方面有经验.(看看它如何与 LAPACK 竞争).我对 OpenMP 的了解足以执行简单的任务,而无需查看文档. 最近,我的项目转向了 Python,除了绝对的基础知识之外,我对 Python 没有任何经验. 我的问题是: 在 Python 中使用 OpenMP 的最简单方 ..
发布时间:2021-12-30 21:02:10 Python

对数时间并行减少

给定 n 部分和,可以在 log2 并行步骤中对所有部分和进行求和.例如,假设有八个线程和八个部分和:s0, s1, s2, s3, s4, s5, s6, s7.这可以在 log2(8) = 3 像这样的连续步骤中减少; thread0 thread1 thread2 thread4s0 += s1 s2 += s3 s4 += s5 s6 +=s7s0 += s2 s4 += s6s0 += ..
发布时间:2021-12-30 21:00:26 其他开发

在为顺序运行优化的程序上使用 openMP 后没有性能提升

我已经尽可能多地优化了我的顺序运行功能.当我使用 openMP 时,我看不到性能的提高.我在一台 1 核的机器和一台 8 核的机器上尝试了我的程序,性能是一样的. 将年份设置为 20,我有 1 核:1 秒. 8 核:1 秒. 将年份设置为 25 我有 1 核:40 秒. 8 核:40 秒. 1 核机器:我的笔记本电脑的 intel core 2 duo 1.8 GHz,ubu ..
发布时间:2021-12-30 20:59:38 其他开发

节和任务 openmp 的区别

OpenMP 之间有什么区别: #pragma omp 并行部分{#pragma omp 部分{fct1();}#pragma omp 部分{fct2();}} 和: #pragma omp parallel{#pragma omp 单曲{#pragma omp 任务fct1();#pragma omp 任务fct2();}} 我不确定第二个代码是否正确... 解决方案 任务和节之 ..
发布时间:2021-12-30 20:58:34 其他开发

OpenMP 程序比顺序程序慢

当我尝试以下代码时 double start = omp_get_wtime();长我;#pragma omp 并行用于for (i = 0; i 执行时间约为 168 秒,而顺序版本仅花费 20 秒. 我还是并行编程的新手.我怎样才能获得比顺序版本更快的并行版本? 解决方案 随机数生成器 rand(3) 使用全局状态变量(隐藏在 (g)libc 实现中).从多个线程访问它们会 ..
发布时间:2021-12-30 20:57:23 其他开发

MacOS、CMake 和 OpenMP

我正在使用 Homebrew 的最新 CMake (3.9.3) 以及同样来自 Brew 的 LLVM 5.0.0,因为这里的 Clang 支持 OpenMP. 这适用于带有 LLVM 5 的 CMake 3.8.2. 在我的 CMakeLists.txt 中,我有 find_package( OpenMP ) 以后我想做 if( OpenMP_CXX_FOUND ) 然而,C ..
发布时间:2021-12-26 21:39:06 其他开发

如何在 CMake 的 try_compile 函数中为 OpenMP 设置链接器标志

我想验证当前编译器是否可以使用 openmp 支持进行构建.该应用程序确实部署在各种 unix 系统上,其中一些可能有旧版本的 OpenMP,我想测试重要的 OpenMP 功能.所以,我想构建一个包含一些 OpenMP 调用的测试源文件. 因此,我创建了一个非常简单的测试文件,并尝试使用 CMake 中的 try_compile 函数.不幸的是,它似乎没有正确应用 -fopenmp 链接器标 ..
发布时间:2021-12-26 21:32:16 其他开发

当终止条件取决于来自不同部分的更新时,为什么 OMP 并行部分中的 while 循环无法终止

下面的 C++ 代码是否合法,还是我的编译器有问题?代码使用 编译成共享库 gcc 版本 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) 和 openMP,然后通过 R 2.15.2 调用. int it=0;#pragma omp 并行部分共享(它){#pragma omp 部分{std::cout 我获得了以下输出(对 2 个线程的交织输出表示歉意, ..
发布时间:2021-12-26 18:41:18 C/C++开发

OpenMP while 循环

我有一个运行多次迭代的代码,只有在满足条件时,才会保存迭代的结果.这很自然地表示为 while 循环.我试图让代码并行运行,因为每个实现都是独立的.所以我有这个: while(nit 这很好用……但是每次实现后都有一个障碍,这意味着如果我在并行块内做的事情在一次迭代中比其他迭代花费的时间长,我的所有线程都在等待它完成, 而不是继续下一次迭代. 有没有办法避免这个障碍,让线程继续工作?我平 ..
发布时间:2021-12-26 18:19:27 其他开发

C++:Linux 中的时序(使用 clock())不同步(由于 OpenMP?)

在程序的顶部和结尾,我使用 clock() 来计算我的程序需要多长时间才能完成.不幸的是,它似乎只需要报告的一半时间.我用“时间"命令仔细检查了这一点. 我的程序报告:45.86s 内完成 时间命令报告:真正的 0m22.837s用户 0m45.735s系统0m0.152s 用我的手机计时,它在 23 秒内完成(又名:“真实"时间).“用户"时间是所有线程的总和,这很有意义,因为 ..
发布时间:2021-12-23 19:30:52 C/C++开发

在 C++ OpenMP 代码中测量执行时间

我正在运行 .cpp 代码 (i) 以顺序样式和 (ii) 使用 OpenMP 语句.我正在尝试查看时差.为了计算时间,我用这个: #include .....主要的(){clock_t 开始,结束;开始 = 时钟();...完成=时钟();处理时间 = (double(finish-start)/CLOCKS_PER_SEC);} 时间在代码的顺序(上面)运行中非常准确.运行这个大约需要 8 ..
发布时间:2021-12-23 19:11:02 C/C++开发