我试图以并行模式运行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(或不同的指标)该进程正在使用多个核心。
有没有办法检查它是否正在运行多个核心?
答案 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