我一直在尋找一種方法來實現帶多線程的C++ (Implementation found on Github)的Timsort,並且我嘗試過在這個過程中使用。 我敢肯定,我使用的是正確的編譯器標誌,但每當我嘗試使用Timsort爲我做如下:在C++中使用OpenMP與Timsort算法
#pragma omp parallel shared(DataVector)
{
gfx::timsort(DataVector.begin(), DataVector.end(), comp_1);
}
注:數據進行排序,是包含單個單詞串的載體,以及我使用我自己的比較器。
它似乎在不使用OpenMP的情況下以相同的時間量進行排序。使用chrono等適當的包含,我計時的值平均在0.01秒內,在我的排序上徘徊在1.24秒左右。
是否有線程似乎不能與我的排序方法一起工作的原因,還是與我實施OpenMP的方式有關的問題?
注意事項:我一直在使用__gnu_parallel :: sort以及更好的結果,但我期待在實踐中自己比較這些方法。
所以我會基本上需要進入的timsort自身實際的代碼,並在添加OMP'平行for'適當的位置?我的假設是,對DataVector.begin()和DataVector.end()使用parallel for循環將無法完全按照我的計劃進行。 – GreekQuestionMark
@Tekrin類似的東西。爲了使它與OMP協同工作,for語句有一些限制。 – 1201ProgramAlarm
我還沒有找到用Timsort實現OpenMP的確切方法,所以我會留下「未答覆」的問題。但是,您的答案似乎指向了正確的方向,實際上讓我在代碼中的其他地方修復了另一個問題。 – GreekQuestionMark