HermitCrab engine: share frozen syntactic feature structures on internal Word clones (about 15% of a heavy Sena profile, never isolated)

Offen
#595 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Feature
Klarheit
Größtenteils klar
Aktivitätsstatus
Aktiv
Tech-Stack
csharp
Bereich
backend

Rechercherichtung

Start with the syntactic-feature-structure-sharing record and the HermitCrab optimization ledger linked in the issue; the implementation is on an archived branch. For a revival, first measure with the toggle alone, counting clones and freezes avoided, and establish parity without the old morph-count signature; sharing is unavailable for mutable source words.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Hermit Crab performance

Internal clones of a frozen Word deep-copy its SyntacticFeatureStruct, then freeze and hash it again when building analysis keys. The change adds Word.CloneForEngine, which shares the frozen structure until a rule must mutate it. The three in-place analysis mutation sites call EnsureOwnSyntacticFeatureStruct first. A per-Morpher setting (HC_SHARE_SYNTACTIC_FS=false opts out) controls sharing. Public Word.Clone() stays a deep, mutable clone. This is sharing, not a cache. CloneForEngine and EnsureOwnSyntacticFeatureStruct are on the archived branch only.

Measured. The heaviest Sena profile attributed roughly 15% of CPU to freezing and hashing a newly cloned syntactic feature structure while building analysis keys. The five-language measurement is branch-wide, so no standalone speedup is assigned. The wall-clock figure is a profile share and is not attributed.

What a revival must do first. Time it with the toggle alone, in clones and freezes avoided. Do not use the old morph-count signature for parity. Sharing is unavailable for mutable source words.

Record: see the archived write-up below
Ledger: https://github.com/sillsdev/machine/pull/490#issuecomment-6701971116; disposition: https://github.com/sillsdev/machine/pull/490#issuecomment-6701971324
From #490 (closed).

Vorherrschende Sprache
C#
Sterne
29
Forks
16
Ø Merge
4 T. 11 Std.
Gemergte PRs (30 T.)
14

Entwicklungsumgebung

  • Kein Dockerfile und keine Docker-Compose-Datei
  • Hat eine Pull-Request-Vorlage
  • Kein Beitragsleitfaden

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus sillsdev/machine

Alle Issues in sillsdev/machine

Ähnliche Issues

Weitere Issues zu C#

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.