[SSE] Problem z pamiecia - klasa wektorow

0

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ć :) )

0

Spróbuj to uruchomić na jakimś debuggerze, np gdb.

0

Znalazłem bład wystarczyło inaczej [diabel] przydzielić pamieć :)

Temat do kasacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1