From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7264 invoked by alias); 6 Nov 2002 07:36:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 7238 invoked by uid 71); 6 Nov 2002 07:36:00 -0000 Resent-Date: 6 Nov 2002 07:36:00 -0000 Resent-Message-ID: <20021106073600.7237.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, davejf@starband.net Received: (qmail 6109 invoked by uid 61); 6 Nov 2002 07:31:02 -0000 Message-Id: <20021106073102.6108.qmail@sources.redhat.com> Date: Tue, 05 Nov 2002 23:36:00 -0000 From: davejf@starband.net Reply-To: davejf@starband.net To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/8474: -mcup=i686 produces much faster code than -mcpu=pentium4 on a P4 machine X-SW-Source: 2002-11/txt/msg00276.txt.bz2 List-Id: >Number: 8474 >Category: optimization >Synopsis: -mcup=i686 produces much faster code than -mcpu=pentium4 on a P4 machine >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: support >Submitter-Id: net >Arrival-Date: Tue Nov 05 23:36:00 PST 2002 >Closed-Date: >Last-Modified: >Originator: davejf@starband.net >Release: unknown-1.0 >Organization: >Environment: gcc -v Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --host=i386-redhat-linux --with-system-zlib --enable-__cxa_atexit Thread model: posix gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7) P4 2.2 Ghz, 512 MB RAM >Description: Although I've noticed that -mcpu=pentium4 produces more efficient code (than -mcpu=i686 on a P4 CPU) for all of the other benchmarks I've tried, the whetstone benchmark w/ math lib. calls removed runs ~40% faster on a P4 CPU with the -mcpu=i686 flag vs. the -mcpu=pentium4 flag. I wanted to pass this along on the chance that maybe analyzing the difference might lead to better optimizations for the P4 core in future versions of GCC. The attached tarball contains the source code and the two executables. i686 executable compiled with: g++ -mcpu=i686 -O3 -ffast-math -fmove-all-movables -fomit-frame-pointer -funroll-loops -o whetstone_i686 whetstone.cpp P4 executable compile with: g++ -mcpu=pentium4 -O3 -ffast-math -fmove-all-movables -fomit-frame-pointer -funroll-loops -o whetstone_pentium4 whetstone.cpp Results - i686: whetstone took: 0.83 secs for 1208 MFLOPS (w/ math lib) whetstone took: 0.16 secs for 6400 MFLOPS (w/o math lib) Results - P4: whetstone took: 0.89 secs for 1123 MFLOPS (w/ math lib) whetstone took: 0.22 secs for 4613 MFLOPS (w/o math lib) >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/x-gzip; name="whetx86.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="whetx86.tar.gz" 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 hj3SL5B+wYPtF8hJTnKSk5zqm/4Gt0r1BQCgAAA=