2015-02-28 3 views
0

При профилировании кода на языке C я хотел бы отключить/сократить количество потоков OMP до 1. После краткого поиска я нашел это question. Поэтому я решил сделать что-то вродеОтключение OpenMP при включенном профилировании

#ifdef foo 
    #define omp_get_thread_num() 0 
#endif 

где foo является макрос, который является истинным, если -pg флаг устанавливается при компиляции с GCC.

Мой вопрос в том, что такое значение foo, и этот метод теперь позволит мне получить разумную информацию профилирования (заставив OpenMP просто использовать один поток).

ответ

3

Самый простой способ изменить количество потоков для OpenMP во время запуска программы с переменной окружения OMP_NUM_THREADS. Для получения однопоточного исполнения a.out:

$> OMP_NUM_THREADS=1 ./a.out 

Это должно возвращать разумные данные для профилирования. Если вы полностью удалите OpenMP, вы будете несколько менять свое приложение, поэтому профилирование может быть не таким релевантным.

+0

Или даже (но не такой портативный, как 'export OMP_NUM_THREADS = 1')' taskset -c 0./A.out', чтобы ограничить ядра ЦП, доступные для среды выполнения omp. – osgx

Смежные вопросы