Как определить, работает ли OpenMP?

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

<code>CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp
</code>

Код хорошо компилируется. Я проверяю (поскольку это не мой компьютер), установлен ли OpenMP:

<code>/sbin/ldconfig -p | grep gomp
</code>

и увидеть, что он, вероятно, установлен:

<code> libgomp.so.1 (libc6,x86-64) => /usr/lib64/libgomp.so.1
 libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1
</code>

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

Есть ли способ проверить, что работает многоядерный?

 Tibor07 мая 2012 г., 13:59
Просто мысль, но не должно быть макс. 100% / количество ядер, когда работает только один поток?
 paul simmons07 мая 2012 г., 14:21
нет, когда используются многоядерные системы (по крайней мере, при установке на моем сервере), мы видим значения, намного превышающие 100%
 Hristo Iliev07 мая 2012 г., 16:12
@Tibor, top по умолчанию - режим Irix, который показывает 100% для полной загрузки одного ЦП и n * 100% для полной загрузки n ЦП. Если вы выключаете режим Irix (нажимаете «I»), он показывает 100%, когда используются все процессоры.

Ответы на вопрос(2)

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

$export OMP_NUM_THREADS=8; your_program
 07 февр. 2019 г., 18:07
Попробовал - получен "неожиданный конец файла" и количество протекторов 512
Решение Вопроса

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

 07 мая 2012 г., 16:14
Надо позвонитьomp_get_num_threads() внутри параллельной области. В противном случае всегда возвращается 1!

Ваш ответ на вопрос