netfil:
Всем привет, имеется программа, умножающая матрицу на вектор:
Код:
ассемблерная вставка в ней написана с использованием SSE3 инструкций;
был бы очень признателен если кто-нибудь помог переписать ее под SSE1 инструкции.
Всем привет, имеется программа, умножающая матрицу на вектор:
Код:
{$APPTYPE CONSOLE} const n = 8; // столбцов m = 8; // строк var a: array[1..n,1..m] of smallint; // матрица c: array[1..m] of smallint; // вектор d,e: array[1..m] of integer; // результат i,j: integer; begin for i:=1 to n do for j:=1 to m do a[i,j]:=random(128); for i:=1 to m do c[i]:=random(128); for i:=1 to n do begin d[i]:=0; for j:=1 to m do inc(d[i],a[i,j]*c[j]); end; asm mov eax,(m*n-m)*2 mov ecx,n @1:pxor mm0,mm0 mov edx,m*2 @2:movq mm1,qword[a+eax+edx-8] pmaddwd mm1,qword[c+edx-8] paddd mm0,mm1 sub edx,8 jnz @2 phaddd mm0,mm0 movd dword[e+ecx*4-4],mm0 sub eax,m*2 loop @1 end; writeln('pascal':6,' ','asm':6); for i:=1 to m do writeln(d[i]:6,' : ',e[i]:6); readln; end. |
ассемблерная вставка в ней написана с использованием SSE3 инструкций;
был бы очень признателен если кто-нибудь помог переписать ее под SSE1 инструкции.