Wie kann ich zwei Wörter aus einem 128 bit register addieren

charfi90
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 8. Sep 2010 15:40

Wie kann ich zwei Wörter aus einem 128 bit register addieren

Beitrag von charfi90 »

Hallo,

wie kann ich zwei Wörter aus dem 128 bit Register auswählen und deren Werte addieren (beide Wörter sind im selben register) ?

wie kann ich ein Wort aus dem 128 bit Register extrahieren ?

viele Grüße

Benutzeravatar
Domac
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 160
Registriert: 4. Okt 2010 16:11

Re: Wie kann ich zwei Wörter aus einem 128 bit register addi

Beitrag von Domac »

Hallo!

Verstehe ich das an der Stelle richtig, dass du in deinem xmm register sowas stehen hast wie: [0x00000000, 0x00000000, 0x00001234, 0x00005678] und du möchtest jetzt 0x00001234 und 0x00005678 addieren? Dann brauchst du afaik ein extra xmm register (und damit beantworte ich gleich noch deine zweite Frage); movss (move single scalar) %xmm0, %xmm1 z.B. und dann spielst du noch ein bissel mit shufps und einer geeigneten maske (0xFD) rum um dein wort 0x00001234 an erste position zu bringen und kannst dann mittels addss (add single scalar) in xmm1 oder xmm0 adden.
Btw.: wenn du die ganzen 128 bit aus deinem xmm register "extrahieren" möchtest, dann bietet sich auch movups/movaps (move un/aligned packed scalar) an... schau dazu am besten mal in die folien... ich nehm aus faulheit immer movups, da ich dann die speicher adressen nicht alignen muss. :P

Gruß,
domac

EDIT: Schau mal in Folie 7, eine wahre Offenbarung. ;-)
Extend my dropbox space (here).
Thanks!

azrael
Erstie
Erstie
Beiträge: 22
Registriert: 8. Apr 2011 19:33

Re: Wie kann ich zwei Wörter aus einem 128 bit register addi

Beitrag von azrael »

Abgesehen davon gibt es auch noch den Befehl

Code: Alles auswählen

haddps
, der so einen horizontalen Add implementiert.

jdn
Neuling
Neuling
Beiträge: 8
Registriert: 4. Nov 2011 13:55

Re: Wie kann ich zwei Wörter aus einem 128 bit register addi

Beitrag von jdn »

haddps ist zwar eine nette Sache, aber SSE3. Darf das denn überhaupt verwendet werden?

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Wie kann ich zwei Wörter aus einem 128 bit register addi

Beitrag von mw1039 »

jdn hat geschrieben:haddps ist zwar eine nette Sache, aber SSE3. Darf das denn überhaupt verwendet werden?
Ihr duerft alles verwenden was auf den RBG-Poolrechnern laeuft und mittels der vorgegebenen CMakeLists.txt und den auf dem Aufgabenblatt angegebenen Kompilationsanweisungen kompiliert.

TBA
Neuling
Neuling
Beiträge: 10
Registriert: 20. Okt 2009 18:10

Re: Wie kann ich zwei Wörter aus einem 128 bit register addi

Beitrag von TBA »

Die Verwendung von SSE3 & SSE4 führt aber die Aufgabenstellung ad absurdum. Es wird noch einmal drauf hingewiesen, dass es für die Verwendung von transposeImage() nur die halbe Punktzahl gibt. Mit SSE ist es recht aufwendig die Matrix zu transponieren, oder ggf. das Ergebnis gleich transponiert zu speichern.
Wenn man auf einmal Skalarprodukte und waagerechte Addition (aus SSE4 & SSE3) nutzen kann wird die Aufgabenstellung auf einmal ziemlich trivial und vom Aufwand nur unwesentlich schwieriger als transposeImage() zu nutzen.
So etwas sollte von Anfang an klarer geklärt sein!

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Wie kann ich zwei Wörter aus einem 128 bit register addi

Beitrag von mw1039 »

Ich ueberblicke aktuell nicht, inwiefern das das Problem trivial macht, aber es ist doch gut, wenn die Aufgabenstellung mal sehr leicht ist, oder? ;)
TBA hat geschrieben:So etwas sollte von Anfang an klarer geklärt sein!
Die Aufgabenstellung ist diesbezueglich eigentlich sehr praezise. Sie sagt, dass es in SSE geloest werden soll, sie sagt, es soll auf den Poolrechnern laufen und sie sagt es soll mit den angegebenen Befehlen kompilieren. Ich habe es nicht getestet, aber wenn SSE3 & 4 das alles erfuellen, ist es zulaessig.

jdn
Neuling
Neuling
Beiträge: 8
Registriert: 4. Nov 2011 13:55

Re: Wie kann ich zwei Wörter aus einem 128 bit register addi

Beitrag von jdn »

Da in der Vorlesung nur SSE und minimal SSE2 behandelt wurde, und im Rahmen der Vorlesung und auch in der Dokumentation von Intel SSE für SSE1 steht, finde ich die Aufgabenstellung in der Hinsicht eben nicht eindeutig. Und wie TBA ansprach, mit Instruktionen für Skalarprodukte und horizontale Addition wären bei mir einige Stunden Arbeit weggefallen. Keine Ahnung was die Musterlösung macht, aber bei den Ansätzen die ich so gesehen habe hätte der Bedarf bestanden. ;)

Antworten

Zurück zu „Archiv“