Физик
Погугли на тему CodeGear, и Turbo Delphi, ладно? Потом расскажешь, что нарыл... И не надо говорить того, о чем не знаешь.
			
		Модератор: Модераторы


   .file   "matmul.for"
   .local   a.0
   .comm   a.0,5120000,32
   .local   b.1
   .comm   b.1,5120000,32
   .local   c.2
   .comm   c.2,5120000,32
   .data
   .align 4
   .type   __g77_cilist_0.3,@object
   .size   __g77_cilist_0.3,20
__g77_cilist_0.3:
   .long   0
   .long   6
   .long   0
   .long   0
   .long   0
   .align 4
   .type   __g77_cilist_1.5,@object
   .size   __g77_cilist_1.5,20
__g77_cilist_1.5:
   .long   0
   .long   6
   .long   0
   .long   __g77_format_10.4
   .long   0
   .type   __g77_format_10.4,@object
   .size   __g77_format_10.4,11
__g77_format_10.4:
   .ascii   "(2X,2F16.6)"
   .align 4
   .type   __g77_cilist_2.6,@object
   .size   __g77_cilist_2.6,20
__g77_cilist_2.6:
   .long   0
   .long   6
   .long   0
   .long   0
   .long   0
   .section   .rodata
.LC2:
   .ascii   "N = "
.LC8:
   .ascii   " TIME CALCULATION: "
.LC10:
   .ascii   "  MFLOPS: "
.LC11:
   .section   .rodata.cst8,"aM",@progbits,8
   .align 8
.LC0:
   .long   0
   .long   1104052126
   .section   .rodata.cst4,"aM",@progbits,4
   .align 4
.LC3:
   .long   1
   .align 4
.LC4:
   .long   9
   .align 4
.LC5:
   .long   800
   .align 4
.LC6:
   .long   3
   .section   .rodata.cst8
   .align 8
.LC7:
   .long   0
   .long   1093567616
   .section   .rodata.cst4
   .align 4
.LC9:
   .long   5
   .text
   .p2align 2,,3
.globl MAIN__
   .type   MAIN__,@function
MAIN__:
   pushl   %ebp
   movl   %esp, %ebp
   pushl   %edi
   pushl   %esi
   pushl   %ebx
   subl   $12876, %esp
   movl   $1, %edi
   movl   $799, %esi
   fld1
.L12:
   pushl   %edi
   leal   6400(,%edi,8), %eax
   fildl   (%esp)
   leal   b.1-6408(%eax), %edx
   movl   $1, %ebx
   movl   $799, %ecx
   addl   $4, %esp
   addl   $a.0-6408, %eax
   .p2align 2,,3
.L11:
.L10:
   fstl   (%eax)
   fld   %st(1)
   pushl   %ebx
   fidivl   (%esp)
   fstpl   (%edx)
   addl   $4, %esp
   addl   $6400, %edx
   addl   $6400, %eax
   incl   %ebx
   decl   %ecx
   jns   .L11
   fstp   %st(0)
   incl   %edi
   decl   %esi
   jns   .L12
   fstp   %st(0)
   subl   $12, %esp
   pushl   $__g77_cilist_0.3
   call   s_wsle
   pushl   $4
   pushl   $.LC2
   pushl   $.LC3
   pushl   $.LC4
   call   do_lio
   addl   $32, %esp
   pushl   $4
   pushl   $.LC5
   pushl   $.LC3
   pushl   $.LC6
   call   do_lio
   call   e_wsle
   call   dsecnd_
   fstpl   -12832(%ebp)
   movl   $1, %edi
   addl   $16, %esp
   movl   $799, -12844(%ebp)
   fldz
   movl   $c.2-6400, -12860(%ebp)
   movl   $a.0-6400, -12864(%ebp)
.L34:
   movl   -12864(%ebp), %ecx
   movl   $799, %esi
   addl   $6400, %ecx
   leal   -6424(%ebp), %ebx
   .p2align 2,,3
.L21:
   movl   (%ecx), %eax
   movl   4(%ecx), %edx
   movl   %eax, (%ebx)
   movl   %edx, 4(%ebx)
   addl   $6400, %ecx
   addl   $8, %ebx
   decl   %esi
   jns   .L21
   movl   -12860(%ebp), %edx
   addl   $6400, %edx
   movl   $799, -12848(%ebp)
   fld   %st(0)
   leal   800(%edi), %esi
   movl   $b.1-8, -12856(%ebp)
   movl   %edx, -12876(%ebp)
.L33:
   movl   -12876(%ebp), %eax
   movl   $0, (%eax)
   movl   $0, 4(%eax)
   movl   -12856(%ebp), %ebx
   movl   $799, %ecx
   movl   %esi, -12852(%ebp)
   fld   %st(0)
   leal   -6424(%ebp), %edx
   leal   8(%ebx), %eax
   .p2align 2,,3
.L31:
.L30:
   fldl   (%eax)
   fmull   (%edx)
   addl   $8, %eax
   addl   $8, %edx
   decl   %ecx
   faddp   %st, %st(1)
   jns   .L31
.L32:
   movl   -12852(%ebp), %edx
   movl   $c.2-6408, %ecx
   fstpl   (%ecx,%edx,8)
   addl   $800, %esi
   addl   $6400, -12876(%ebp)
   addl   $6400, -12856(%ebp)
   decl   -12848(%ebp)
   jns   .L33
   fstp   %st(0)
   addl   $8, -12860(%ebp)
   addl   $8, -12864(%ebp)
   incl   %edi
   decl   -12844(%ebp)
   jns   .L34
   fstp   %st(0)
   call   dsecnd_
   fsubl   -12832(%ebp)
   subl   $12, %esp
   fstl   -12832(%ebp)
   fldl   .LC0
   fxch   %st(1)
   fmull   .LC7
   fdivrp   %st, %st(1)
   pushl   $__g77_cilist_1.5
   fstpl   -12840(%ebp)
   call   s_wsfe
   addl   $12, %esp
   pushl   $8
   pushl   $c.2
   pushl   $.LC3
   call   do_fio
   addl   $12, %esp
   pushl   $8
   pushl   $c.2+5113600
   pushl   $.LC3
   call   do_fio
   addl   $12, %esp
   pushl   $8
   pushl   $c.2+6392
   pushl   $.LC3
   call   do_fio
   addl   $12, %esp
   pushl   $8
   pushl   $c.2+5119992
   pushl   $.LC3
   call   do_fio
   call   e_wsfe
   movl   $__g77_cilist_2.6, (%esp)
   call   s_wsle
   pushl   $19
   pushl   $.LC8
   pushl   $.LC3
   pushl   $.LC4
   call   do_lio
   addl   $32, %esp
   pushl   $8
   leal   -12832(%ebp), %esi
   pushl   %esi
   pushl   $.LC3
   pushl   $.LC9
   call   do_lio
   pushl   $10
   pushl   $.LC10
   pushl   $.LC3
   pushl   $.LC4
   call   do_lio
   addl   $32, %esp
   pushl   $8
   leal   -12840(%ebp), %ebx
   pushl   %ebx
   pushl   $.LC3
   pushl   $.LC9
   call   do_lio
   call   e_wsle
   popl   %eax
   popl   %edx
   pushl   $0
   pushl   $.LC11
   call   s_stop
.Lfe1:
   .size   MAIN__,.Lfe1-MAIN__
   .p2align 2,,3
.globl dsecnd_
   .type   dsecnd_,@function
dsecnd_:
   pushl   %ebp
   movl   %esp, %ebp
   leal   -16(%ebp), %edx
   subl   $36, %esp
   pushl   %edx
   call   G77_etime_0
   fstps   -4(%ebp)
   flds   -4(%ebp)
   addl   $16, %esp
   leave
   ret
.Lfe2:
   .size   dsecnd_,.Lfe2-dsecnd_
   .section   .note.GNU-stack,"",@progbits
   .ident   "GCC: (GNU) 3.2.3 20030502 (Red Hat Linux 3.2.3-47.fc4)"

 DO 2 I = 1,N
DO L = 1,N
ROW(L) = A(I,L)
END DO
DO 2 J = 1,N
C(I,J) =0.0d0
DO 3 K = 1,N
3 C(I,J) = C(I,J) + ROW(K)*B(K,J)
2 CONTINUE       DO 2 I = 1,N
      DO 2 J = 1,N
      C(I,J) =0.0d0
      DO 3 K = 1,N
  3   C(I,J) = C(I,J) + A(I,K)*B(K,J)
  2   CONTINUE


volvo877 писал(а):И не надо говорить того, о чем не знаешь.

shade писал(а):Инетесно, заменил
- Код: Выделить всё
DO 2 I = 1,N
DO L = 1,N
ROW(L) = A(I,L)
END DO
DO 2 J = 1,N
C(I,J) =0.0d0
DO 3 K = 1,N
3 C(I,J) = C(I,J) + ROW(K)*B(K,J)
2 CONTINUE
на
- Код: Выделить всё
DO 2 I = 1,N
DO 2 J = 1,N
C(I,J) =0.0d0
DO 3 K = 1,N
3 C(I,J) = C(I,J) + A(I,K)*B(K,J)
2 CONTINUE
(убрал ROW(L) = A(I, L) и т.с.) и фортран справился с задачей хуже fpc, в 2 раза
Рождённый_в_СССР писал(а):не вычисляя всё, а вычисляя только ту часть, которую потом нужно выводить
Я бы так не сказал, а вот действительно мощная контора Borland почему то прекратила поддержку Паскаля.

А такое бывает? Я сильно сомневаюсь....
 по идее мы его должны легко обогнать...
 по идее мы его должны легко обогнать...
 DO 2 I = 1,N 
      DO 2 J = 1,N 
      C(I,J) =0.0d0 
      DO 3 K = 1,N 
  3   C(I,J) = C(I,J) + A(I,K)*B(K,J) 
  2   CONTINUE
 Pascal       фортран
  j                    i 
  l                    l
  i                    j
  k                   k
  C(I,J) = C(I,J) + ROW(K)*B(K,J) -> с[j,i]:=c[j,i]+col[k]*b[k,i]
  а не как ни
   c[i,j] := c[i,j] + a[i,k]*col[k];
# [39] for k := 1 to n do s:=s+col[k]*a[i,k];
        movw    U_P$PROGRAM_N,%si
        movw    $1,U_P$PROGRAM_K
        cmpw    U_P$PROGRAM_K,%si
        jl      .L69
        decw    U_P$PROGRAM_K
        .balign 4
.L70:
        incw    U_P$PROGRAM_K
        movswl  U_P$PROGRAM_K,%eax
        imull   $16000,%eax,%edx
        movswl  U_P$PROGRAM_I,%edi
        movsd   U_P$PROGRAM_COL-8(,%eax,8),%xmm0
        mulsd   U_P$PROGRAM_A-16008(%edx,%edi,8),%xmm0
        movswl  U_P$PROGRAM_J,%eax
        imull   $16000,%eax
        movswl  U_P$PROGRAM_I,%edx
        addsd   U_P$PROGRAM_C-16008(%eax,%edx,8),%xmm0
        movswl  U_P$PROGRAM_J,%eax
        imull   $16000,%eax
        movswl  U_P$PROGRAM_I,%edx
        movsd   %xmm0,U_P$PROGRAM_C-16008(%eax,%edx,8)
        cmpw    U_P$PROGRAM_K,%si
        jg      .L70  
# [39] for k := 1 to n do s:=s+col[k]*rol[k];
        movw    U_P$PROGRAM_N,%dx
        movw    $1,U_P$PROGRAM_K
        cmpw    U_P$PROGRAM_K,%dx
        jl      .L76
        decw    U_P$PROGRAM_K
        .balign 4
.L77:
        incw    U_P$PROGRAM_K
        movswl  U_P$PROGRAM_K,%eax
        movl    %eax,%ecx
        movsd   U_P$PROGRAM_COL-8(,%eax,8),%xmm0
        mulsd   U_P$PROGRAM_ROL-8(,%ecx,8),%xmm0
        addsd   U_P$PROGRAM_S,%xmm0
        movsd   %xmm0,U_P$PROGRAM_S
        cmpw    U_P$PROGRAM_K,%dx
        jg      .L77
.L76:              
uses Dos;
var
i,j,k,l,n : integer;
a,b,c : array [1..2000,1..2000] of double;
col,rol : array [1..2000] of double;
op,mf,s : double;
tim1,tim2,tim : real;
function second :real;
var
h1,m1,s1,ds1 : word;
begin
GetTime(h1,m1,s1,ds1);
second := h1*3600+m1*60+s1+0.01*ds1;
end;
begin
n := 2000;
op := (2.0*n-1)*n*n;
for i:=1 to n do
for j:=1 to n do
begin
a[i,j]:=i;
b[i,j]:=1.0/j;
c[i,j]:=0;
end;
writeln(' N = ', n);
tim1 := second;
for j:= 1 to n do
begin
     for l := 1 to n do col[l]:=a[j,L];
     for i := 1 to n do
         begin
              for l := 1 to n do rol[l]:=b[L,i];
              s:=0;
              for k := 1 to n do s:=s+col[k]*rol[k];
              c[j,i]:=s;
         end;
end;
tim2:= second;
tim := tim2 -tim1;
mf := op/(tim*1000000.0);
writeln( c[1,1],c[1,n]);
writeln( c[n,1],c[n,n]);
writeln(' TIME CALCULATION: ', tim:6:3,' MFLOPS: ', MF);
end.

Рождённый_в_СССР писал(а):программа:
Код:
uses Dos;
var
i,j,k,l,n : integer;
a,b,c : array [1..2000,1..2000] of double;
col,rol : array [1..2000] of double;
op,mf,s : double;
tim1,tim2,tim : real;
function second :real;
var
h1,m1,s1,ds1 : word;
begin
GetTime(h1,m1,s1,ds1);
second := h1*3600+m1*60+s1+0.01*ds1;
end;
begin
n := 2000;
op := (2.0*n-1)*n*n;
for i:=1 to n do
for j:=1 to n do
begin
a[i,j]:=i;
b[i,j]:=1.0/j;
c[i,j]:=0;
end;
writeln(' N = ', n);
tim1 := second;
for j:= 1 to n do
begin
for l := 1 to n do col[l]:=a[j,L];
for i := 1 to n do
begin
for l := 1 to n do rol[l]:=b[L,i];
s:=0;
for k := 1 to n do s:=s+col[k]*rol[k];
c[j,i]:=s;
end;
end;
tim2:= second;
tim := tim2 -tim1;
mf := op/(tim*1000000.0);
writeln( c[1,1],c[1,n]);
writeln( c[n,1],c[n,n]);
writeln(' TIME CALCULATION: ', tim:6:3,' MFLOPS: ', MF);
end.
ключи:
1) fpc -CfSSE2 -O2 1.pas
2) fpc -O3 1.pas
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1