12

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

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

4

2 回答 2

12

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

于 2012-05-07T12:00:09.797 回答
2

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

$export OMP_NUM_THREADS=8; your_program
于 2014-03-01T09:19:56.757 回答