Hallo Allerseits!
//sry dass meine frage jetzt nicht ganz zum thema passt, mich verwirrt das schon in single precision
ich hab eine (relativ doofe) Frage bezüglich den Funktionen von Shadern, bzw deren ALUs, besonders Vector ALUs verwirren mich da etwas.
Alle Shadereinheiten beschränken sich nun also auf die grundlegenen Rechenoperationen: ADD (Addition), SUB (Subtraktionen), NOT (Negierungen) oder MUL (Multiplikationen) und noch MADD (Kombination aus ADD+MUL).
soweit ich den Startpost verstanden habe, sind ADD, SUB und MUL binäre operatoren, NOT ein unärer und MADD ein ternärer.
also für (1-dim floating point) variablen a,b und c: //Sind alles beliebige Variablen?
ADD: a+b
SUB: a-b
MUL: a*b
NOT: -a
MADD: (a+b)*c oder (a*b)+c //da kenn ich mich schonmal nicht aus..in der schule heißt es ja punkt vor strich, aber kümmert das die shader, bzw ist die reihenfolge festgesetzt?
MADD+MUL: ((a*b)+c)*d das würde andersrum wohl keinen sinn machen, oder?
So und jetzt bei Vector ALUs, speziell denen der momentan aktuellen AMD/ATI Architektur:
The RV770 extends the R600's unified shader architecture by increasing the stream processing unit count to 800 units, which are grouped into 10 SIMD cores composed of 16 shader cores containing 4 FP MADD/DP ALUs and 1 MADD/shift/transcendental ALU.
schamlos von wikipedia kopiert
also kann jede der 5 ALUs in einem Shadercore entweder ein MADD(damit kann man ADD, SUB, MUL, und NOT erzeugen), oder eine spezialfunktion(DP, transcendental) ausführen.
außerdem heißt es die Shader architektur sei
SIMD, also Single Instruction Multiple Data, was wohl mit meiner Frage zusammenhängt.
heißt das, ich kann einen 5 dim float vektor(-variablen) nur mit einem skalar multiplizieren, und/oder einen anderen vektor hinzuaddieren, wobei dieser von der form (a,a,a,a,a) ist, also fünfmal den gleichen wert hat? und einen beliebigen 5dim float vektor negieren?
oder kann man noch eins von den folgenden machen:
zwei allgemeine 5dim float vektoren(-variablen) addieren
zwei allgemeine 5dim float vektoren(-variablen) multiplizieren (mit dem standardskalarprodukt, einer beliebigen bilinearform oder mittels einer x-beliebigen matrix)
und,und,und^^
und noch eine "kleine" frage:
wie würde das dann bei MIMD aussehen? fud hat (quellenlos) erwähnt die nächste amd/ati gpu architektur sei MIMD..
Grüße,
Alex
@fdsonne,
@Topic (nochmal und schön fett
)
hab mir den Startpost angeschaut, da MADD eine kombination von MUL und ADD ist, ist es 2 Flops wert.
also kann jeder shadercore 2 dp flops pro takt ausführen, da aber jede der 5 ALUs pro takt ein sp MADD ausführen kann hat der shadercore wiederrum 5*2=10 sp flops pro takt, also die fünfache sp rechenleistung.
edit: (das hundertste mittlerweile
)
seh ich das dann richtig, dass der rv870 dann 320 skalare DP-ALUs hat die MADD können, bzw 320 * 2D ALUs für MUL oder ADD, das wäre dann (auch von der programmierbarkeit -> skalar -> einfacher) fast gleichauf mit der spekulierten DP leistung von Fermi (256 DP shader multipliziert mit weit höherem shadertakt)