如何强制单线程执行?

如何强制单线程执行?

问题描述:

我想只在一个线程中执行一个程序。当然,该程序使用OpenMP库运行多线程,但出于某种调试目的,我想禁用多线程。如何强制单线程执行?

是否有gdb也许在ld.so -level选项只有动态链接到一个假的OpenMP库,让合理的行为OMP呼叫(例如omp_get_num_threads总是返回1),但不启动一个以上的线程?

+0

你OpenMP实现可包括OpenMP库与串行存根,英特尔的一样。如果你想要一个独立于实现的答案,坚持使用环境变量和函数调用。 – tim18

如何在运行时设置OMP_NUM_THREADS = 1?您可能还想设置OMP_THREAD_LIMIT = 1以获得较好的度量。

+0

是的,这就是环境变量的用途。 –

+1

但是,要知道,有哪些有效地忽略由硬接线的envirable在许多代码“OMP_SET_NUM_THREADS(4)”(或类似),理由是“我有四个内核在我的机器”。你可能会想到,我认为这是一个可怕的想法,但不幸的是,它仍然很常见。 –

+0

这就是为什么我除了OMP_NUM_THREADS之外还建议OMP_THREAD_LIMIT = 1的原因,因为我认为它甚至可以将那些硬连线的情况降低到1。 – jefflarkin