C i Assembler SIMD, problemy z pamięcią

C i Assembler SIMD, problemy z pamięcią
IS
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 5 lat
  • Postów:49
0

Witam,
napisałem program w C ze wstawkami z Assemblera. Trochę poczytałem o SSE i zabrałem się do pracy, ale wyskakuje mi następujący błąd:

asm operand 1 probably doesn't match constraints

Niestety nie widzę błędu w swoim kodzie.

Kopiuj
#include <stdio.h>
#include <stdlib.h>

#define sizeOfNumbers 10
#define randSize 1000		

struct vector 
{
	float x0;
	float x1;
	float x2;
	float x3;
};

struct vector v1[sizeOfNumbers];
struct vector v2[sizeOfNumbers];
struct vector vAdd[sizeOfNumbers];

float randomNumbers()
{
	for(int i=0; i<sizeOfNumbers; i++)
	{
		v1[i].x0 = (float)(rand()%randSize)/100;
		v1[i].x1 = (float)(rand()%randSize)/100;
		v1[i].x2 = (float)(rand()%randSize)/100;
		v1[i].x3 = (float)(rand()%randSize)/100;

		v2[i].x0 = (float)(rand()%randSize)/100;
		v2[i].x1 = (float)(rand()%randSize)/100;
		v2[i].x2 = (float)(rand()%randSize)/100;
		v2[i].x3 = (float)(rand()%randSize)/100;
	}
}


struct vector addSIMD(struct vector a, struct vector b, struct vector sum)
{
	printf("dodawanko simd");
	asm(
		"movaps %1, %%xmm0 \n\t"	
		"movaps %2, %%xmm1 \n\t"
		"addps %%xmm0, %%xmm1 \n\t"
		"movaps %%xmm1, %0 \n\t"
		:"=r"(sum) 	
		:"r"(a),	
		"r"(b)		
	);

	return sum;
}

int main(void)
{	
	randomNumbers();

	for(int i=0; i<sizeOfNumbers; i++)
	{
		vAdd[i] = addSIMD(v1[i],v2[i],vAdd[i]);
	}

	return 0;
}

Edit:
Po zmianie "r" na "m"(z rejestrów na pamięć), program się kompiluje, ale jest nadal naruszenie ochrony pamięci(zrzut pamięci).

Dodatkowo program tworzę tak:

Kopiuj
gcc test.c -c -o test.o
gcc test.o -o test
edytowany 3x, ostatnio: hauleth
vpiotr
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
0
KA
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 4 lata
  • Postów:192
0

Zmień movaps na movups albo zapewnij, że tablice z danymi są wyrównane do 16 bajtów. Inaczej może polecieć wyjątek.

PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:5 miesięcy
  • Postów:2787
0
Isild napisał(a):

Niestety nie widzę błędu w swoim kodzie.

Chciałbym móc tak mówić :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.