Как узнать, работает ли 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