bit permutation

Gast #578123
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?
#578203
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
Gast #578219
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren