Zum Inhalt springen

Basis-Ideen/Voraussetzungen - Auswahl Algorithmen

Basis-Ideen/Voraussetzungen

Parallelität

  • mehrere Datenpunkte parallel berechnen
  • SIMD
  • Berechnung innerhalb Datenpunkt parallelisieren, falls möglich

Pipelining

  • mehrschrittige Berechnung für mehrere Datenpunkte in verschiedenen Phasen
  • Pipelining auch von Operationen innerhalb Phase

Streaming

  • kontinuierliche Verarbeitung von Daten, möglichst ohne Speicherzugriffe
  • -> in Pipeline weiter-/durchschieben
  • -> kontinuierlicher Stream

Arithmetik

Ausschlüsse:

  • kein Floating-Point
  • keine Division
  • keine Wurzeln
  • möglichst keine Potenzen (oder nur feste)?
  • negative Zahlen/2er-Komplement bei Multiplikation?

Festlegungen:

  • Fixed-Point (Format? Q16.8, Q32.16, Q20.12, Generic je nach Problem)
  • 2er-Komplement/Signed
  • 3 Operationen: Addition, Subtraktion, Multiplikation
  • komplexe Funktionen mit Lookup-Table (evtl. auch für Wurzeln, falls notwendig)?

Addition/Subtraktion:

  • Overflow/Carry!
  • sonst unproblematisch mit Fixed-Point und 2er-Komplement
  • unverändert zu Integer-Addition
  • CLA?

Multiplikation:

  • Overflow!
  • über Integer-Multiplikation mit Shift und Cut
  • Bsp. für Q5.3: 11011,011 * 10101,101 = 10 0100 1111,1111 11
    • wird zu 10 0100 1111,1111 11 (Overflow und Verlust von Genauigkeit)
    • Verlust von Genauigkeit akzeptabel
    • Overflow problematisch wie Carry/Overflow bei Addition/Subtraktion
    • einfach ignorieren oder Meldung: Berechnung fehlerhaft?
      • Meldung parallel und weiter rechnen?
      • sonst einfach ignorieren
  • Umgang mit 2er-Komplement/Signed
    • von IEEE Library in VHDL unterstützt
    • Problem: Erkennung Overflow (Unterschied positiv/negativ)
      • TODO

Fixed-Point:

  • ca. 0,3 Nachkommastellen Genauigkeit je Fraction-Bit
  • vermutlich 25x18 oder 18x18 Multiplier
    • 18 Bit nicht ausreichend
    • 2x18 Bit, also 36 Bit gesamt
  • 36 Bit gesamt:
    • Q26.10 mit 134 217 727 + 3,0
    • Q24.12 mit 8 388 607 + 3,6
  • besser: Generic je nach Problem bzw. Fraction-Size als Parameter
  • Notiz: implementiert (nur Multiplikation anders), funktioniert
Fraction-BitsGenauigkeit (Nachkommastellen) [Bits * log10(2)]
82,4
103,0
123,6
144,2
164,8
185,4
206,0
226,6
247,2
267,8
288,4
309,0
329,6
Integer-BitsMaximum [2^(Bits-1) - 1]
1632 767
20524 287
222 097 151
248 388 607
2633 554 431
28134 217 727
322 147 483 647

PRNG:

  • LFSR
    • primitives Polynomen für maximale Periodenlänge
    • LFSR kombinieren: unterschiedliche Polynome/Seeds, Bit-Mixing
    • Whitening
    • Notiz: LFSR implementiert, funktioniert
  • Xorshift

Veröffentlicht unter der ISC Lizenz.