[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: icc dependency generation
From: |
Akim Demaille |
Subject: |
Re: icc dependency generation |
Date: |
Thu, 26 Jun 2003 14:47:24 +0200 |
User-agent: |
Gnus/5.1002 (Gnus v5.10.2) Emacs/21.3 (gnu/linux) |
> On Thu, Jun 26, 2003 at 11:23:04AM +0200, Ralf Wildenhues wrote:
>> Intel compiler icc version 7.1 handles the -MF option inconsistently.
>> Documentation states that it has to be used together with -M or -MM.
>> If used with -MD, for example, it will replace the file ending with .d:
> [...]
>> Subsequently, the depcomp 'icc' mode will not be detected correctly
>> during the ./configure run, since it uses '-MD -MF'.
> This sucks. If -MF cannot work with -MD, depcomp will have to call icc
> twice: one time to get dependency information, and another time to do
> the actual compilation. This will be slower.
> Or we could use -MD alone, but as ICC does respect subdirectories (at
> least with ICC 7.0, compiling foo/bar.c with -MD would create ./bar.d
> instead of foo/bar.d -- could you check this with 7.1?) we'd need to
> implement some locking scheme in depcomp so that compiling foo/bar.c
> and baz/bar.c in parallel do not write the same bar.d.
>> Any suggestions?
> Complain to Intel, if not already done.
>> Which compiler version is the current depcomp supposed
>> to work with?
> 7.0
Err, maybe my message went unnoticed, but you might find additional
information here too.
From: Akim Demaille <address@hidden>
Subject: Re: Icc 7.0, distcc, Automake
To: address@hidden
cc: Automake List <address@hidden>
Date: Thu, 26 Jun 2003 11:01:12 +0200
X-Sent: 3 hours, 45 minutes, 35 seconds ago
For the records, I'm using the following script. It results in a
correct compilation with Automake, Icc, and Distcc.
[4. text/x-sh; dicc]
#! /bin/sh
icc=/home/lrde/lrde/usr/bin/icc
# ICC needs to be taught that *.ii is C++.
# The wonderful news is that:
#
# % /home/lrde/lrde/usr/bin/icc I-dont-exist
# ld: cannot open I-dont-exist: No such file or directory
# % /home/lrde/lrde/usr/bin/icc -c I-dont-exist
#
# icc per se does not complain about missing files... That's
# why understanding the problems takes so long....
case "$@" in
*.cc*|*.cpp*) set -- -Kc++ "$@" ;;
esac
# ICC is not able to honor both -E and -M, but Automake wants -M,
# and -E will be added by distcc.
case "$@" in
*-M*)
# Push a token among the arguments that will be used to notice when we
# ended options/arguments parsing.
arg_sep="$$--$$"
set -- "$@" "$arg_sep"
#
# Parse command line arguments.
while test x"$1" != x"$arg_sep"; do
case "$1" in
-MF) shift
minus_M_args="$minus_M_args -MF$1" ;;
-M*) minus_M_args="$minus_M_args $1" ;;
-E) minus_E=-E;;
*) set -- "$@" "$1";;
esac
shift
done
# Pop the token
shift
;;
esac
if test "x$minus_E" != x; then
echo "$0: don't know what to do with -E" >&2
fi
if test "x$minus_M_args" != x; then
$icc $minus_M_args "$@"
fi
exec /usr/bin/distcc $icc "$@"
But the speedup is really miserable: none AFAICS (on several runs). I
must say that my src hierarchy is poor for -j, as it heavily uses
Automake and many small modules compiled sequentially. Here are the
figure I get:
make -j4 CC=icc CXX=icc 250,09s user 17,22s system 46% cpu 9:38,68 total
make -j4 CC=dicc CXX=dicc 257,89s user 22,69s system 55% cpu 8:22,51 total
----------
- icc dependency generation, Ralf Wildenhues, 2003/06/26
- Re: icc dependency generation, Alexandre Duret-Lutz, 2003/06/26
- Re: icc dependency generation,
Akim Demaille <=
- Re: icc dependency generation, Alexandre Duret-Lutz, 2003/06/26
- Re: icc dependency generation, Ralf Wildenhues, 2003/06/26
- Re: icc dependency generation, Alexandre Duret-Lutz, 2003/06/27
- Re: icc dependency generation, Alexandre Duret-Lutz, 2003/06/28
- Re: icc dependency generation, Ralf Wildenhues, 2003/06/30