public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/29549]  New: matmul slow for complex matrices
@ 2006-10-22 15:58 tobias dot burnus at physik dot fu-berlin dot de
  2006-11-04 14:15 ` [Bug fortran/29549] " jb at gcc dot gnu dot org
                   ` (13 more replies)
  0 siblings, 14 replies; 15+ messages in thread
From: tobias dot burnus at physik dot fu-berlin dot de @ 2006-10-22 15:58 UTC (permalink / raw)
  To: gcc-bugs

Comparison by Francois-Xavier:
http://www.eleves.ens.fr/home/coudert/timing.png
(bottom row: complex numbers; black gfortran matmul, others: optimized
libraries).

See also http://gcc.gnu.org/ml/gcc-patches/2006-10/msg00343.html


-- 
           Summary: matmul slow for complex matrices
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tobias dot burnus at physik dot fu-berlin dot de


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
@ 2006-11-04 14:15 ` jb at gcc dot gnu dot org
  2006-11-04 20:34 ` jb at gcc dot gnu dot org
                   ` (12 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2006-11-04 14:15 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from jb at gcc dot gnu dot org  2006-11-04 14:15 -------
Confirmed.

I noticed it too when I was reviewing FX's external-blas patch. But the complex
version of matmul is generated from the same m4 sources as the real versions.
It might be that the middle- and/or back-end generates inefficient code for
complex arithmetic in general?


-- 

jb at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jb at gcc dot gnu dot org
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2006-11-04 14:15:02
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
  2006-11-04 14:15 ` [Bug fortran/29549] " jb at gcc dot gnu dot org
@ 2006-11-04 20:34 ` jb at gcc dot gnu dot org
  2006-11-04 21:24 ` jb at gcc dot gnu dot org
                   ` (11 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2006-11-04 20:34 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from jb at gcc dot gnu dot org  2006-11-04 20:34 -------
I did some experimenting, and it seems the C version of a trivial matrix
multiply program is much slower than the same program written in Fortran?

Switch the commented declarations and c[i][j] = 0 in the loop to get the float
version.

#include <stdio.h>
#include <complex.h>
#include <sys/time.h>
#include <time.h>

int main(void)
{
  const int n = 300;
  complex float a[n][n], b[n][n], c[n][n];
  //float a[n][n], b[n][n], c[n][n];
  int i, j, k, tc;

  struct timeval tv, tv2;
  float res;
  tc = 0;
  gettimeofday (&tv, NULL);
  for (i = 0; i < n; i++)
    {
      for (j = 0; j < n; j++)
        {
          c[i][j] = 0.0 + 0.0*I;
          //c[i][j] = 0.0;
          for (k = 0; k < n; k++)
            {
            //      printf("i %i, j %i, k %i\n", i, j, k);
              c[i][j] = c[i][j] + a[i][k] * b[k][j];
              tc++;
            }
        }
    }
  gettimeofday (&tv2, NULL);
  res = tv2.tv_sec - tv.tv_sec + (tv2.tv_usec - tv.tv_usec) / 1000000.0;
  printf ("gemm time: %f\n", res);
  printf ("trip count: %i\n", tc);
}


Fortran version:

program mymatmul
  implicit none
  integer, parameter :: n = 300
  real, dimension(n,n) :: rr, ri
  complex, dimension(n,n) :: a,b,c
  real :: t1, t2
  integer :: i, j, k

  call random_number (rr)
  call random_number (ri)
  a = cmplx (rr, ri)
  call random_number (rr)
  call random_number (ri)
  b = cmplx (rr, ri)

  call cpu_time (t1)

  do j = 1, n
     do i = 1, n
        c(i,j) = cmplx (0., 0.)
        do k = 1, n
           c(i,j) = c(i,j) + a(i,k) * b(k,j)
        end do
     end do
  end do

  call cpu_time (t2)
  write (*,'(F8.4)') t2-t1
  open (10, file="cmatrix", form='unformatted')
  write (10) c
  close (10)

end program mymatmul

Fortran version with real instead of complex:

program mymatmul
  implicit none
  integer, parameter :: n = 300
  real, dimension(n,n) :: a,b,c
  real :: t1, t2
  integer :: i, j, k, tc

  call random_number (a)
  call random_number (b)

  call cpu_time (t1)

  tc = 0
  do j = 1, n
     do i = 1, n
        c(i,j) = 0.
        do k = 1, n
           c(i,j) = c(i,j) + a(i,k) * b(k,j)
           tc = tc + 1
        end do
     end do
  end do

  call cpu_time (t2)
  write (*,'(F8.4)') t2-t1
  write (*, *) 'Trip count: ', tc
  open (10, file="rmatrix", form='unformatted')
  write (10) c
  close (10)

end program mymatmul

And my results:

C version, complex:
-O2
    2.0 s
-ffast-math
    0.9
gfortran -O2:
0.32

float:
-O2     0.6 s
fast math makes no difference!

gfortran -O2 -g
0.07


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
  2006-11-04 14:15 ` [Bug fortran/29549] " jb at gcc dot gnu dot org
  2006-11-04 20:34 ` jb at gcc dot gnu dot org
@ 2006-11-04 21:24 ` jb at gcc dot gnu dot org
  2006-11-04 22:17 ` jb at gcc dot gnu dot org
                   ` (10 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2006-11-04 21:24 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from jb at gcc dot gnu dot org  2006-11-04 21:24 -------
Well, redoing the C benchmark above to use 1d arrays and manual index
calculations, the results are now essentially the same as for the Fortran
version. And a commercial compiler produces about the same results for the
Fortran version as gfortran, which means the reason for our poor complex matmul
performance lies elsewhere.

#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
#include <sys/time.h>
#include <time.h>

int main(void)
{
  int n = 300;
  complex float *a, *b, *c;
  int i, j, k, tc;
  a = malloc (n*n * sizeof (*a));
  b = malloc (n*n * sizeof (*b));
  c = malloc (n*n * sizeof (*c));
  struct timeval tv, tv2;
  float res;
  FILE *fp;

  tc = 0;
  for (i = 0; i < n*n; i++)
    {
      a[i] = i*10.0 + 100.0*I;
      b[i] = 1.0 + 42.0*I;
      c[i] = 0.0 + 0.0*I;
    }

  gettimeofday (&tv, NULL);

  for (i = 0; i < n; i++)
    {
      for (j = 0; j < n; j++)
        {
          c[i*n + j] = 0.0 + 0.0*I;
          for (k = 0; k < n; k++)
            {
              c[i*n + j] = c[i*n + j] + a[i*n + k] * b[k*n + j];
              tc++;
            }
        }
    }
  gettimeofday (&tv2, NULL);
  res = tv2.tv_sec - tv.tv_sec + (tv2.tv_usec - tv.tv_usec) / 1000000.0;
  printf ("gemm time: %f\n", res);
  fp = fopen ("c-matrix", "w");
  for (i = 0; i < n; i++)
    {
      for (j = 0; j<n; j++)
        {
          fprintf (fp, "%f ", c[i*n + j]);
        }
      fprintf (fp, "\n");
    }
  fclose (fp);
  printf ("trip count: %i\n", tc);
}


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (2 preceding siblings ...)
  2006-11-04 21:24 ` jb at gcc dot gnu dot org
@ 2006-11-04 22:17 ` jb at gcc dot gnu dot org
  2008-02-10 19:20 ` jb at gcc dot gnu dot org
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2006-11-04 22:17 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from jb at gcc dot gnu dot org  2006-11-04 22:16 -------
For the C version with 1d arrays, the benchmark results, with gfortran results
for comparison, are

Complex version:
-O3 funroll-loops -mfpmath=sse -msse2
    1.32
above + fast-math
    0.38
gfortran -O2:
0.32

Real version:
0.07 s
fast-math, same thing.

gfortran -O2 -g
0.07

So it seems the culprit is some optimization that -ffast-math enables that
makes a huge difference for C99 complex arithmetic. However, compiling matmul
in libgfortran with -ffast-math almost certainly won't fly.. 

So ideally we should find exactly what flag enables this performance
improvement, and see if we can enable only that without bringing in all the
-ffast-math baggage. Or then we should bugger the optimizer guys, if this is an
optimization that could be enabled also without -ffast-math.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (3 preceding siblings ...)
  2006-11-04 22:17 ` jb at gcc dot gnu dot org
@ 2008-02-10 19:20 ` jb at gcc dot gnu dot org
  2008-02-10 22:48 ` tkoenig at gcc dot gnu dot org
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2008-02-10 19:20 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from jb at gcc dot gnu dot org  2008-02-10 19:19 -------
The big culprit seems to be -fcx-limited-range. The other flags enabled by
-ffast-math help very little.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (4 preceding siblings ...)
  2008-02-10 19:20 ` jb at gcc dot gnu dot org
@ 2008-02-10 22:48 ` tkoenig at gcc dot gnu dot org
  2008-02-16 18:50 ` fxcoudert at gcc dot gnu dot org
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: tkoenig at gcc dot gnu dot org @ 2008-02-10 22:48 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #6 from tkoenig at gcc dot gnu dot org  2008-02-10 22:47 -------
(In reply to comment #5)
> The big culprit seems to be -fcx-limited-range. The other flags enabled by
> -ffast-math help very little.

C has some strange rules for complex types, which are mandated by the
C standard and aren't much use for other languages.

This is controlled by the variable flag_complex_method.  For C, this
is either 2 (meaning full C rules) or 0, which implies limited range
for complex division.  Complex multiplication can be expanded into
a libcall for flag_complex_method == 2 under circumstances I don't
understand (line 981, tree-complex.c).

Fortran usually has 1, which means sane rules for complex division
and multiplication.

Unfortunately, our matmul routines are written in C, so we
get what we don't need in Fortran - full C rules and possibly
a call to a library routine.

Solutions?  We could introduce an option to set flag_complex_method to
1 in C.  We could also set -fcx-limited-range for our matmul
routines, which should be safe as they don't use complex division
(at least they should not :-)

CC:ing rth as he wrote the code in question.


-- 

tkoenig at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rth at gcc dot gnu dot org,
                   |                            |tkoenig at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (5 preceding siblings ...)
  2008-02-10 22:48 ` tkoenig at gcc dot gnu dot org
@ 2008-02-16 18:50 ` fxcoudert at gcc dot gnu dot org
  2008-02-16 19:01 ` fxcoudert at gcc dot gnu dot org
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: fxcoudert at gcc dot gnu dot org @ 2008-02-16 18:50 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #7 from fxcoudert at gcc dot gnu dot org  2008-02-16 18:50 -------
Thomas is right: -fcx-limited-range sets flag_complex_method to 0, but already
with flag_complex_method == 1 we have some rather good figures. Here are the
execution times of 300x300 matmul on my MacBook Pro (i386-apple-darwin8.11.1):

  - a home-made triple do loop in Fortran (Janne's comment #2) is 0.1876 sec
  - unpatched matmul is 0.5499 sec
  - matmul compiled with flag_complex_method == 1 is 0.1448 sec

The following patch is what I used to benchmark: it creates a
-fcx-fortran-rules (of course, we do know that Fortran actually rules, but
hiding it in an option name is a clever way for people to slowly start
realizing it) option that sets flag_complex_method to 1, and uses it to compile
libgfortran's matmul routines.


Index: gcc/toplev.c
===================================================================
--- gcc/toplev.c        (revision 132353)
+++ gcc/toplev.c        (working copy)
@@ -2001,6 +2001,10 @@
   if (flag_cx_limited_range)
     flag_complex_method = 0;

+  /* With -fcx-fortran-rules, we do something in-between cheap and C99.  */
+  if (flag_cx_fortran_rules)
+    flag_complex_method = 1;
+
   /* Targets must be able to place spill slots at lower addresses.  If the
      target already uses a soft frame pointer, the transition is trivial.  */
   if (!FRAME_GROWS_DOWNWARD && flag_stack_protect)
Index: gcc/common.opt
===================================================================
--- gcc/common.opt      (revision 132353)
+++ gcc/common.opt      (working copy)
@@ -390,6 +390,10 @@
 Common Report Var(flag_cx_limited_range) Optimization
 Omit range reduction step when performing complex division

+fcx-fortran-rules
+Common Report Var(flag_cx_fortran_rules) Optimization
+Complex multiplication and division follow Fortran rules
+
 fdata-sections
 Common Report Var(flag_data_sections) Optimization
 Place data items into their own section
Index: libgfortran/Makefile.am
===================================================================
--- libgfortran/Makefile.am     (revision 132353)
+++ libgfortran/Makefile.am     (working copy)
@@ -636,7 +636,7 @@
 install-pdf:

 # Turn on vectorization and loop unrolling for matmul.
-$(patsubst %.c,%.lo,$(notdir $(i_matmul_c))): AM_CFLAGS += -ftree-vectorize
-fs
+$(patsubst %.c,%.lo,$(notdir $(i_matmul_c))): AM_CFLAGS += -ftree-vectorize
-fs
 # Logical matmul doesn't vectorize.
 $(patsubst %.c,%.lo,$(notdir $(i_matmull_c))): AM_CFLAGS += -funroll-loops



-- 

fxcoudert at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fxcoudert at gcc dot gnu dot
                   |                            |org
           Keywords|                            |patch


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (6 preceding siblings ...)
  2008-02-16 18:50 ` fxcoudert at gcc dot gnu dot org
@ 2008-02-16 19:01 ` fxcoudert at gcc dot gnu dot org
  2008-02-16 21:59 ` rguenth at gcc dot gnu dot org
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: fxcoudert at gcc dot gnu dot org @ 2008-02-16 19:01 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #8 from fxcoudert at gcc dot gnu dot org  2008-02-16 19:00 -------
The Makefile.am part was messed up by my terminal: 

Index: libgfortran/Makefile.am
===================================================================
--- libgfortran/Makefile.am     (revision 132353)
+++ libgfortran/Makefile.am     (working copy)
@@ -636,7 +636,7 @@
 install-pdf:

 # Turn on vectorization and loop unrolling for matmul.
-$(patsubst %.c,%.lo,$(notdir $(i_matmul_c))): AM_CFLAGS += -ftree-vectorize
-funroll-loops
+$(patsubst %.c,%.lo,$(notdir $(i_matmul_c))): AM_CFLAGS += -ftree-vectorize
-funroll-loops -fcx-fortran-rules
 # Logical matmul doesn't vectorize.
 $(patsubst %.c,%.lo,$(notdir $(i_matmull_c))): AM_CFLAGS += -funroll-loops


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (7 preceding siblings ...)
  2008-02-16 19:01 ` fxcoudert at gcc dot gnu dot org
@ 2008-02-16 21:59 ` rguenth at gcc dot gnu dot org
  2008-02-16 22:33 ` jb at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-02-16 21:59 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #9 from rguenth at gcc dot gnu dot org  2008-02-16 21:58 -------
Actually the middle-end parts are ok for 4.4 if you add proper documentation
for
the flag.  But please post it once stage1 opens.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (8 preceding siblings ...)
  2008-02-16 21:59 ` rguenth at gcc dot gnu dot org
@ 2008-02-16 22:33 ` jb at gcc dot gnu dot org
  2008-02-19 19:34 ` jb at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2008-02-16 22:33 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #10 from jb at gcc dot gnu dot org  2008-02-16 22:33 -------
Actually, we could compile the entire libgfortran with -fcx-fortran-rules as
well:

Index: Makefile.am
===================================================================
--- Makefile.am (revision 132367)
+++ Makefile.am (working copy)
@@ -28,6 +28,9 @@ AM_CPPFLAGS = -iquote$(srcdir)/io -I$(sr
              -I$(srcdir)/$(MULTISRCTOP)../gcc/config \
              -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc -D_GNU_SOURCE

+# Fortran rules for complex multiplication and division
+AM_CFLAGS += -fcx-fortran-rules
+
 gfor_io_src= \
 io/close.c \
 io/file_pos.c \

Regtested on i686-pc-linux-gnu. This might benefit other intrinsics using
complex multiplication and division as well, e.g. PRODUCT.

I'll go ahead and write some documentation as well, and submit the entire thing
once 4.4 opens; assigning to myself.


-- 

jb at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |jb at gcc dot gnu dot org
                   |dot org                     |
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2006-11-04 14:15:02         |2008-02-16 22:33:12
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (9 preceding siblings ...)
  2008-02-16 22:33 ` jb at gcc dot gnu dot org
@ 2008-02-19 19:34 ` jb at gcc dot gnu dot org
  2008-02-25 19:22 ` jb at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2008-02-19 19:34 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #11 from jb at gcc dot gnu dot org  2008-02-19 19:33 -------
Patch here: http://gcc.gnu.org/ml/gcc-patches/2008-02/msg00788.html


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (10 preceding siblings ...)
  2008-02-19 19:34 ` jb at gcc dot gnu dot org
@ 2008-02-25 19:22 ` jb at gcc dot gnu dot org
  2008-02-25 19:28 ` jb at gcc dot gnu dot org
  2008-02-26 21:15 ` jb at gcc dot gnu dot org
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2008-02-25 19:22 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #12 from jb at gcc dot gnu dot org  2008-02-25 19:21 -------
Subject: Bug 29549

Author: jb
Date: Mon Feb 25 19:20:48 2008
New Revision: 132636

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=132636
Log:
2008-02-25  Janne Blomqvist  <jb@gcc.gnu.org>

        PR fortran/29549
        * doc/invoke.texi (-fcx-limited-range): Document new option.
        * toplev.c (process_options): Handle -fcx-fortran-rules.
        * common.opt: Add documentation for -fcx-fortran-rules.


Modified:
    trunk/gcc/common.opt
    trunk/gcc/doc/invoke.texi
    trunk/gcc/toplev.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (11 preceding siblings ...)
  2008-02-25 19:22 ` jb at gcc dot gnu dot org
@ 2008-02-25 19:28 ` jb at gcc dot gnu dot org
  2008-02-26 21:15 ` jb at gcc dot gnu dot org
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2008-02-25 19:28 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #13 from jb at gcc dot gnu dot org  2008-02-25 19:28 -------
Subject: Bug 29549

Author: jb
Date: Mon Feb 25 19:27:28 2008
New Revision: 132638

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=132638
Log:
2008-02-25  Janne Blomqvist  <jb@gcc.gnu.org>

        PR fortran/29549
        * Makefile.am: Add -fcx-fortran-rules to AM_CFLAGS for all of
        libgfortran.
        * Makefile.in: Regenerated.


Modified:
    trunk/libgfortran/ChangeLog
    trunk/libgfortran/Makefile.am
    trunk/libgfortran/Makefile.in


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Bug fortran/29549] matmul slow for complex matrices
  2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
                   ` (12 preceding siblings ...)
  2008-02-25 19:28 ` jb at gcc dot gnu dot org
@ 2008-02-26 21:15 ` jb at gcc dot gnu dot org
  13 siblings, 0 replies; 15+ messages in thread
From: jb at gcc dot gnu dot org @ 2008-02-26 21:15 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #14 from jb at gcc dot gnu dot org  2008-02-26 21:15 -------
Closing as fixed. Timings for a small test program comparing matrix
multiplication done manually vs. libgfortran for real and complex.

Results without the committed patch (-O3 -funroll-loops, 1.6 GHz Pentium-M):

Manual real:   0.2140
Real matmul:   0.2390
Complex manual:   0.8259
Complex matmul:   3.8654

with the patch:

Manual real:   0.2130
Real matmul:   0.2520
Complex manual:   0.8149
Complex matmul:   0.8099

I.e. almost a factor of five speedup.


-- 

jb at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29549


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2008-02-26 21:15 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-10-22 15:58 [Bug fortran/29549] New: matmul slow for complex matrices tobias dot burnus at physik dot fu-berlin dot de
2006-11-04 14:15 ` [Bug fortran/29549] " jb at gcc dot gnu dot org
2006-11-04 20:34 ` jb at gcc dot gnu dot org
2006-11-04 21:24 ` jb at gcc dot gnu dot org
2006-11-04 22:17 ` jb at gcc dot gnu dot org
2008-02-10 19:20 ` jb at gcc dot gnu dot org
2008-02-10 22:48 ` tkoenig at gcc dot gnu dot org
2008-02-16 18:50 ` fxcoudert at gcc dot gnu dot org
2008-02-16 19:01 ` fxcoudert at gcc dot gnu dot org
2008-02-16 21:59 ` rguenth at gcc dot gnu dot org
2008-02-16 22:33 ` jb at gcc dot gnu dot org
2008-02-19 19:34 ` jb at gcc dot gnu dot org
2008-02-25 19:22 ` jb at gcc dot gnu dot org
2008-02-25 19:28 ` jb at gcc dot gnu dot org
2008-02-26 21:15 ` jb at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).