Wie der Titel sagt: Wie testen und bewerten Sie verschiedene Implementierungen von Mutexen in c ++ richtig?
Im Grunde habe ich meine eigene std :: mutex-ähnliche Klasse für ein Projekt geschrieben, das auf einem 2-Kern-System (armv7) läuft, mit dem Ziel, den Overhead im unbestrittenen Fall zu minimieren. Jetzt überlege ich, besagten Mutex an mehreren Stellen und auch an verschiedenen Architekturen zu verwenden, aber bevor ich das tue, möchte ich das sicherstellen
- es ist tatsächlich richtig
- Es gibt keine pathologischen Fälle, in denen es viel schlechter abschneidet als ein Standard-std :: mutex.
Natürlich habe ich ein paar grundlegende Unit-Tests und Micro-Benchmarks geschrieben und alles scheint zu funktionieren, aber im Multithread-Code "scheint zu funktionieren" gibt mir keinen großen Komfort.
- Gibt es also etablierte statische oder dynamische Analysetechniken?
- Was sind häufige Fallstricke beim Schreiben von Komponententests für Mutex-Klassen?
- Was sind typische Randfälle, auf die man (in Bezug auf die Leistung) achten sollte?
Ich verwende nur Standardbibliothekstypen für die Implementierung, die nicht sequentiell konsistente Lade- und Speicheroperationen für Atomics umfassen. Ich bin jedoch hauptsächlich an implementierungsunabhängigen Ratschlägen interessiert, da ich das gleiche Testkabel auch für andere Implementierungen verwenden möchte.
Antworten:
Das Problem ist komplex:
Einige Ursachen für Komplexität sind:
quelle
Ihre Idee ist sehr interessant: ein Compliance-Benchmark, gegen den eine Mutex-Implementierung getestet werden könnte.
Leider gibt es meines Erachtens keinen allgemein bekannten Compliance-Benchmark für Mutex-Implementierungen. Ich vermute, Sie haben das sehr interessante Problem, einen Vorschlag für einen solchen Compliance-Benchmark zu erstellen.
Und da Sie an der Erstellung einer Benchmark-Implementierung beteiligt waren, sind Sie der richtige Mann.
Wenn Sie mir einen Vorschlag machen, könnten Sie diese Recherche vielleicht mit dem POSIX-Standard für Threads auf einer Seite und einigen Studien der theoretischen Literatur zur gleichzeitigen Verarbeitung wie CSP oder zur Kommunikation sequenzieller Prozesse beginnen. Diese Art von Artikeln befasst sich normalerweise mit den klassischen Problemen, die gleichzeitig auftreten, wie die Dining Philosophers.
Eine Implementierung könnte ein interessanter Bestandteil Ihres Compliance-Benchmarks sein, denke ich.
quelle