2010-10-12 129 views
2

我正在嘗試用於大型數據處理的openMP,而且它相對較新。我的輸入數據集非常龐大,所以我將它分成多個子集,每個線程都處理數據的子集。該子集中的每個數據項都由該線程起作用。如果其中一個線程在任何數據項操作期間失敗,我想終止其他線程並返回失敗。使用共享變量是一個選項,但有沒有更好的方法來做同樣的事情?OpenMP:是否有線程終止所有其他並行線程的方法?

回答

2

如果其中一個線程在其輸入上扼流圈發生了什麼?你想讓程序突然停止嗎?或者你想停止並行執行並讓程序的串行部分整理好?

OpenMP並不是真的爲任何一種操作設計,所以你會努力反抗它,而不是像大多數初學者一樣掙扎着。正如您所建議的那樣,您當然可以使用共享變量並編寫自己的邏輯來停止程序,或者如果其中一個線程發生故障,則跳至並行區域的末尾。但是這些操作沒有OpenMP內在機制。

您可能想要調查OpenMP 3.0的新功能task。使用這些,你當然可以實現一個系統,將任務分派給返回成功或失敗的線程,並執行其他處理失敗的任務。

最後,有人可能會認爲不好的輸入不應該導致程序崩潰,但這是另一個話題。

+0

感謝您的回答,我認爲使用共享變量現在看起來像是我的選擇。 – 2010-10-13 04:21:52

相關問題