[LLVMdev] Impressive performance result for LLVM: complex arithmetic
Daniel Berlin
dberlin at dberlin.org
Fri Feb 27 10:12:02 PST 2009
On gcc's side, this is a simple missed opt on the part of builtin lowering.
As a result, the gcc code ends up with a call to muldc3 (complex = 2x2
multiply double) and the llvm code doesn't.
GCC should be fixed in a second, and with that, there is no
appreciable performance difference between the two.
On Thu, Feb 26, 2009 at 4:07 PM, Jon Harrop <jon at ffconsultancy.com> wrote:
>
> Following a discussion about numerical performance on comp.lang.functional
> recently I just tried running a simple C mandelbrot benchmark that uses C99's
> complex arithmetic using gcc and llvm-gcc on a 2.1GHz Opteron 2352 running
> Debian:
>
> gcc: 5.727s
> llvm-gcc: 1.393s
>
> There is still 20% room for improvement but LLVM is >4x faster than gcc here.
> Sweet.
>
> Here's the code:
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <complex.h>
>
> int max_i = 65536;
>
> double sqr(double x) { return x*x; }
>
> double cnorm2(complex z) { return sqr(creal(z)) + sqr(cimag(z)); }
>
> int loop(complex c) {
> complex z=c;
> int i=1;
> while (cnorm2(z) <= 4.0 && i++ < max_i)
> z = z*z + c;
> return i;
> }
>
> int main() {
> for (int j = -39; j < 39; ++j) {
> for (int i = -39; i < 39; ++i)
> printf(loop(j/40.0-0.5 + i/40.0*I) > max_i ? "*" : " ");
> printf("\n");
> }
> return 0;
> }
>
> --
> Dr Jon Harrop, Flying Frog Consultancy Ltd.
> http://www.ffconsultancy.com/?e
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list