AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Simd/MMX, wie funktioniert das?

Ein Thema von Memnarch · begonnen am 11. Mär 2011 · letzter Beitrag vom 16. Mär 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

Simd/MMX, wie funktioniert das?

  Alt 11. Mär 2011, 19:51
Guten Abend,
Ich bin vor kurzem über die Begriffe MMX/SIMD gestossen. Kurz gegoogled und SIMD bedeutet, das ich mit einer operation, einen Pool von daten bearbeiten kann.

Hab ich das richtig verstanden? Bringt das geschwindigkeitsvorteile? Und wie kann man sowas umsetzen?(In Delphi versteht sich )
(Ich glaube hier gehts richtung ASM?)

MFG
Memnarch
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Simd/MMX, wie funktioniert das?

  Alt 11. Mär 2011, 20:18
Huhu!

SIMD = Single Instruction, Multiple Data. Die Idee ist z.B.: Ich habe hier zwei Mal 4 Bytes, und die will ich paarweise Addieren. Hm, 4 Bytes passen nebeneinander in ein Register, nun brauche ich nur noch eine Operation, die diesen Inhalt als "4 Bytes" statt "1 Integer" interpretiert - und schon bist du bei MMX. SSE(2/3) ist im Grunde das selbe mit Floats. Wann immer eine große Menge gleich strukturierter Daten stromartig gleiche Verarbeitung erfahren sollen - und zwar am Stück - können SIMD-Techniken helfen.
Problem: Die Art und Weise der Daten und Abläufe muss schon recht passend darauf ausgerichtet sein, um ununterbrochen "pumpen" zu können, und den Prozess nicht durch andeweitige Arbeit zu unterbrechen. Grund: MMX/SSE laufen in den ganz normalen FPU Registern ab, die dazu in einem speziellen Modus läuft. Tut man nun zwischendrin was anderes, muss die FPU ständig hin und her schalten. Für einen Compiler sind solche Szenarien teilweise extrem schwierig zu erkennen, da man "naiv hinprogrammiert" oft strukturell sehr weit von SIMD-Aussehen entfernt ist. Folgerung ist, dass nur wenige Compiler SIMD opcodes erzeugen, geschweige denn optimal. Ich weiss von .NET, dass es das in Ansätzen versucht, der geschriebene Code und die Datenstrukturen die man verwendet aber ganz erheblichen Einfluss darauf haben ob und wie gut das hin haut.
Delphi tut dies garnicht, aber immerhin kennen neuere Compiler die entsprechenden Mnemonics im Inline-Assembler. Um den wird man dafür dann allerdings auch nicht herum kommen, so dass sich das schon zu einer größeren (und sau interessanten) Lerneinheit ausweitet
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: Simd/MMX, wie funktioniert das?

  Alt 11. Mär 2011, 23:06
Dass das nicht leich wird, habe ich mir gedacht.

Geht SIMD auch, wenn zb

A+B*C (als beispiel) als formel wiederholt wird, allerdings für verschiedene datensätze. Geht da SIMD?

MFG
Memnarch
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Simd/MMX, wie funktioniert das?

  Alt 12. Mär 2011, 03:04
Jop, genau für sowas ist das sinnvoll. Im Grunde läuft das dann so ab: Du hast sagen wir 2 Sätze von A, B und C, die sind mal Singles. Für SSE würde man dann sagen: Push bitte A1 in den linken Teil des Registerstacks, A2 in den rechten. Dann push B1 links und B2 rechts, dann C1 links und C2 rechts. Dann, lieber Prozessor, tu so als wären das 2 Floats nebeneinander in deinen Registern, und mache "*", dann "+", und was dann da noch steht schlabber ich mir als Ergebnis wieder raus. Dann die nächsten zwei Stäze, usw. usf.
Das lohnt im Einzelfall schon für nur zwei Sätze, das richtige Potenzial nutzt man aber halt, wenn man sowas in größerer Menge durchnudeln kann, ohne die FPU wieder normal zu schalten zwischendrin - zumindest war das bei MMX so, SSE habe ich selbst noch nicht gebaut.
Wo ich mich von meinen aktuellen GPU Shader-Odysseen hab natzen lassen: Im Grunde ist es worscht, ob da immer die selben Berechnungen ablaufen, das war bei Vector- bzw. Stream-Processing wichtig, für bloßes SIMD nicht - sorry für die Verwirrung. Der "wichtige" Teil sind hier wirklich nur die Modeswitches, und selbst mit diesen kommt man schon besser weg als ohne SIMD - zumindest wenn man es einigermaßen geschickt anstellt, ist halt auch Übungs- und Ausprobierenssache, bis man die flotteste Kombi an Opcodes und Strukturen gefunden hat.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (12. Mär 2011 um 12:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: Simd/MMX, wie funktioniert das?

  Alt 12. Mär 2011, 15:44
Joar.. ich schreib nen Softwarerenderer(chtzeit versteht sich) und habe die Situation, das ich Chunks von 8*8 pixel relativ hintereinander gleich behandeln kann. Da wäre z.B die Multiplikation/Berechnung der Farbwerte am ende. Der benötigte farbwert des Pixels(RGB) wird aus 3 anderen farben bereichnet. Also sowas wie:

Rot := RotA*Faktor + RotB*Factor + RotC*Factor (Wobei mein hier auch schonwieder Factor ausklammern könnte)

dasselbe für blau und Grün. Da ich also mit dem Softwarerenderer ziemlich viele PIxel durchnudel, hört sich SIMD nach der guten lösung an^^. (Momentan arbeite ich mitner auflösung von 512*512)

(Nur schon ein Call von einer Anderen funktion im RAsterizer pro Pixel fällt verdammt ins gewicht^^. Hatte ich mal am anfang >.<)

Du hast nicht zufällig nen Link zu einer SIMD einführung? Von ASM habe ich grob ne Ahnung, aber nur grob, aber alles was ich bisher zu SIMD gefunden habe war nicht so toll dokumentiert und war meist gleich ne DinA4 seite lang^^".

MFG
Memnarch
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#6

AW: Simd/MMX, wie funktioniert das?

  Alt 12. Mär 2011, 19:32
Alles zum Thema SSE/MMX und Assembler findet man bei Intel

Intel Prozessor Manuals

Das ist allerdings definitiv mehr als eine DIN A4-Seite (ich würde mal 3-4000 schätzen - muss man aber natürlich nicht alles lesen). Ob man SSE oder MMX benutzt hängt von den Daten ab. Pauschal könnte man vielleicht sagen: MMX für Integer 8..32 Bit - SSE für Floatingpoint. Das Grund-Prinzip ist bei beiden Befehlssätzen das gleiche.

Ansonsten ist Wikipedia Dein Freund:

SIMD Extensions

Geändert von samso (12. Mär 2011 um 19:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#7

AW: Simd/MMX, wie funktioniert das?

  Alt 12. Mär 2011, 19:43
Vielen Dank

Und mit DINA4 war eine seite von reinem Assembler Code gemeint. Immer so nach dem Motto: Und so siehts aus, finde selber raus wies geht.


MFG
Memnarch
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#8

AW: Simd/MMX, wie funktioniert das?

  Alt 12. Mär 2011, 20:23
Bei mir in den Browser-Favoriten habe ich diesen Link. Ist eine kleine Übersicht (DinA4-Würdig), aber halt kein Tutorial.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#9

AW: Simd/MMX, wie funktioniert das?

  Alt 13. Mär 2011, 15:11
Sehr interressanter link, danke
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Simd/MMX, wie funktioniert das?

  Alt 14. Mär 2011, 09:08
Eine schon etwas ältere Unit von mir, hilft vieleicht beim Einstieg.
Angehängte Dateien
Dateityp: pas AlphaBlend.pas (3,6 KB, 58x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz