2016-06-19 21 views
4

Ich versuche Cython von Quelle mit Icc Compiler auf Ubuntu 14.04 zu erstellen, wie mein Python mit Intel ICC Compiler kompiliert wird.Kann Cython mit ICC kompiliert werden?

Wenn ich cython mit PIP3 installieren cython und lief dann zu installieren versucht cython ich Fehler folgende bekam

Traceback (most recent call last): 
File "/usr/local/bin/cython", line 9, in <module> 
load_entry_point('Cython==0.24', 'console_scripts', 'cython')() 
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 351, in load_entry_point 
return get_distribution(dist).load_entry_point(group, name) 
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2363, in load_entry_point 
return ep.load() 
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2088, in load 
entry = __import__(self.module_name, globals(),globals(), ['__name__']) 
File "/usr/local/lib/python3.4/dist-packages/Cython/Compiler/Main.py", line 28, in <module> 
from .Scanning import PyrexScanner, FileSourceDescriptor 
ImportError: /usr/local/lib/python3.4/dist-packages/Cython/Compiler/Scanning.cpython-34m.so: undefined symbol: __intel_sse2_strchr 

Wie man über geht cython Installation aus dem Quellcode icc-Compiler?

habe ich versucht, diese und es nicht

Vom cython Verzeichnis (heruntergeladen von Github)

python3.4 setup.py CC = icc

ich folgende Meldung funktioniert -

/home/aa/libPython/cython/Cython/Distutils/build_ext.py:20: UserWarning:  
Cython.Distutils.build_ext does not properly handle dependencies and is deprectated. Use Cython.Build.build_ext instead. 
"Cython.Distutils.build_ext does not properly handle dependencies " 
Unable to find pgen, not compiling formal grammar. 
invalid command name 'CC=icc' 

Antwort

5

CC=icc ist nicht genug, um mit ICC zu bauen. Sie sollten auch mit ICC verbinden (https://stackoverflow.com/a/10891764/196561; ICC wird seine internen Bibliotheken zu ELF-Datei hinzufügen), so finden Sie Name der Linker-Variable für Ihre setup.py, wahrscheinlich LD und setzen Sie es auf ICC LD=icc (Standard ist wahrscheinlich gcc).

Eigentlich ist es LINKCC - https://github.com/cython/cython/blob/970c2fc0e676ca22016e14147ada0edba937dc6b/Cython/Build/BuildExecutable.py

CC = get_config_var('CC', os.environ.get('CC', '')) 
CFLAGS = get_config_var('CFLAGS') + ' ' + os.environ.get('CFLAGS', '') 
LINKCC = get_config_var('LINKCC', os.environ.get('LINKCC', CC)) 

So muss die richtige Build für cython mit icc mit CC=icc LINKCC=icc sein, nicht wissen, wie Variablen in setup.py übergeben werden sollen, überprüfen How to tell distutils to use gcc? oder versuchen

CC=icc LINKCC=icc python3.4 setup.py 

Update: Nach Mitteilung von Gansub, "LDSHARED=icc" env. Variable helfen cython zu bauen: "Sie müssen die Umgebungsvariable LDSHARED = icc setzen" - http://chat.stackoverflow.com/transcript/message/31231907#31231907 und https://stackoverflow.com/a/37914227

Update von Syrte wichtigsten: Es gibt Artikel "Thread Parallelismus in Cython *" https://software.intel.com/en-us/articles/thread-parallelism-in-cython von Nguyen, Loc Q (Intel), 15. Dezember 2016 mit der Empfehlung von LDSHARED="icc -shared" CC=icc:

ausdrücklich auf die Intel icc nutzt diese Anwendung zu kompilieren, die setup.py-Datei mit folgendem Befehl aus:

$ LDSHARED="icc -shared" CC=icc python setup.py build_ext –-inplace 
+0

Gansub, aber die 'python3.4 setup.py CC = icc 'war der Befehl von Ihnen verwendet und es wurde korrekt behandelt? Ich habe kein Cython und kein ICC, und ich spreche kein Python. Aber aus der zitierten Fehlermeldung kann ich schließen, dass der Verknüpfungsschritt falsch war, und zwar durch 'ld' oder' gcc', nicht durch 'icc', wie es sein sollte. Überprüfen Sie also, ob Ihr Build-System eine Verknüpfung mit 'icc' herstellt. – osgx

+0

Verwenden Sie die Datei distutils.cfg, um CC und LINKCC festzulegen, wie es in http://stackoverflow.com/questions/16737260/how-to-tell-distutils- angezeigt wurde. to-use-gcc – osgx

+0

gansub, Ihr Verknüpfungsbefehl 'x86_64-linux-gnu-gcc', der immer noch falsch ist. – osgx