Building Python 2.4 with icc and processor-specific optimizations

Michael Hoffman cam.ac.uk at mh391.invalid
Mon Mar 14 11:04:26 EST 2005


Michael Hoffman wrote:
> Just out of curiosity, I was wondering if anyone has
> compiled Python 2.4 with the Intel C Compiler and its
> processor specific optimizations. I can build it fine
> with OPT="-O3" or OPT="-xN" but when I try to combine
> them I get this as soon as ./python is run:
> 
> """
> case $MAKEFLAGS in \
> *-s*)  CC='icc -pthread' LDSHARED='icc -pthread -shared' OPT='-DNDEBUG 
> -O3 -xN' ./python -E ./setup.py -q build;; \
> *)  CC='icc -pthread' LDSHARED='icc -pthread -shared' OPT='-DNDEBUG -O3 
> -xN' ./python -E ./setup.py build;; \
> esac
> 'import site' failed; use -v for traceback
> Traceback (most recent call last):
>   File "./setup.py", line 6, in ?
>     import sys, os, getopt, imp, re
>   File "/usr/local/src/Python-2.4/Lib/os.py", line 130, in ?
>     raise ImportError, 'no os specific module found'
> ImportError: no os specific module found
> make: *** [sharedmods] Error 1
> """
> 
> Also, if I run ./python, I have this interesting result:
> 
> """
> $ ./python
> 'import site' failed; use -v for traceback
> Python 2.4 (#34, Mar 12 2005, 18:46:28)
> [GCC Intel(R) C++ gcc 3.0 mode] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>  >>> import sys
>  >>> sys.builtin_module_names
> ('__main__', '__builtin__', '__builtin__', '__builtin__', '__builtin__', 
> '__builtin__', '__builtin__', '__builtin__', '__builtin__', 
> '__builtin__', '__builtin__', '__builtin__', '__builtin__', 
> 'exceptions', 'gc', 'gc')
> """
> 
> Whoa--what's going on? Any ideas?

Further investigation reveals that the function that sets
sys.builtin_module_names sorts the list before turning it into a
tuple. And binarysort() in Objects/listobject.c doesn't work when
optimized in that fashion. Adding #pragma optimize("", off)
beforehand solves the problem. Why that is, I have no idea. Is
anyone else curious?

Also, if anyone is looking for a way to squeeze a little extra time
out of the startup, perhaps sorting the list at build-time,
rather than when Python starts would be good. Although probably
not worth the trouble. ;-)
-- 
Michael Hoffman



More information about the Python-list mailing list