问题标签 [libgomp]

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 投票
0 回答
240 浏览

gcc - 是否可以更改任务的 OpenMP 调度程序?

我可以提供特定于实现的调度程序吗?如果是这样,是否有一些关于如何做到这一点的文档?

0 投票
0 回答
468 浏览

installation - 我更改了 gcc 的 libgomp 源代码。如何单独安装 libgomp

我最近对 ​​gcc-4.7.0 源代码的 libgomp 做了一些改动。如何单独安装 libgomp。我知道我可以安装已更改的总 gcc。但也许我会再次对 libgomp 进行一些更改,并且我不想花太多时间再次安装更改后的 gcc。我想知道如何单独安装 libgomp 源代码。谢谢!

0 投票
1 回答
373 浏览

c - 让 GCC 在转换 OpenMP 并行代码时调用 pthread_exit

我刚刚发现 gcc 的 OpenMP 实现(libgomp)没有调用 pthread_exit()。我需要它来使用 perfsuite(用于分析)。

有没有办法告诉 GCC 在将 OpenMP 代码转换为 pthread 代码时在 OpenMP 并行部分的末尾包含 pthread_exit() ?

我正在使用 GCC 4.7.0 和 Perfsuite 1.1.1 。

0 投票
1 回答
1165 浏览

c - 无法在分叉的进程中设置 OpenMP 线程关联

我正在尝试使用 openMP 在不同的 CPU 上运行两个进程。在这种情况下,每个 CPU 有 6 个带有超线程的内核(因此有 12 个硬件线程)。他们需要做一些同步,如果他们知道彼此的 PID,这似乎更容易一些。所以我sigCsigS使用 a开始一个过程,fork()execve()GOMP_CPU_AFFINITY环境变量使用不同的值。fork()/execve()调用后,sigS仍然有正确的亲和力但sigC打印

并且所有线程都在同一个核心上。

的代码sigS

的代码中sigC只有一个 omp 并行 for 循环,但为了完整性:

输出:

这部分符合预期

这就是问题所在 - 子进程中的所有线程都在核心 0 上运行

(我省略了父线程打印,因为它与 pre-fork 相同)

关于如何解决这个问题或者它是否是正确的方法的任何想法?

0 投票
4 回答
7648 浏览

c - 使用 omp parallel for 但不是顺序时出现分段错误

我在使用#pragma omp parallel for 时遇到问题

基本上,我有数百个 DNA 序列,我想针对一种称为 NNLS 的算法运行这些序列。

我认为并行执行会大大加快速度,因此我应用了#pragma 运算符。

当我按顺序运行它时没有问题,结果很好,但是当我使用#pragma omp parallel 运行它时,我在算法中遇到了一个段错误(有时在不同的点)。

gdb 总是在我的线程中以不同的品脱退出,所以我不知道出了什么问题。

我试过的:

  • 分配每个矩阵的副本,这样它们就不会在彼此之上书写
  • #pragma 部分混合使用私有/共享运算符
  • 使用不同的输入序列
  • 在调用 NNLS 之前写出我的 trained_matrix 和 count_matrix,确保它们看起来不错。(他们是这样!)

我有点没主意了。有人有什么建议吗?

0 投票
1 回答
540 浏览

openmp - 对 _app_main 的未定义引用

我正在尝试使用 arm-elf-gcc 和 arm-rtems-gcc 在 vsoc_beta 上运行一些测试。但是,两个编译器都给了我同样的错误:

这些测试使用 libgomp,在 libgomp.c 中有一行:

主要定义为:

在测试文件中,还有另一个主要功能:

可能是什么问题呢?

0 投票
0 回答
607 浏览

ubuntu - -fopenmp 在 Ubuntu 13.10 上不起作用

我正在使用英特尔 MKL 库和 GCC 编译器构建相同的应用程序,并使用英特尔建议的所有标志。要使用 GCC OMP 实现,建议使用 -fopenmp,它将程序与 -lgomp 链接。这在 Ubuntu 12.04 上运行良好,但在 Ubuntu 13.10 上 GCC 似乎无法找到正确的符号。任何人都知道我是否做错了什么?

g++ -I$MKLROOT/include -I/home/jjgarcia/mps-bundle-gcc/include -g -O2 -fopenmp -o xy_stuck.exe xy_stuck.cc -O2 -L$MKLROOT/lib -L/home/jjgarcia/ mps-bundle-gcc/lib -lmps -ltensor -lmkl_intel_lp64 -lmkl_core -lmkl_gnu_thread -ldl -lpthread -lf2c

顺便说一句,明确添加 -lgomp 并没有帮助。

这些是错误

使用 -v -v 获取详细输出显示 GCC 调用的链接器。我手动添加了 -lgomp 并且它没有改变。另请注意,链接器不会抱怨找不到 gomp :-?

0 投票
3 回答
7339 浏览

gcc - 告诉 GCC *not* 链接 libgomp 所以它链接 libiomp5

我需要找出一个可以输入 gcc 的编译器/链接器指令,以便在指定 -fopenmp 时它不会自动链接 libgomp。

原因是我正在尝试针对英特尔的 MKL BLAS 进行构建。MKL 需要添加一个单独的英特尔库来处理多线程(例如,libmkl_intel_thread 或 libmkl_gnu_thread)。然而,用于将 MKL 与 libgomp 链接的库并非在每个操作系统上都可用,包括我的操作系统。这迫使我链接 libmkl_intel_thread,而后者又必须链接到 libiomp5。

虽然我能够构建我的包,但一些二进制文件同时与 libgomp 和 libiomp5 链接。我不肯定这会导致问题,但是已经发生了一些崩溃,链接组合是可疑的,即使它没有导致崩溃,它肯定是一个可怕的低效率。

我正在尝试使用 gcc 4.9.1 来做到这一点。

不幸的是,避免 -fopenmp 不是一种选择。原因是这是为了编译一个由几个子包组成的相当大的包,它们的 Makefile 不是最大的形状,并且以后可能会编译来自其他源(插件)的附加包。强制使用通用编译器/链接器指令并不困难。但是,打开 --enable-openmp 会同时激活 -fopenmp,并定义用于触发与多线程相关的代码。试图将这三个(--enable-openmp、-fopenmp 和链接到--enable-openmp 的代码)分开是不可行的。

我浏览了手册页,但没有看到任何允许选择 openmp 库的 gcc 指令。英特尔的论坛有一个非常古老的讨论,他们建议在 -fopenmp 之后立即指定一个静态库,然后是 --as-needed。这看起来相当摇摇晃晃,并且也有很大的潜力干扰插件包。llvm-openmp 似乎曾经考虑过 -fopenmp=libiomp5 指令,但它似乎已在 3.5 版本中被删除,而且我无论如何都在尝试使用 gcc。

谢谢。

0 投票
1 回答
1020 浏览

openacc - Openacc 错误 ibgomp:加载 libgomp-plugin-host_nonshm.so.1 时:libgomp-plugin-host_nonshm.so.1:不能

我想编译一个简单的 openacc 示例(已附加),它已正确编译,但是当我运行它时出现错误:

  1. 编译:gcc-5 -fopenacc accVetAdd.c -lm
  2. 运行:./a.out
  3. 运行时出错

错误: libgomp:加载 libgomp-plugin-host_nonshm.so.1:libgomp-plugin-host_nonshm.so.1:无法打开共享对象文件:没有这样的文件或目录

我用谷歌搜索,只找到一页!然后我问如何解决这个问题?

0 投票
1 回答
210 浏览

compilation - 在 LLVM 中链接 libgomp.so

我正在使用 LLVM 使用 parseInputIR(inputIR) 函数读取 IR 文件;编译它们并执行它们,类似于 llvm 的 Kaleidoscope 示例中所做的。但是,这样做时,我收到错误,抱怨 omp_get_num_procs 不知道如下

clang/bin/Kaleidoscope-Orc-fully_lazy_with_recompile_try prime_toy/main.bc prime_toy/prime_number.bc LLVM 错误:程序使用了无法解决的外部函数“omp_get_num_procs”!

其中一个 IR 文件包含 omp 指令,因此必须链接到 omp 库。我应该使用 dlsym 在 llvm 中添加这种支持。

我的问题是关于 libgomp 版本 - 我想我需要使用来自 llvm 的 openmp 库(http://openmp.llvm.org/)但我没有在其中看到 omp_get_num_procs (只有带后缀的),我想知道为什么。