Witam
Chciałem sobie zrobić klase wektorów (operująca na dużych ilościach danych (długie wektory)) danymi miały by być float'y. Pomyślałem że przy okazji mógłbym to zrobić korzystając z instrukcji SIMD procesora - konkretnie SSE2. Poczytalem troche i robiłem właśnie operator dodawania:
const SSE_Vector SSE_Vector::operator+(const SSE_Vector &vector) const
{
const SSE_Vector &THIS = *this;
SSE_Vector *RVal = new SSE_Vector(THIS._size);
int nLoop = THIS._size / 4;
float *t = new float[20];
__m128 *source1 = (__m128*)vector.tab;
__m128 *source2 = (__m128*)THIS.tab;
__m128 *rvalue = (__m128*)RVal->tab;
for(int i = 0; i < nLoop; ++i)
{
*rvalue = _mm_add_ps(*source1, *source2);
source1++;
source2++;
rvalue++;
}
return *RVal;
}
niestety wywala błąd odwołania do pamięci (acces volitation). Korzystałem z tego źródła: http://www.codeproject.com/cpp/sseintro.asp
PS. Nie jest to gotowy operator (może się zdarzyć że wektor będzie miał liczbę elementów nieparzystą ale rozwiąże to później na razie chce to uruchomić :) )