Partager via


Fonctions sécurisées de cluster

S’applique à: Excel 2013 | Office 2013 | Visual Studio

Dans Excel 2013, Excel peut décharger les appels de fonction User-Defined (UDF) vers un cluster de calcul hautes performances via une interface de connecteur de cluster dédiée. Les fournisseurs de clusters de calcul fournissent des connecteurs de cluster. Les auteurs de fonctions définies par l’utilisateur peuvent déclarer leurs fonctions définies par l’utilisateur comme étant sécurisées pour le cluster, puis, lorsqu’un connecteur de cluster est présent, Excel envoie des appels à ces fonctions définies par l’utilisateur au connecteur de cluster pour le déchargement.

Quand Excel découvre une fonction définie par l’utilisateur sans cluster pendant le recalcul, il transmet le nom du XLL en cours d’exécution, le nom de la fonction définie par l’utilisateur sans cluster et tous les paramètres au connecteur de cluster. Le connecteur exécute l’appel UDF à distance et retourne les résultats à Excel. Le calcul non dépendant se poursuit et lorsque le connecteur de cluster a terminé l’exécution de la fonction définie par l’utilisateur, il transmet les résultats à Excel et les calculs dépendants continuent. Le mécanisme de ce comportement asynchrone imite le mécanisme utilisé par les fonctions définies par l’utilisateur asynchrone, sauf que le connecteur de cluster gère les aspects asynchrones au lieu de l’auteur de la fonction UDF. En règle générale, un connecteur de cluster implémente un shim XLL pour charger des XLL et exécuter des fonctions définies par l’utilisateur sur des nœuds de cluster de calcul.

Les mécanismes de déclaration des fonctions définies par l’utilisateur comme étant sécurisées pour le cluster ressemblent à ceux de la déclaration des fonctions définies par l’utilisateur comme étant sécurisées pour le recalcul multithread. Toutefois, étant donné que la fonction définie par l’utilisateur n’est pas nécessairement exécutée sur le même ordinateur que d’autres fonctions définies par l’utilisateur à partir de la même session Excel, il existe des considérations différentes lors de l’écriture de fonctions définies par l’utilisateur sans cluster.

Pour inscrire une fonction UDF en tant que cluster-safe, vous devez appeler la fonction de rappel xlfRegister (Formulaire 1) via l’interface Excel12 ou Excel12v . Pour plus d’informations sur ces interfaces, voir Excel4/Excel12 et Excel4v/Excel12v. L’inscription d’une fonction définie par l’utilisateur en tant que cluster sécurisé via l’interface Excel4 ou Excel4v n’est pas prise en charge.

Si vous inscrivez une fonction en tant que cluster-safe, vous devez vous assurer que la fonction se comporte de manière sécurisée pour le cluster. Bien que le comportement exact du connecteur de cluster soit spécifique à l’implémentation, vous devez concevoir votre fonction définie par l’utilisateur pour qu’elle s’exécute sur un système informatique distribué et présente les caractéristiques suivantes :

  • Une fonction définie par l’utilisateur ne doit pas s’appuyer sur un état de mémoire. Par exemple, une fonction définie par l’utilisateur ne doit pas s’appuyer sur un cache en mémoire existant.

  • Une fonction définie par l’utilisateur ne doit pas effectuer de rappels Excel que le fournisseur de connecteurs de cluster ne prend pas en charge.

Outre le comportement sécurisé du cluster, il existe les restrictions techniques suivantes sur les fonctions définies par l’utilisateur sans cluster :

  1. Aucun argument XLOPER (types 'P', 'R').

  2. Aucun argument XLOPER12 qui prend en charge les références de plage (type « U »).

  3. Ne peut pas être une fonction équivalente à la feuille de macro ('#' et '&' ne peut pas être combinée).

Pour les fonctions définies par l’utilisateur avec des temps d’exécution plus courts, la surcharge de déchargement peut être supérieure au temps nécessaire à l’exécution de la fonction UDF, ce qui annule la plupart des avantages de l’utilisation de cette infrastructure.

Remarque

Vous ne pouvez pas déclarer une fonction définie par l’utilisateur sans cluster en tant que fonction définie par l’utilisateur asynchrone.

Une fonction définie par l’utilisateur peut déterminer si elle est exécutée à l’aide d’un connecteur de cluster en appelant la fonction de rappel xlRunningOnCluster .