Как узнать, работает ли OpenMP?

Я пытаюсь запустить LIBSVM в параллельном режиме, однако мой вопрос находится в OpenMP в целом. Согласно LIBSVM FAQ, Я изменил код с помощью вызовов #pragma для использования OpenMP. Я также изменил Makefile (для un * x), добавив аргумент-fopenmp, чтобы он стал:

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

Теперь, когда я запускаю программу, я не вижу никаких улучшений скорости. Также, когда я проверяю с помощью "top", процесс использует не более %100 CPU (есть 8 ядер), также нет узкого места процессора (только один пользователь с использованием %100 CPU), я ожидал увидеть более %100 (или другой индикатор), что процесс использует несколько ядер.

есть ли способ проверить, что он работает с несколькими ядрами?

2 ответов


вы можете использовать функцию omp_get_num_threads(). Он вернет вам количество потоков, которые используются вашей программой.


С omp_get_max_threads() вы получили максимальное количество потоков, доступных для вашей программы. Это также максимальное из всех возможных возвращаемых значений omp_get_num_threads(). Вы можете явно задать количество потоков, которые будут использоваться вашей программой с переменной среды OMP_NUM_THREADS, например, в bash via

$export OMP_NUM_THREADS=8; your_program