我想只在一個線程中執行一個程序。當然,該程序使用OpenMP庫運行多線程,但出於某種調試目的,我想禁用多線程。如何強制單線程執行?
是否有gdb
也許在ld.so
-level選項只有動態鏈接到一個假的OpenMP庫,讓合理的行爲OMP呼叫(例如omp_get_num_threads
總是返回1
),但不啓動一個以上的線程?
我想只在一個線程中執行一個程序。當然,該程序使用OpenMP庫運行多線程,但出於某種調試目的,我想禁用多線程。如何強制單線程執行?
是否有gdb
也許在ld.so
-level選項只有動態鏈接到一個假的OpenMP庫,讓合理的行爲OMP呼叫(例如omp_get_num_threads
總是返回1
),但不啓動一個以上的線程?
如何在運行時設置OMP_NUM_THREADS = 1?您可能還想設置OMP_THREAD_LIMIT = 1以獲得較好的度量。
是的,這就是環境變量的用途。 –
但是,要知道,有哪些有效地忽略由硬接線的envirable在許多代碼「OMP_SET_NUM_THREADS(4)」(或類似),理由是「我有四個內核在我的機器」。你可能會想到,我認爲這是一個可怕的想法,但不幸的是,它仍然很常見。 –
這就是爲什麼我除了OMP_NUM_THREADS之外還建議OMP_THREAD_LIMIT = 1的原因,因爲我認爲它甚至可以將那些硬連線的情況降低到1。 – jefflarkin
你OpenMP實現可包括OpenMP庫與串行存根,英特爾的一樣。如果你想要一個獨立於實現的答案,堅持使用環境變量和函數調用。 – tim18