Archiv verlassen und diese Seite im Standarddesign anzeigen : Increment mit 60 Operanden gleichzeitig - wie das?!
Nasenbaer
2007-01-23, 20:25:20
Ist es (prinzipiell) möglich mit einer CPU 60 Operanden gleichzeitig in inkrementieren und dabei nur ein 64-Bit Register zur Verfügung zu haben?
In einer Vorlesung zu Prozessortechnik sagte unser Dozent das geht und wir solln mal überlegen wie. Da mir nach fast 2 Wochen immer noch keine zündende Idee kam wollte ich mal die Experten hier fragen. :)
Demirug
2007-01-23, 20:34:20
Neigt euer Dozent zu Fangfrage?
Wie viele Bits muss den einer dieser Operanten haben?
Nasenbaer
2007-01-23, 20:42:26
Neigt euer Dozent zu Fangfrage?
Wie viele Bits muss den einer dieser Operanten haben?
Achso ja 60 6-Bit Operanden und ein 64-Bit Register. :)
Ne ich denke, dass es seiner Ansicht nach möglich ist. Naja zur not löst er es morgen auf - poste ich denn mal, wenn es keiner weß.
Ich vermutete ja so nen Befehl wie man sie bei SSE etc. findet. Die berechnen auch mehrere Ergebnise gleichzeitig wenn ich mich nicht irre. Aber ich kann ja nicht Teile der Operanden außen vor lassen weil bei 011111 für das Inkrement alle Bits benötigt werden. Wie gesagt find das irgendwie komisch.
Demirug
2007-01-23, 21:03:38
Habt ihr auch Digitaltechnik?
Das was du nachbilden musst ist eine „Serielle 6-Bit Addierschaltung“. Da dein zweiter Summand immer 1 (bzw 000001) ist kannst du das ganze natürlich noch vereinfachen. Das ganze inkrementiert dann natürlich gleich 64 Operanten aber wenn er die Zahl genannt hätte wäre es wohl zu offensichtlich gewesen.
Nasenbaer
2007-01-23, 21:11:47
Jo naklar das hatten wir die beiden Semester davor. Aber kapier das trotzdem nicht. Wie sollen denn überhaupt irgendwo die 360 Bit vorgehalten werden können?! Bei so nem Adder hab ich 2 Schieberegister dann mit je 6 Bit - irgendwas versteh ich wohl nich. :/
Demirug
2007-01-23, 21:35:16
Der Trick dabei ist das du die 6 Bit pro Operant auf 6 64 Bit Variablen im Speicher verteilst. Also Bit 0 für alle 60 Operanten kommt in Variable 0. Bit 1 in Variable 1 usw.
Dein „Schieberegister“ emulierst du dann über einen Index orientierten Zugriff bzw. wenn du die ganze Sequenz ohne Schleife baust kannst du die Variablen auch direkt ansprechen.
Du brauchst 6 halbaddiere wobei der erste noch weiter vereinfacht werden kann. In Summe solltest du natürlich unter 60 Anweisungen kommen.
Nasenbaer
2007-01-25, 15:17:11
So hab nun die Lösung. Es ging ja wie gesagt darum alles in einem einzigen Takt zu machen und direkt aus nem Register heraus:
Man speichert im Register statt des Zahlenwertes einfach an Bit "Zahlenwert" eine 1.
Sprich hat man die Operanden 1, 4, 29, so speichert man im Register an Bit 1, 4 ,29 einfach eine 1. Zum Inkrementieren macht man dann einfach nen Links-Shift.
Natürlich geht, dass nur wenn man nur mit Mengen von Operanden arbeitet, da eine Vielfachtheit von Operanden größer 1 nicht berücksichtigt wird. Aber es soll wohl genug Anwendungen geben bei denen dieser Fall eintritt.
Man kann dann damit sogar eine komplette Arithmetik umsetzen - sprich Addition, Multiplikation usw.
Und bei AMD Prozessoren soll sowas wohl implementiert sein - war dann deren erweitere Antwort auf Intels MMX.
Wenn man die 64 Bits eines 64bit-Registers als 64 Operanden auffaßt,
ist es sogar möglich 64 Operanden gleichzeitig zu inkrementieren indem
man nämlich 0xFFFFFFFFFFFFFFFF draufaddiert.
Das unangenehme sind lediglich die Überläufe ins jeweils nächst höherwertige Bit. Wenn man die vermeiden wollte, könnte man jeweils ein "Carry"-Bit
freilassen. Dann hätte man aber nur 32 "Operanden" in einem 64bit-Register
zur Verfügung. Aber es gibt ja mittlerweile auch schöne 128bit-Register ...
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.