Que signifie la liaison statique, dynamique et dynamique unique?

9

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?
Enquête
la source
Juste comme une note, si vous ne l'avez pas vu, les nouveaux compilateurs Intel (je pense que la version 11 et plus récente) fournissent l' -mklindicateur qui devrait supprimer la nécessité d'utiliser le conseiller de ligne de liaison dans la plupart des cas.
Aesin
@Aesin, je me demandais. Est-ce le moyen le plus optimal de créer des liens?
Enquête du
Je ne sais pas, malheureusement - je n'ai pas vraiment fait de test, et le manuel n'entre pas dans les détails de ce qu'il fait ou comment il se combine avec d'autres options. -staticCependant, 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.
Aesin

Réponses:

14

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é.

Aron Ahmadia
la source
Excellente réponse! Encore une chose: je me rends compte que la liaison dynamique ne serait pas nécessaire et le choix sera entre statique et dynamique unique. Vous dites que je devrais choisir ce dernier sauf si je fais quelque chose de compliqué (ce que je ne suis pas). Alors, dois-je créer un lien avec Single Dynamic? [FWiW, je travaille sur les méthodes de sous-espace de Krylov]
Enquête
Désolé! Je voulais dire que vous devriez utiliser statique par défaut mais préférez la dynamique unique à la dynamique.
Aron Ahmadia
J'ai fait quelques analyses comparatives et j'ai trouvé: en Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.97moyenne plus de 1000 valeurs.
Enquête
1
Il convient de noter que sur certains systèmes HPC, vous devez établir une liaison statique - sur les systèmes BlueGene / L, c'est le cas, par exemple, car le système d'exploitation réduit sur les nœuds de calcul ne prend pas en charge la liaison dynamique.
Aesin
1
Je suis un peu confus par votre déclaration: "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." Vouliez-vous dire qu'il n'y a qu'un seul processus par nœud? Je ne sais pas comment un travail par nœud affecte la situation. Lors de la liaison statique, chaque processus stockera une copie complète de l'exécutable, ce qui peut être important à mesure que les cœurs par processeur se développent. La liaison dynamique ne nécessitera qu'une seule copie de la bibliothèque dynamique par espace de mémoire partagée.
andybauer