如何判断 OpenMP 是否正常工作

How to tell if OpenMP is working?

本文关键字:常工作 工作 是否 OpenMP 判断 何判断      更新时间:2023-10-16

我正在尝试以并行模式运行LIBSVM,但是我的问题通常是在OpenMP中。根据 LIBSVM FAQ,我已经修改了代码,#pragma 调用以使用 OpenMP。我还通过添加 -fopenmp 参数修改了 Makefile(对于 un*x),因此它变成了:

CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp

代码编译良好。我检查(因为它不是我的 PC)OpenMP 是否由以下人员安装:

/sbin/ldconfig -p | grep gomp

并看到它 - 可能 - 已安装:

 libgomp.so.1 (libc6,x86-64) => /usr/lib64/libgomp.so.1
 libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1

现在;当我运行程序时,我没有看到任何速度改进。此外,当我使用"top"检查进程最多使用 %100 CPU(有 8 个内核)时,也没有 CPU 瓶颈(只有一个用户使用率为 %100),我期望看到超过 %100(或不同的指示器)该进程正在使用多个内核。

有没有办法检查它是否正在多核工作?

您可以使用

函数omp_get_num_threads() 。它将返回程序使用的线程数。

有了omp_get_max_threads(),您可以获得程序可用的最大线程数。它也是 omp_get_num_threads() 的所有可能返回值中的最大值。您可以使用环境变量 OMP_NUM_THREADS 显式设置程序要使用的线程数,例如通过 bash

$export OMP_NUM_THREADS=8; your_program