Sto lavorando su un progetto python che utilizza cython e c per velocizzare le operazioni time-sensitive. In alcune delle nostre routine cython, usiamo openmp per accelerare ulteriormente un'operazione se sono disponibili core inattivi.Test a livello di programmazione per il supporto openmp da uno script di installazione python
Questo porta a un po 'di una situazione fastidiosa su OS X dal momento che il compilatore di default per le versioni recenti del sistema operativo (llvm/clang su 10.7 e 10.8) non supporta openmp. La nostra soluzione di stopgap è di dire alle persone di impostare gcc come compilatore quando costruiscono. Ci piacerebbe molto farlo a livello di programmazione poiché clang può costruire tutto il resto senza problemi.
In questo momento, la compilazione fallirà con il seguente errore:
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: Command "cc -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/local/opt/sqlite/lib build/temp.macosx-10.8-x86_64-2.7/yt/utilities/lib/geometry_utils.o -lm -o yt/utilities/lib/geometry_utils.so -fopenmp" failed with exit status 1
La parte rilevante del nostro script di installazione si presenta così:
config.add_extension("geometry_utils",
["yt/utilities/lib/geometry_utils.pyx"],
extra_compile_args=['-fopenmp'],
extra_link_args=['-fopenmp'],
libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
Il file completo setup.py è here.
Esiste un modo per verificare a livello di programmazione il supporto per openmp dallo script di installazione?
In questi giorni la nostra soluzione è un po 'più sofisticato, ma fa uso della stessa idea di base: compilare un programma di test e vedere se funziona correttamente. Inoltre, colleghiamo e testiamo per essere più sicuri. Vedi https://github.com/astropy/astropy-helpers/blob/master/astropy_helpers/openmp_helpers.py – ngoldbaum