Ich versuche mich gerade in SIMD Programmierung mit C++. Dazu habe ich folgendes Codefragment:
Das obige funktioniert. Wenn ich jetzt aber dynamische Arrays wie folgt erstelle...
...dann schmiert mir das Programm zur Laufzeit ab. Daraus folgere ich, dass es zwischen den beiden Wegen, ein Array zu erstellen, einen gravierenden Unterschied zu geben. Daher meine Frage: Was genau ist der Unterschied zwischen:
?
Code:
#include <iostream>
#include <fvec.h>
#include <malloc.h>
float skalarproduktSSE(float *x, float *y)
{
F32vec4 *vecX = (F32vec4 *)x;
F32vec4 *vecY = (F32vec4 *)y;
F32vec4 tmp;
tmp = vecX[0] * vecY[0];
return tmp[0] + tmp[1] + tmp[2] + tmp[3];
}
int main()
{
float x[] = {1,2,3,4};
float y[] = {1,2,3,4};
std::cout << skalarproduktSSE(x,y) << std::endl;
}
Das obige funktioniert. Wenn ich jetzt aber dynamische Arrays wie folgt erstelle...
Code:
int n = 4;
float *x = (float*) malloc(n*sizeof(float));
float *y = (float*) malloc(n*sizeof(float));
for(int i=0; i<n; i++)
{
x[i] = i+1;
y[i] = i+1;
}
Code:
float x[4];
float *x = (float*) malloc(4*sizeof(float));