Registriert seit: 25. Mär 2007
29 Beiträge
|
Operationen mit Bitstrukturen optimieren
30. Okt 2017, 17:41
Hallo zusammen,
habe ein Programm geschrieben, welche aus einem Datenstrom einen anderen erzeugt, was auch läuft. Allerdings braucht es bei 60.000 zu konvertierenden Bytes ca. 30 Sekunden, was an meiner vielleicht umständlichen Programmierung liegt. Nun möchte ich es gerne etwas schneller machen.
Es gibt immer drei Bytes auszuwerten, in denen bestimmte Bit positive oder negative Schrittweiten darstellen.
Bit No, 7 6 5 4 3 2 1 0
Byte 1 y+1 y-1 y+9 y-9 x-9 x+9 x-1 x+1
Byte 2 y+3 y-3 y+27 y-27 x-27 x+27 x-3 x+3
Byte 3 ev1 ev2 y+81 y-81 x-81 x+81 set set
Momentan habe ich die drei Hex-Bytes mit HexToBins in Strings gewandelt.
Die Schrittweiten berechne ich mit
dx:= StrToInt(hs1[8])-StrToInt(hs1[7])+9*StrToInt(hs1[6])-9*StrToInt(hs1[5])+3*StrToInt(hs2[8])-3*StrToInt(hs2[7])+27*StrToInt(hs2[6])-27*StrToInt(hs2[5])+81*StrToInt(hs3[6])-81*StrToInt(hs3[5]);
dy:= StrToInt(hs1[1])-StrToInt(hs1[2])+9*StrToInt(hs1[3])-9*StrToInt(hs1[4])+3*StrToInt(hs2[1])-3*StrToInt(hs2[2])+27*StrToInt(hs2[3])-27*StrToInt(hs2[4])+81*StrToInt(hs3[3])-81*StrToInt(hs3[4]);
Nutze das Bit also als Multiplikator in einem Term aus den verschiedenen Summanden.
Letztendlich habe ich auch schon die Formel jeweils durch feste Zuweisungen ersetzt, um zu sehen, wo der Flaschenhals ist. Viel hat es nicht gebracht - unter 10%.
Hat jemand eventuell eine Idee? Wenn nicht, ist auch nicht so schlimm. Dann wartet man eben.
Vielen Dank
Torsten
|