2014-02-27 32 views
1

有沒有辦法使用C中的函數更改pragma omp for循環中的schedule類型? 我試圖在並行語句之前做setenv("OMP_SCHEDULE", "guided", 1);,但我不完全確定它是否可行,因爲我從代碼中得到的時間非常相似。 我想要做的是使用for循環更改計劃類型來比較計時,在setenv函數中給出dynamic,auto等作爲字符串。C,OpenMP,更改計劃類型,setenv

+1

使用schedule(運行時)並設置OMP_SCHEDULE。看到這個答案的最後一段http://stackoverflow.com/questions/10850155/openmp-for-schedule/10852852#10852852 –

回答

2

您可以使用schedule(運行時)並設置OMP_SCHEDULE。

https://computing.llnl.gov/tutorials/openMP/

RUNTIME 調度決策被推遲到環境變量OMP_SCHEDULE運行。爲此子句指定塊大小是非法的。

且讓我舉里斯託·利維,因爲他已經在這裏說 OpenMP: for schedule

它最好的,因爲預編譯的代碼可以在各種平臺上這將是很好,如果最終用戶可以控制調度運行。這就是OpenMP提供特殊調度(運行時)子句的原因。使用運行時調度時,類型取自環境變量OMP_SCHEDULE的內容。這允許在不重新編譯應用程序的情況下測試不同的調度類型,並允許最終用戶爲他或她的平臺進行微調。

+0

是否日程安排(運行時)保證環境變量將被讀取每次循環被調用,或運行時可能會在啓動時讀取一次變量? – pburka

0

沒有標準的方法來執行此操作,但如果您使用的是英特爾的庫,則可以使用kmp_set_defaults()擴展名。這需要一串由|個字符分隔的選項,並且會覆蓋默認的OpenMP行爲。在你的例子中,kmp_set_defaults("OMP_SCHEDULE=guided")應該完成你想要的。