Çift çekirdekli 3 GHz Intel işlemcimde ortalama 250 ms'de çalışan bir algoritma var ve bunu optimize etmeye çalışıyorum. Şu anda, ortalama 50ms alarak, std::vector
s 150 ve 300 arasında yaklaşık 6.000 kez çağrılan bir std::nth_element
çağrı var. Ben, şu anda iki double
s bir vektörden bakar ve basit bir <
karşılaştırma yapar, kullandığım karşılaştırıcıyı optimize etmek için biraz zaman geçirdim. Karşılaştırıcı, std::nth_element
'u çalıştırmak için zamanın ihmal edilebilir bir kısmını alır. Karşılaştırıcının kopya kurucusu da basittir.SIMD std :: nth_element Uygulaması
Bu çağrı şu anda algoritmamın% 20'sini alıyor ve zaman çoğunlukla yazmam için nth_element
kodunda harcanıyor (örneğin, karşılaştırıcı değil). SIMD'yi veya başka bir yaklaşımı kullanarak nth_element
'u optimize etmenin bir yolu nedir? OpenCL ve çoklu thread kullanarak some questions'u std::nth_element
'a paralel olarak gördüm, fakat vektörler oldukça kısa olduğundan, bu yaklaşıma ne kadar fayda sağlayacağımı bilmiyorum, ancak yanlış olduğuma söylüyorum.
Bir SSE yaklaşımı varsa, SSE4.2'ye (geçerli, sanırım) kadar herhangi bir SSE talimatını kullanabilirim.
Teşekkürler!
Bazı kodlar gönderebilir misiniz? ne yapmaya çalışıyorsun? –
@ BЈовић _something_ gönderebilirim, ancak ne kadar yararlı olacağından emin değilim. Birkaç bin satır kodum var ve hepsini optimize etmeye çalışıyorum. Bu bir vizyon algoritması. Ne görmek istersin? – anjruu
Evet, burada daha fazla içeriğe ihtiyacımız var. Bir çift minik vektörel çiftin var, ve onları bir sebepten dolayı sıralamaya mı çalışıyorsun? Nihai hedefin nedir? –