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

时间:2012-05-07 11:55:05

标签: c++ openmp libsvm

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

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

代码汇编得很好。我检查(因为它不是我的电脑)是否安装了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

现在;当我运行程序时,我没有看到任何速度改进。此外,当我检查“顶部”时,该进程最多使用%100 CPU(有8个核心),也没有CPU瓶颈(只有一个用户使用%100 CPU),我期待看到超过%100(或不同的指标)该进程正在使用多个核心。

有没有办法检查它是否正在运行多个核心?

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

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

$export OMP_NUM_THREADS=8; your_program