addPrototypes - Quelle est la fonction principale de l'action `addPrototypes` ?

Extension Hautes Performances : Le Pont SAS-C

Réponse

Elle ajoute des définitions PROTO (prototypes de fonctions) et les stocke dans une table CAS en sortie.
SAS / CASL
proc cas;
   /* 1. Définition du code C dans une variable CASL (Source block) */
   source c_source_code;
      #include <stdio.h>
      #include <string.h>
      #include <stdlib.h>

      /* Fonction arithmétique simple */
      int myadd(int a, int b) {
         return a + b;
      }

      /* Fonction de manipulation de chaînes (complétée) */
      /* Note : En prod, attention à la gestion mémoire de 'result' */
      void mystring(char* result, char* str, int num) {
          sprintf(result, "%s_%d", str, num);
      }
   endsource;

   /* 2. Chargement de l'action set nécessaire */
   loadactionset "fcmpact";

   /* 3. Compilation et Création du Prototype */
   fcmpact.addPrototypes /
      /* Le code source défini plus haut */
      routineCode = {c_source_code}
      
      /* Nom du package logique qui regroupera ces fonctions */
      package     = "MyAlgoC"
      
      /* La table CAS qui contiendra les binaires compilés */
      funcTable   = {name="MyCLib_Binaries", replace=TRUE}
      
      /* Option pour garder la table en mémoire après l'action */
      saveTable   = TRUE;
      
   print "Compilation C terminée. La bibliothèque est prête à être chargée par FCMP.";
run;
quit;
Cette réponse vous a-t-elle aidé ?
Deux points critiques pour une mise en production réussie :

La table de sortie est un binaire : La table générée par funcTable contient le code compilé. Best Practice : Sauvegardez cette table sur disque (format .sashdat) via l'action table.save. Cela vous évitera de devoir recompiler le code C (via addPrototypes) à chaque redémarrage du serveur CAS. Vous n'aurez qu'à recharger la table.

Attention aux fuites (Memory Leaks) : Dans votre code C, si vous utilisez malloc (comme dans votre exemple), vous devez être extrêmement prudent. Le processus CAS est actif longtemps. Un malloc sans free répété des millions de fois sur des milliards de lignes saturera la RAM de vos workers et fera crasher le serveur. Préférez les allocations gérées par l'appelant ou les structures statiques si possible.
addPrototypes

fcmpact

Doc : addPrototypes