Einzelnen Beitrag anzeigen
  #22  
Alt 15.01.2023, 20:57
Benutzerbild von Rasmus
Rasmus Rasmus ist offline
Mephisto London 68030
 
Registriert seit: 26.08.2016
Land:
Beiträge: 379
Abgegebene Danke: 165
Erhielt 467 Danke für 181 Beiträge
Member Photo Albums
Aktivitäten Langlebigkeit
0/20 9/20
Heute Beiträge
0/3 ssssss379
AW: Mephisto Phoenix London - Geschwindigkeitsvergleiche + Hash Tables

Hi Markus,

 Zitat von Mapi Beitrag anzeigen
Bei grossen Hashtables wird über den "langsamen" 16 bit Datenbus die kompletten 3 MB beschrieben und abgefragt
Es wäre extrem ungewöhnlich, wenn man das so machen würde, weil man eine Hashtabelle nicht "durchsucht". Der Index, an dem man in der Hashtabelle springt, wird direkt aus dem Hashwert berechnet. Damit hängt der Aufwand sowohl beim Speichern als auch beim Nachschlagen einer Position nicht von der Größe der Hashtabelle ab. Lediglich, wenn man die gesamte Hashtabelle schreibt, etwa zwecks Löschen, dann dauert das proportional zur Größe.

Es wäre aber eine andere Falle denkbar. Wenn die Anzahl der Einträge eine Zweierpotenz ist, dann kann man die entsprechenden untersten Bits des Hashes als Index verwenden. Das ist eine AND-Operation, die auch auf den damaligen CPUs schon schnell war, IIRC 6 Takte beim 68k.

Ist die Anzahl der Einträge keine Zweierpotenz, dann kann man stattdessen eine Division mit Rest machen und den Rest als Index verwenden. Allerdings kostet eine Division etwa 140 Takte. Oder man bastelt eine Lösung, die stattdessen die Treffer ungleichmäßig verteilt, was dann wieder schnell ist, aber die Auslastung in Teilen der Tabelle ungleichmäßig macht und dort zu weniger Effektivität führt.

Ob die Größe der Hashtabelle selber dafür eine Zweierpotenz sein muß, hängt davon ab, ob der einzelne Eintrag die Größe einer Zweierpotenz hat, was von der Engine abhängt. Klar ist aber, wenn 2MB die Anzahl von Einträgen als Zweierpotenz hat, dann kann das für 3MB nicht der Fall sein, weil eine Zweierpotenz mal 1.5 keine Zweierpotenz ergibt.

Geändert von Rasmus (15.01.2023 um 21:37 Uhr)
Mit Zitat antworten
Folgende 8 Benutzer sagen Danke zu Rasmus für den nützlichen Beitrag:
Beeco76 (16.01.2023), Egbert (16.01.2023), germangonzo (15.01.2023), Mapi (15.01.2023), Mickey1259 (16.01.2023), RetroComp (15.01.2023), Roberto (16.01.2023), Wolfgang2 (15.01.2023)