2 votes

Installation de numpy-1.7.1 avec MKL-10.3 en utilisant gcc-4.7.2 sur linux

J'ai essayé d'installer numpy-1.7.1 avec MKL-10.3 sur python-2.7.5 en utilisant gcc-4.7.2 sur un système linux-2.6.18-308.24.1.el5 depuis quelques jours maintenant. Il n'y a pas longtemps, j'ai compilé avec succès R-3.0.1 avec MKL en utilisant le même compilateur.

J'ai modifié le fichier site.cfg dans numpy-1.7.1 comme suit :

[mkl]
library_dirs = /sb/software/libraries/MKL/10.3/lib/intel64
include_dirs = /sb/software/libraries/MKL/10.3/include
mkl_libs = mkl_rt
lapack_libs =

Quand j'appelle python setup.py install, il trouve les bibliothèques MKL pour BLAS et LAPACK. Jusqu'à ce point, il n'y a pas de plainte ni d'avertissement. Ça se casse une fois que j'essaie de faire quelque chose avec numpy.

$ python
 Python 2.7.5 (par défaut, le 31 juillet 2013, 16:54:43)
 [GCC 4.7.2] sur linux2
 Taper "help", "copyright", "credits" ou "license" pour plus d'informations.
 >>> import numpy
 >>> numpy.test('full')
 Exécution des tests unitaires pour numpy
 Version de NumPy 1.7.1
 NumPy est installé dans /sb/project/mjd-574/ndejay/modules/python-2.7.5/lib/python2.7/site-packages/numpy
 Version de Python 2.7.5 (par défaut, le 31 juillet 2013, 16:54:43) [GCC 4.7.2]
 Version de nose 1.3.0
 .................python: erreur de recherche de symbole: /sb/software/libraries/MKL/10.3/lib/intel64/libmkl_intel_thread.so: symbole non défini: omp_get_num_procs

Il semble s'agir d'un problème connu (lien vers la source) où libiomp5 n'est pas chargé par libmkl_rt. Quand j'ajoute le chemin vers libiomp5 à la variable library_dirs dans site.cfg, numpy échoue à détecter toutes les bibliothèques MKL.

J'ai même essayé ce qui suit pour forcer gcc à utiliser ses propres bibliothèques/entêtes openMP, mais en vain.

CFLAGS='-fopenmp -lgomp' python setup.py install

Je serais reconnaissant pour tout type d'aide ou de conseils sur ce sujet. N'hésitez pas à me faire savoir si j'ai omis des informations critiques dans ce fil de discussion.

EDIT : Je suis sur une plateforme x86_64.

3voto

Nicolas De Jay Points 444

Ajout du chemin vers libiomp5 dans l'environnement LD_MODULES_PATH. Les serveurs que j'utilise actuellement utilisent la bibliothèque modules pour gérer les applications et bibliothèques à l'échelle du serveur. J'avais précédemment utilisé uniquement le module autonome MKL/10.3, mais le substituer par ifort_icc/13.0 (qui contient également MKL) a ajouté des chemins liés à icc dans le LD_MODULES_PATH. L'utilisation du même site.cfg tel que décrit ci-dessus semble fonctionner et numpy exécute la suite de tests.

Je ne sais pas si c'est la solution la plus élégante, mais cela fera l'affaire pour l'instant.

0voto

Ashutosh Points 66

Vous devez ajouter le chemin vers libomp5: composer_xe_install_path/compiler/lib/intel64 à votre LD_LIBRARY_PATH. Pour moi, le chemin ressemble à : /opt/apps/intel/16.1/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X