Muteks uygulamalarını test etme ve karşılaştırma


12

Başlığın dediği gibi: c ++ 'daki mutekslerin farklı uygulamalarını düzgün bir şekilde nasıl test edersiniz ve karşılaştırırsınız?

Esasen, 2 çekirdekli bir armv7 üzerinde çalışan bir proje için kendi std :: mutex benzeri sınıfımı yazdım, tartışmasız durumda ek yükü en aza indirgemek için. Şimdi söz konusu muteksi daha fazla yerde ve farklı mimarilerde kullanmayı düşünüyorum, ama bunu yapmadan önce emin olmak istiyorum

  • aslında doğru
  • standart std :: muteks'ten çok daha kötü performans gösterdiği patolojik durumlar yoktur.

Açıkçası, birkaç temel birim testi ve mikro-ölçüt yazdım ve her şey işe yarıyor gibi görünüyor, ancak çok iş parçacıklı kodda "işe yarıyor" bana büyük rahatlık vermiyor.

  • Öyleyse, yerleşik statik veya dinamik analiz teknikleri var mı?
  • Muteks sınıfları için birim testleri yazarken sık karşılaşılan tuzaklar nelerdir?
  • Kişinin dikkat etmesi gereken tipik uç durumlar nelerdir (performans açısından)?

Ben sadece atomlar üzerinde sıralı tutarlı olmayan yük ve mağaza işlemleri içeren uygulama için standart kütüphane türleri kullanıyorum. Bununla birlikte, aynı uygulama donanımını diğer uygulamalar için de kullanmak istediğimden, esas olarak uygulama agnostik tavsiyesiyle ilgileniyorum.


2
Gerekli olmadığını biliyorum ama downvoters bu soru ile sorunun ne olduğunu yorumlamak isterim. Ben SE için yeni ve bu sitenin özellikleri ile tamamen familar değil.
MikeMB

3
Aşağı seçmen değil, ama bu sitenin mükemmel iyi sorular üzerinde anonim aşağı oylar için özellikle kötü olduğunu söyleyeceğim. Bana "dini" nedenlerden bahsettiğim şeye dayanarak birçok insanın oy kullanmadığı gibi geliyor. Bununla birlikte, olasılıklardan biri , burada kaşlarını çattığına inandığım araçlar hakkında tavsiyelerde bulunmanızdır . Ama bu sadece bir tahmin. Ve birçok insan bu tür araçları diğer sorularda tartıştı, bu yüzden ne yapacağınızı yapın.
user1118321

4
Aslında, "Sorucunun yaklaşımı veya mantığıyla aynı fikirde olmadığımız için aşağı indirme" başlıklı bu meta gönderiye göz atın.
user1118321

@ user1118321: IMHO bu soruda hatalı bir varsayım olmadığı için bu meta gönderi bu soruya uymuyor. Ancak, şu anda gördüğüm 3 yakın oylamadan ikisi, önceden tanımlanmış "üçüncü taraf kaynak talebi" yakın nedenini kullanıyor. MikeMB, sorunuzu düzenlemeye ve bu parçaları ondan çıkarmaya çalışabilirsiniz, ancak mevcut formda, topluluk çok geniş olduğu için de kapatabilir. Sorunun odak noktasını daraltır ve özellikle neyi test etmek istediğinizi ve şimdiye kadar ne denediğinizi sorarsanız , sorunuzun hayatta kalma şansını artırabilirsiniz.
Doc Brown

Bu soru ile ilgili bir sorun, "Araçları, kütüphaneleri, programlama dillerini, kaynakları (kitaplar, bloglar, öğreticiler ve örnekler dahil) veya üstlenecek projeleri bulmamızı veya önermemizi isteyen sorular, konu dışı düşünülmüş cevapları çektiği için burada konu dışıdır. başkalarına kalıcı bir değeri olmayacak. "
David Hammen

Yanıtlar:


1

Sorun karmaşık:

Bazı karmaşıklık kaynakları şunları içerir:

  • Kaç bağlam anahtarı gerçekleşiyor: Bu testlerin yürütüldüğü platforma bağlı olarak bu çok önemlidir. Bazı platformlar bunu diğerlerinden daha iyi halleder
  • Mutekslerin test edildiği işlevler satır içi mi değil mi? yani muteks sadece iyi optimize edilmiş veya optimize edilebilir kodda iyi performans gösterir mi?
  • Bu muteksler önbellek yeri için mi tasarlanmış? Önbellek kayıpları performansı önemli ölçüde azaltır veya daha fazla içerik anahtarına neden olur. Muteks girilmeden önce ve sonra.
  • Muteksin kendisi önbellek yerinin kaybolmasına neden olur mu? yani muteks durum verileri dinamik olarak tahsis edilir.
  • Bu muteksler, muteks içinde bağlam anahtarlarının bulunduğu yerlerde iyi performans gösterir mi? yani io, malloc vb.
  • Muteks iyi performans gösterecek mi çekirdek zamanı muteks.
  • VM'lerde çalışırken performans geçerli mi?
  • Muteksin yok edilmesi veya inşası pahalı mı yani devlet verileri dinamik bellekte mi yer alıyor?

1
İnşaat / yıkım kısmına katılıp katılmadığımdan emin değilim. Bir program muteksinizi her zaman yaratıyor ve yok ediyorsa, tasarım tasarımında yanlış bir şey var. Ama aksi halde işaretçiler için teşekkür ederim.
MikeMB

-1

Fikriniz çok ilginç: bir muteks uygulamasının test edilebileceği bir uyumluluk ölçütü.

Ne yazık ki, görebildiğim kadarıyla, muteks uygulamaları için yaygın olarak bilinen bir uyumluluk ölçütü yoktur. Yani, sanırım böyle bir uyumluluk ölçütü için bir teklif oluşturma konusunda çok ilginç bir probleminiz var.

Ve, bir kıyaslama uygulamasının oluşturulmasına dahil olduğunuzdan, siz de o adamsınız.

Bana bir öneri verirseniz, belki de bu araştırmaya bir taraftaki iş parçacıkları için POSIX standardı ve CSP veya Sıralı Süreçleri İletme gibi eşzamanlı işlemenin teorik literatürü ile başlayabilirsiniz. Bu tür makaleler genellikle Yemek Felsefecileri gibi klasik eşzamanlı problemlerle ilgilenir.

Bunların uygulanması, uyumluluk ölçütünüzün ilginç bir parçası olabilir, sanırım.


3
Seni küçümsemedim, ama bu sorularıma cevap vermiyor gibi görünüyor.
MikeMB

İndiremediğiniz için teşekkürler. Ve sorularınızı cevaplamadığınız için üzgünüm. Muteksler için bir uyum ölçütü oluşturmayı düşünüp düşünmediğinizi size sorabilir miyim?
Hilton Fernandes

Olası olmayan. Ve ben bile, ben umurumda tek standart c ++ standart (
mutexes

Önceki açıklamamı nitelendirmek için: Kendi muteksim için iyi bir test paketi bulmalıyım, büyük olasılıkla açık kaynak yapacağım, ancak gerçekte olacak kadar kaliteye sahip olacağı veya yeterince eksiksiz olacağından şüpheliyim. "uyumluluk" ölçütü - bu yine de statik analizle daha iyi ele alınacak bir şey olabilir.
MikeMB

Mutex ilkelleri için iyi bir test paketi olmadığına katılıyorum. Sanırım üç ayrı kaynaktan gelmesi gerekiyor: eşzamanlı işleme teorisi, bir POSIX muteksinin belirlenmesi ve muteksler kullanılarak ifade edilen eşzamanlı algoritmalar. Buna katılıyor musun ?
Hilton Fernandes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.