schnelles array kopieren?
-
Hi,
ich habe 2 arrays:
float x[16]; float y[16];
in y sind werte drin und die will ich in x kopieren. bisher hab ich das nur so gemacht:
for (int i=0; i<16; ++i) x[i] = y[i]
nun, die schleife will ich endlich weg haben.
Könnte mir jemand einen code posten? ich möchte den gerne auseinander nehmen um was zu lernen
-
was hat das mit Assembler zu tun?
wie wäre nen
memcpy(x,y, sizeof(float) * 16);
?
-
wäre auch net gut:
void *memcpy(void *dest, const void *src, size_t n) { char *dp = dest; const char *sp = src; while (n-- > 0) *dp++ = *sp++; return dest; }
*lernen will*
-
*(__m128*)&x[0] = *(__m128*)&y[0]; *(__m128*)&x[4] = *(__m128*)&y[4]; *(__m128*)&x[8] = *(__m128*)&y[8]; *(__m128*)&x[12] = *(__m128*)&y[12];
rapso->greets();
-
@raspo:
wassn det für assembler? ????
-
Hi.
Irgendwie wird aus deiner Frage nicht ganz klar, ob du nun nach einer moeglichst schnellen Loesung, oder einer Loesung in Assembler suchst (diese ist dann uU. nicht so schnell).
Ansonsten guckst du mal hier:
Schnelles Arraykopieren?
-
-------- schrieb:
@raspo:
wassn det für assembler? ????das ist billigstes c für SSE, ich war zu faul die 8 instructions für den transfer zu tippen
rapso->greets();
-
hi rapso,
.. ich war gerade dabei dir eine dumme frage zu stellen.. aber ich habs während ich das hier schreibe begriffen. dein __mm128 ist ein "uniontype" mit 4 floats und du gehst dabei einfach davon aus dass dein compiler schon den entsprechenden befehl benutzen wird um 4 gebündelte floats auf einmal zu verschieben. ich schätze mal mit dem sse-befehlt: movaps
gruss
eviluser