memcpy ile "dinamik depolama"

Doğrudan depolama ile dinamik depolama veri yapısını simüle etmek için "memcpy" kullanan bir kütüphaneyle çalışıyorum. Küçük veri kümeleriyle sonuçlanan sayısal işlemler üzerinde çalıştığımı belirtmek önemlidir. Bağlı bir listenin verim açısından memcpy'den daha uygun olup olmayacağını nasıl belirleyebilirim?

Literatürde ve internette bulduğumdan, kriterler oldukça kötülük olarak kabul edilir.

Ben küçük boyutta yaklaşık 30 elementle (deneyimden) ilgileniyorum (3 bileşenli vektörler: uzayda noktalar).

Bu durumda ne kullanırsınız:

1) memcpy + doğrudan erişim 2) bağlantılı liste + doğrusal arama süresi

Teşekkürler!

1
Lütfen ölçütlerin kötülük olduğunu söyleyen "edebiyat" ı gösterin.
katma yazar John Dibling, kaynak
Karşılaştırmalar "kötülük sayıldı"? Ne frak?
katma yazar Lightness Races in Orbit, kaynak
Eh, programlama (Ben bir Mech. Eng.) Kodları, sonlu hacim yöntemi kullanarak sürekli mekaniği sayısal nümerikler ile başa çıkmak. Hesaplamalar çok karmaşık ve HPC kümelerinde çalışıyorlar. “Kriterlerin kötülük” ile kastettiğim şey yanlış bir şekilde konuldu: Ben bu şeyi şu anda kıyaslamada hiçbir anlam ifade etmiyordu. Oluşturulacak katmanlar ve katmanlar vardır ve bu noktada, hangi seçeneğin daha iyi olduğunu bilmiyorum. Sanırım "erken optimizasyon" demek istedim, ama yine bir Mech'im. Eng., Yani yanlış terminolojiyi affedin ...
katma yazar tmaric, kaynak
Profil Oluşturma! tek yol.
katma yazar Alok Save, kaynak

4 cevap

Performans hakkında gerçekten çok fazla dikkat ederseniz, bunu ölçmelisiniz, yani kodunuzu kıyaslayın (bu kötülük değildir, bu yaygın bir uygulamadır; kötülük ne zamandır erken optimizasyon ).

But be aware that, at least with recent GCC (e.g. GCC 4.6) on GNU/Linux and when optimized by at least -O2, memcpy & memset are semi-magically (thru __builtin_memcpy or similar tricks) transformed to quite efficient code.

Ve küçük veri elemanlarının büyük bir kümesi için, önbellekleme düşüncesinin baskın olduğunu düşünüyorum. performans.

3
katma
Tam olarak ne "önbellekleme değerlendirmesi baskın performans." Çok sayıda küçük veri elemanı ile uğraşıyorum ve sonunda, önerdiğin gibi konteyner için farklı seçenekleri test edeceğim. Teşekkürler.
katma yazar tmaric, kaynak

Profil oluşturma veya karşılaştırma ölçütleri değil kötülüktür. Daha fazla seçeneğin daha verimli olduğunu anlamanın en iyi yolu bunlar. Günümüzde optimerler "akıllılığı" ile, karşı sezgisel seçenek aslında en verimli olduğunu kanıtlayabilir. Bir referans noktası çalıştırmanızı ve buna dayanarak seçmenizi öneririm. Yanlış gidebilmenin tek yolu, çoğu durumu kapsayan geçerli giriş sağlamaz.

1
katma

Bu kadar az miktarda veriyle uğraşırken - neden endişeleniyorsun?

Kıyaslama sadece çok sayıda hesaplama ile çalışır - OS'den diğer etkileri sınırlamak için.

1
katma

Çok küçük bir veri kümesiyle (30 * 12 bayt), tüm verileriniz bir önbellek çizgisinin içinde. Bu yüzden bir listeden daha hızlı olacağından eminim. Bir liste kullanırsanız, bir çok bellek ayırmak zorunda kalırsınız; bu, çoğu OS'de bu kadar küçük bir bellek parçasını kopyalamaktan daha fazla zaman alır.

0
katma