0
我需要使用openMP比較不同調度類型和線程數的循環執行時間。如何動態選擇排程類型?
我可以直接在編譯宏傳遞一個int
變量動態設置線程數:
int threads_number = 4;
#pragma omp parallel for num_threads(threads_number)
但是我想對於schedule
做同樣的,我需要比較static
,dynamic
和guided
類型。但它似乎不能使用int作爲枚舉,也不能使用char*
作爲此名稱。
有什麼辦法可以動態地選擇它,還是我必須編寫循環3次,然後選擇使用if
調用哪一個,這似乎很髒?
注意該枚舉,使用時間表(運行時),然後如果編譯器知道編譯時間表是靜態的,那麼omp_sched_static很容易產生比靜態調度更糟糕的結果。這是因爲如果編譯器知道時間表是靜態的,那麼它可以生成更好的代碼,這些代碼在循環內沒有任何對運行時進行調度的調用。而如果時間表可能是動態的,則它必須使用更昂貴的代碼生成模式,以針對每個「塊大小」的迭代集合進行調度。 –