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

pau*_*ons 9 c++ openmp libsvm

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

CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp
Run Code Online (Sandbox Code Playgroud)

代码汇编得很好.我检查(因为它不是我的电脑)是否安装了OpenMP:

/sbin/ldconfig -p | grep gomp
Run Code Online (Sandbox Code Playgroud)

并看到它是 - 可能安装的:

 libgomp.so.1 (libc6,x86-64) => /usr/lib64/libgomp.so.1
 libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1
Run Code Online (Sandbox Code Playgroud)

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

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

Cha*_*net 9

你可以使用这个功能omp_get_num_threads().它将返回程序使用的线程数.

  • 必须在并行区域内调用`omp_get_num_threads()`.否则它总是返回1! (6认同)