2016-08-23 324 views
0

我想只在一個線程中執行一個程序。當然,該程序使用OpenMP庫運行多線程,但出於某種調試目的,我想禁用多線程。如何強制單線程執行?

是否有gdb也許在ld.so -level選項只有動態鏈接到一個假的OpenMP庫,讓合理的行爲OMP呼叫(例如omp_get_num_threads總是返回1),但不啓動一個以上的線程?

+0

你OpenMP實現可包括OpenMP庫與串行存根,英特爾的一樣。如果你想要一個獨立於實現的答案,堅持使用環境變量和函數調用。 – tim18

回答

3

如何在運行時設置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