2017-09-20 3 views
0

Je souhaite utiliser gfortran pour compiler du code utilisant mlk_vsl.f90 à partir de la bibliothèque Intel MKL sur un Mac.Compilation de code utilisant des modules Intel MKL avec gfortran

que je fais ce qui suit:
gfortran -o filename filename.f90 -I/${MKLROOT}/include

et je reçois cette erreur:

"Can't open module file 'mkl_vsl_type.mod" for reading at (1): No such file or directory" 

Je sais que je dois créer le fichier .mod, mais je ne suis pas sûr de savoir comment.

+0

Avez-vous les sources MKL, contenant les interfaces, à partir desquelles créer les fichiers '.mod'? – francescalus

+0

Que contient mkl_vsl.f90? Contient-il le module 'mkl_vsl_type'? Notez que les instructions de liaison exactes pour MKL sont sur le site Web d'Intel. Vous pouvez sélectionner plusieurs options et le site vous donnera la bonne commande. –

Répondre

0

Vous êtes sur la bonne voie pour la compilation (si vous ajoutez -c). Quelques suggestions:

  1. Essayez d'ajouter -fno-range-check, ce qui est nécessaire pour obtenir gfortran pour compiler les modules mkl_vsl correctement (fichiers .mod créés automatiquement lorsque vous compilez votre programme principal)
  2. Ne sachant pas ce qui est défini pour MKLROOT, vous pouvez avoir une barre oblique inverse supplémentaire; essayez -I${MKLROOT}/include

Toutefois, pour la liaison, vous avez probablement besoin de bibliothèques supplémentaires. Le moyen le plus simple de voir comment lier est de regarder l'un des exemples dans votre répertoire MKLROOT mkl/examples/vslf/source qui a des fichiers source qui utilisent mkl_vsl. Dans mkl/examples/vslf, vous pouvez exécuter un makefile pour générer des exécutables et imprimer les lignes de liaison. Utilisez make help pour plus d'informations. Par exemple, pour compiler vslssort.f avec gfortran et la liaison statique: make libintel64 compiler=gnu function=vslssort. Notez simplement deux avertissements: La ligne de liaison utilise libmkl_intel_thread.a au lieu de libmkl_gnu_thread.a, et utilise l'option -J pour placer les fichiers .mod créés dans un répertoire différent qui DOIT être créé avant la liaison.