mikrocontroller.net

Forum: Compiler & IDEs bit permutation


Autor: tib (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe 8 Register mit natürlich 64 Bit. Diese sollen nun nach 
folgender Vorschrift permutiert werden: p(i) = i + i*15 mod 63, für i = 
0..63, d.h. wenn das alte erste Register so aussah: 0,1,2,3,4,5,6,7 usw. 
soll das neue so aussehen: 0,4,8,12,16,20,24,28 usw. Bisher habe ich 
dafür immer Shifts benutzt, d.h. ich leere ein Register und verteile so 
die Bits auf die entsprechenden Register. Diese Art der Permuation ist 
aber mit 128 Zyklen (2 pro Bit: Bit holen und Bit draufschieben) sehr 
ineffizient. Hat damit vielleicht jemand Erfahrung, wie man so etwas 
effizient implementieren kann, in (AVR) Assembler. Gibt es da eine 
Möglichkeit das als Look Up Table zu realisieren?

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Lookup-Tabelle mit 64 bit wäre aber doch schon relativ groß. Ich 
befürchte, soviel Speicher wirst Du nicht am AVR anschließen können bzw. 
bezahlen wollen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tib wrote:

> die Bits auf die entsprechenden Register. Diese Art der Permuation ist
> aber mit 128 Zyklen (2 pro Bit: Bit holen und Bit draufschieben) sehr
> ineffizient.

Warum ist das (6,4µs) ineffizient ?

Wie schnell kommen die Daten rein, wie müssen sie noch verarbeitet 
werden und wie schnell gehen sie raus ?

Wenn das alles zusammen wesentlich kürzer als 6,4µs dauert, dann ist es 
wirklich ineffizient.


Peter

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine einzige Tabelle geht natürlich nicht, aber die Input-Bytes lassen 
sich ja unabhängig voneinander auf jeweils 8 Bytes output abbilden, die 
dann zusammenaddiert werden. Macht 8*8 Tabellen mit je 256 Bytes = 16KB.

Der Haken daran: Das ist noch langsamer.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.