openmp相关内容

如何在`GCC`中获取`c`程序的抽象语法树

如何在gcc中获取c程序的抽象语法树? 我正在尝试将 OpenMP pragma 自动插入到输入 c 程序中. 我需要分析嵌套的 for 循环以查找依赖项,以便我可以插入适当的 OpenMP 编译指示. 所以基本上我想做的就是遍历分析输入c程序的抽象语法树. 我如何实现这一目标? 解决方案 您需要完整的数据流才能找到“依赖项".然后您将需要实际插入 OpenMP 调用. 您想 ..
发布时间:2021-11-26 18:01:46 其他开发

使用 OpenMP 的程序崩溃,仅限 x64

当我在 Release x64 中构建它时,下面的程序崩溃(所有其他配置都运行良好). 是我做错了还是 OpenMP 问题?高度赞赏有充分根据的解决方法. 使用以下代码重现构建项目(控制台应用程序).使用 Release x64 配置中的/openmp 和/GL 以及(/O1 或/O2 或/Ox)选项构建.那就是 OpenMP 支持和 C++ 优化必须打开.结果程序应该(不应该)崩溃. ..
发布时间:2021-11-25 07:20:17 C#

是否可以使用 openmp 减少数组?

OpenMP 本身是否支持减少表示数组的变量? 这会像下面这样工作...... float* a = (float*) calloc(4*sizeof(float));omp_set_num_threads(13);#pragma omp 并行缩减(+:a)for(i=0;i 理想情况下,omp 并行会有类似的东西,如果您有足够多的线程使其有意义,那么累积将通过二叉树发生. 解决方 ..
发布时间:2021-11-18 05:07:07 其他开发

如何使用 OpenMP 并行化这个数组和?

如何使用 OpenMP 使这个数组总和并行化?什么应该共享,什么应该私有? 这里是数组 sum 的代码.. main(){int a[10], i, n, sum=0;printf("输入元素个数");scanf("%d",&n);printf("输入元素");for(i=0;i 解决方案 你应该像这样使用reduction: #pragma omp parallel for red ..
发布时间:2021-11-18 03:07:14 其他开发

Intel OpenMP 库通过设置 KMP_AFFINITY=scatter 显着降低了 AMD 平台上的内存带宽

对于内存受限的程序,使用多个线程并不总是更快,比如与内核数量相同的线程,因为线程可能会竞争内存通道.通常在双插槽机器上,线程越少越好,但我们需要设置亲和性策略,将线程分布在插槽之间以最大化内存带宽. Intel OpenMP 声称 KMP_AFFINITY=scatter 是为了达到这个目的,相反的值“compact"是将线程尽可能靠近.我已经使用 ICC 构建了用于基准测试的 Stream ..
发布时间:2021-10-28 20:30:21 其他开发

无法对 long double 数据类型进行 openMP 矢量化操作吗?

我正在学习 openMP,以我有限的知识,我的代码被并行化了.我正在尝试使用 openMP 矢量化技术改进此代码.但是在浏览相关阅读材料时(link),我发现这是不可能的对 long double 数据类型进行矢量化操作.有人可以提供有关原因的信息并提出除降低精度之外的解决方案吗? 链接中的内容如下:“避免SIMD硬件不支持的操作.Linux上(80位)长双精度算术,余数运算符“%"是SIM ..
发布时间:2021-09-29 19:38:22 其他开发

Visual Studio 2019 LLVM 中的 OpenMP 链接错误

我一直在尝试使用集成到 Visual Studio 2019 的 LLVM 编译器构建 OpenMP 示例程序. LLVM 编译器是从 这里(版本 10.0,win64)下载的,C:\Program Files\LLVM\bin 添加到 PATH 环境变量中.LLVM 编译器工具链 扩展是从 Visual Studio Marketplace. 它成功构建了一个 hello world ..
发布时间:2021-09-18 19:27:55 其他开发

simd 的 pragma omp 不会在 GCC 中生成向量指令

简短:pragma omp for simd OpenMP 指令是否生成使用 SIMD 寄存器的代码? 更长:如 OpenMP 文档 中所述,“工作共享循环 SIMD 构造指定一个或多个相关循环的迭代将分布在使用 SIMD 指令的已经存在的线程之间[..]".从这个语句中,我希望以下代码 (simd.c) 在编译运行 时使用 XMM、YMM 或 ZMM 寄存器gcc simd.c -o si ..
发布时间:2021-09-17 19:16:38 其他开发

使用 openMP 在向量 c++ 对象上并行化循环

我正在尝试使用 openMP 提高 C++ 代码的性能,但没有看到非常好的缩放.在深入研究我的代码的细节之前,我有一个非常笼统的问题,我认为如果我能得到明确的答案,可以节省很多时间. 代码的基本结构是一个对象向量(假设大小 num_objs = 5000),其中每个对象保存一个相对较小的双精度向量(假设大小 num_elems = 500).我想遍历这个对象向量,对于每个对象,在成员向量上执 ..
发布时间:2021-09-17 19:12:57 其他开发

使用 openMP Task 时的意外行为

我正在尝试编写一个用于解决数独的蛮力算法的并行版本. 串行算法如下,伪代码: solve(matrix, x, y):对于 [0,9] 中的 i://如果测试编号符合规则如果(有效(矩阵,x,y,i):矩阵[y,x] = i//递归尝试下一个单元格if(solve(matrix, nextEmptyX, nextEmptyY)) 返回真//测试数字不是解决方案,回溯.矩阵[y][x] = ..
发布时间:2021-09-01 18:53:04 其他开发

#pragma omp parallel 和 #pragma omp parallel for 之间的区别

我是 OpenMP 的新手,我一直在尝试运行一个使用 OpenMP 添加两个数组的程序.在 OpenMP 教程中,我了解到在 for 循环中使用 OpenMP 时,我们需要使用 #pragma omp parallel for.但我也用 #pragma omp parallel 尝试了同样的事情,它也给了我正确的输出.以下是我试图传达的代码片段. #pragma omp parallel for ..
发布时间:2021-06-14 18:52:43 其他开发

C++ 致命错误 C1001:使用 openMP 的编译器发生内部错误

我有一个解决数独谜题的程序,我已经让它按顺序工作,但现在我正在尝试使用 openMP 并行化它.函数 solvePuzzle() 包含算法,我想在其中并行化 for 循环,但是当我在 for 循环之前添加 #pragma omp parallel for 语句时,我收到此错误: fatal error C1001: 编译器出现内部错误. 函数的代码是solvePuzzle(): bool ..
发布时间:2021-06-12 20:20:05 其他开发

容器元素上的 OpenMP 减少

我有一个嵌套循环,外部迭代很少,内部迭代很多.在内部循环中,我需要计算一个总和,因此我想使用 OpenMP 缩减.外循环在一个容器上,因此减少应该发生在该容器的一个元素上.这是一个最小的人为示例: #include #include #include int main(){constexpr int n { 128 };std::vectorvec (4, 0);for (unsigned in ..
发布时间:2021-06-12 20:20:00 其他开发

openMP:并行运行所有线程会导致内存不足异常

我想缩短冗长的图像处理算法的运行时间,该算法通过使用 openMP 并行处理应用于多个图像. 该算法适用于单个或有限数量 (=2) 的线程. 但是:当使用最大数量的可能线程运行时,使用 openMP 的并行处理需要大量内存,从而导致内存不足异常. 为了解决这个问题,我将“抛出异常"替换为“等待空闲内存",以防内存不足,导致很多( ..
发布时间:2021-06-12 20:19:57 其他开发

串行版本和并行结果不显示相同的输出

我实际上是 openmp 的新手,我有一个有效的 aes-128-cbc 玩具代码,可以将硬编码的密文解密为 12345,这本书是一位社区用户推荐给我的,我也遇到了这本书openmp 参考指南 最后我得到了一位社区用户的大力指导.从那些书和指南中,我试图并行化下面的串行代码 串行工作代码: #include #include #include #include #include int 成 ..
发布时间:2021-06-12 20:19:51 其他开发

使用 OpenMP“for simd"在矩阵向量乘法中?

我目前正试图通过将 #pragma omp for 与 #pragma omp simd 结合起来,使我的矩阵向量乘法函数与 BLAS 相媲美,但事实并非如此与仅使用 for 构造相比,获得任何加速改进.如何使用 OpenMP 的 SIMD 构造正确矢量化内循环? vector dot(const matrix& A, const vector& x){断言(A.shape(1) == x.si ..
发布时间:2021-06-12 20:19:48 其他开发

OpenMP 并行化多个顺序循环

我想用 OpenMP 并行化以下函数: void calculateAll() {国际 k;int nodeId1、minCost1、lowerLimit1、upperLimit8;for (k = mostUpperLevel; k > 0; k--) {int myStart = borderNodesArrayStartGlobal[k - 1];int size = myStart + ..
发布时间:2021-06-12 20:19:44 其他开发

openmp 递归任务示例比顺序慢

我刚刚开始研究 OpenMP 并且一直在阅读任务.看起来 Sun 在这里的例子实际上比顺序版本慢.我相信这与任务创建和管理的开销有关.这样对吗?如果是这样,有没有办法在不改变算法的情况下使用任务使代码更快? int fib(int n){内部 i, j;如果 (n 解决方案 唯一明智的方法是将并行度降低到某个级别,低于该级别则没有意义,因为开销变得大于正在完成的工作.最好的方法是有两个单独的 ..
发布时间:2021-06-12 20:19:41 其他开发