如何判断 OpenMP 是不是正常工作?

Posted

技术标签:

【中文标题】如何判断 OpenMP 是不是正常工作?【英文标题】:How to tell if OpenMP is working?如何判断 OpenMP 是否正常工作? 【发布时间】:2012-05-15 22:24:45 【问题描述】:

我正在尝试以并行模式运行 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 CPU),我希望看到更多%100(或不同的指标)该进程正在使用多个内核。

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

【问题讨论】:

只是一个想法,但不应该是最大值。当只有一个线程在运行时,100%/核心数? 不,当使用多核时(至少在我的服务器安装中),我们看到的值远大于 100% @Tibor,top 默认为 Irix 模式,显示单个 CPU 的满负载为 100%,n 个 CPU 的满负载为 n*100%。如果您关闭 Irix 模式(按“I”),则在使用所有 CPU 时显示 100%。 【参考方案1】:

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

【讨论】:

必须在并行区域内调用omp_get_num_threads()。否则它总是返回 1!【参考方案2】:

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

$export OMP_NUM_THREADS=8; your_program

【讨论】:

以上是关于如何判断 OpenMP 是不是正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何判断打卡记录是不是异常?

如何判断AB PLC系统中的硬件设备是否在正常工作

如何判断 jetpack-compose 分页是不是有效?

perl中如何判断一个hash是不是为空

在尝试加载 YouTube 视频之前,如何判断它是不是可嵌入?

如何以编程方式进行一响呼叫以及如何判断我呼叫的线路是不是已关闭?