Я разработчик (на Linux) и внедрил рабочий процесс Python, в котором приложение C/C ++, параллельное с OpenMP, называется примерно в 100 раз. Я протестировал рабочий процесс на различные числа потоков. В первой реализации я использовал переменную среды omp_num_threads, чтобы установить количество параллельных потоков, но я наблюдал какое -то странное поведение. Во второй реализации я установил количество параллельных потоков во время выполнения, используя «omp_set_num_threads» и установил omp_num_threads = 1, что привело к лучшей производительности, см. Изображение.
Сравнение производительности < /p>
после краткого исследования с «Strace» я обнаружил, что Lineear увеличивается, вызванная Openmp в первой реализации. По -видимому, каждый поток инициализируется, и память выделяется для каждого потока, что занимает минутку. С 48 потоками и ~ 100 вызовами это происходит ~ 4800 раз. Однако это влияет на другие приложения, которые получают доступ к этой переменной среды. < /P>
Есть ли способ изменить поведение OpenMP? Я разработчик и знаю, что переменная среды установлена, а также влияет на другие приложения. Тем не менее, я также делюсь рабочим процессом с другими людьми, у которых нет опыта разработки и не знакомы с Linux, которые просто хотят выполнить рабочий процесс. (18.1.3) & libomp, тот же результат.
Подробнее здесь: https://stackoverflow.com/questions/797 ... mance-test