This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi,
I recently revised some speed tests of basic CPU operations.
There were a few surprises, but one was that, a test of double-precision
divide was a factor of ten slower when compiled with gcc than with the
Intel compiler icc.
This was with full optimization turned on, with an Intel Duo (Yonah)
processor.
I figured gcc was simply not using SSE2, and icc was.
But that is not the case at all. While gcc produces apparently SSE2
assembler, icc does something quite different.
What's going on?
Find the .c file attached. Assembler snippets follow.
------------
gcc has this (gcc -std=c99 -O3 -msse2 -mfpmath=sse -lm -S dt.c)
------------
.L27:
movapd (%esi,%eax), %xmm3 ;move 2 dbls at *(esi+eax) to xmm3
divpd 192(%esp,%eax), %xmm3 ;(192 is xmm2) *(esp+eax), result->xmm3
movapd %xmm3, (%esi,%eax) ;move 2 dbls from xmm3 back
addl $16, %eax ;add 16 (len of 2 doubles) to eax
cmpl $16384, %eax ;compare eax to 1024 * 16
jne .L27 ;if not equal, do it again
------------
icc has this (icc -Wall -w2 -fast -c dt.c)
------------
# LOE eax xmm2
..B1.69: # Preds ..B1.71 ..B1.68
movsd 8336(%esp,%eax,8), %xmm1 #108.30
movsd _2il0floatpacket.13, %xmm0 #108.2
divsd 24720(%esp,%eax,8), %xmm0 #108.2
unpcklpd %xmm2, %xmm1 #108.30
xorl %edx, %edx #
movddup %xmm0, %xmm0 #108.2
movddup %xmm0, %xmm0 #108.2
# LOE eax edx xmm0 xmm1 xmm2
..B1.70: # Preds ..B1.70 ..B1.69
mulpd %xmm0, %xmm1 #108.2
mulpd %xmm0, %xmm1 #108.2
mulpd %xmm0, %xmm1 #108.2
mulpd %xmm0, %xmm1 #108.2
addl $8, %edx #
cmpl $131072, %edx #108.2
jb ..B1.70 # Prob 99% #108.2
--
| - - - - - - - - - - - - - - - - - - - - - - - - -
| Steve White +49(331)7499-202
| e-Science / AstroGrid-D Zi. 35 Bg. 20
| - - - - - - - - - - - - - - - - - - - - - - - - -
| Astrophysikalisches Institut Potsdam (AIP)
| An der Sternwarte 16, D-14482 Potsdam
|
| Vorstand: Prof. Dr. Matthias Steinmetz, Peter A. Stolz
|
| Stiftung privaten Rechts, Stiftungsverzeichnis Brandenburg: III/7-71-026
| - - - - - - - - - - - - - - - - - - - - - - - - -
Attachment:
dt.c
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |