J'utilise Intel MKL pour BLAS et j'utilise Intel MKL Link Line Advisor pour obtenir de l'aide avec les options de ligne de commande.
Le conseiller propose des options pour la bibliothèque statique, dynamique et dynamique unique. Que veulent dire ces termes?
Il y a eu de nombreux articles sur SO à ce sujet, mais tous se sont concentrés sur le développement de logiciels plutôt que sur des codes scientifiques / mathématiques. ( Celui-ci était particulièrement utile)
- En quoi ces termes sont-ils pertinents pour Parallel Computing?
- Est-ce que l'un est meilleur que l'autre? (Je sais que mieux devrait être défini plus précisément, mais je ne sais pas comment le faire pour l'instant)
- Qu'est-ce qui est utilisé le plus souvent et pourquoi?
- Que doit prendre en compte le programmeur lors de la liaison?
-mkl
indicateur qui devrait supprimer la nécessité d'utiliser le conseiller de ligne de liaison dans la plupart des cas.-static
Cependant, il lie statiquement MKL si vous le spécifiez et le lie dynamiquement si vous ne le faites pas. C'est certainement beaucoup mieux du point de vue de la facilité d'utilisation, en tout cas.Réponses:
Les termes liaison statique et liaison dynamique ne sont pas directement liés à l'informatique parallèle, bien qu'il soit connu depuis un certain temps que le chargement dynamique (par opposition au chargement d'un exécutable compilé statiquement) ne s'adapte pas bien sur les systèmes de fichiers réseau en raison de la lourdeur charge de métadonnées provoquée par le chargeur dynamique recherchant les chemins de chargement des bibliothèques cibles.
Il est difficile de dire de manière générale si les bibliothèques statiques ou dynamiques conviennent mieux au calcul haute performance. Certes, pour la plupart des applications de calcul intensif, il est plus simple et préférable de lier statiquement. Pourquoi est-ce? Sur la génération actuelle de superordinateurs, il n'y a généralement qu'un seul travail en cours d'exécution par nœud, ce qui réduit fortement les avantages d'une consommation de mémoire réduite en raison des bibliothèques partagées. De plus, les codes de calcul scientifique ont tendance à ne pas être très sophistiqués en termes de fonctionnalités de langage ou de conception de programme, et ils utilisent rarement des fonctionnalités de langage qui nécessitent un chargement dynamique (tels que des modules d'extension). Les bibliothèques dynamiques ont la difficulté supplémentaire d'être beaucoup moins portables sur les systèmes d'exploitation que les bibliothèques statiques.
En conséquence de tout cela, la plupart des systèmes HPC utilisent la compilation statique lorsqu'elle est disponible. Les bibliothèques statiques sont considérées comme plus rapides, plus faciles à installer et à entretenir, et généralement plus robustes. Les codes HPC basés sur Python sont l'une des exceptions à cela, mais ils sont toujours soumis aux problèmes de performances associés au chargement dynamique (plusieurs utilisateurs sur scicomp travaillent actuellement sur ce problème!).
Lorsque vous choisissez une liaison statique ou dynamique, vous devez considérer comment et où votre code sera déployé, si les bibliothèques sous-jacentes sont susceptibles de changer ou de se déplacer, et les caractéristiques de performances de votre système de fichiers réseau. Vous devez également évaluer si vous avez besoin d' une liaison dynamique, soit via une dépendance de bibliothèque, soit pour interagir avec un langage de script dynamique tel que Python.
La bibliothèque dynamique unique est un terme spécifique à Intel. Il se réfère à l'emballage de leurs bibliothèques dynamiques en une seule méta-bibliothèque pour simplifier le processus de liaison. Si vous allez utiliser la liaison dynamique avec les bibliothèques Intel, ce formulaire est probablement préférable, sauf si vous faites quelque chose de compliqué.
la source
Dynamic : 0:42.92
Static : 0:42.93
Single Dynamic : 0:42.97
moyenne plus de 1000 valeurs.