我有一種算法可以在我的雙核3 GHz Intel處理器上平均運行250ms,並且我正在優化它。目前,我有一個std::nth_element
調用,在150到300個元素的std::vector
之間調用約6000次,平均需要50ms。我花了一些時間來優化我使用的比較器,它目前從向量中查找兩個double
,並進行簡單的<
比較。比較器運行時間可以忽略不計,可運行std::nth_element
。比較器的複製構造器也很簡單。SIMD std :: nth_element的實現
由於此調用目前佔用了我算法的20%時間,並且由於時間主要用於我沒有編寫的代碼nth_element
(即不是比較器),所以我想知道是否有人知道使用SIMD或其他方法優化nth_element
的方法?我已經看到some questions使用OpenCL和多線程並行化std::nth_element
,但由於向量很短,我不確定從這種方法得到多少好處,儘管我很樂於被告知我錯了。
如果有證的做法,我可以使用任何SSE指令最多(目前,我認爲)SSE4.2。
謝謝!
你可以發佈一些代碼?你想優化什麼? –
@BЈовић我可以發佈_something_,但我不確定它會是多麼有用。我有幾千行代碼,我試圖優化所有的代碼。這是一個視覺算法。你想看見什麼? – anjruu
是的,我們在這裏需要更多的上下文。你有一堆小小的雙打矢量,你正在嘗試對它們進行排序嗎?你的最終目標是什麼? –