Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Traitement parallèle d'un programme
3 participants
Page 1 sur 1
Traitement parallèle d'un programme
Bonsoir,
Je suis à la recherche d'une façon d'améliorer le temps de run d'un macro - programme existant (extraction de données sur un serveur).
Un exemple, si je souhaite extraire 3 mois de données, j'aurais :
Je me demandais s'il était possible de plutôt procéder via un traitement parallèle.
Au lieu d'une macro qui procède comme indiqué ci dessus, j'aimerais que le lancement de cette macro génère 3 sous - macros identiques où seuls les paramètres de debut et fin changeront pour chacune :
Bref, un moyen de réduire le temps de run à un mois d'extraction seulement. Mais qui je m'en doute sera plus gourmand en mémoire. Si trop gourmand, ce sera ensuite à moi d'aviser de mon côté pour voir si l'on ne pourrait pas élargir à 3 mois au lieu d'un. Aussi, ce n'est qu'un exemple fictif et dont certaines choses seront à déclarer en amont (les dates par exemple selon celles de la macro initiale). L'automatisation ne me pose pas de soucis, c'est la parallélisation des tâches que je ne maîtrise absolument pas.
Est - ce possible ? Si oui, de quelle façon et quelles sont les notions importantes à retenir pour une bonne parallélisation ?
Merci,
Mac_Leod.
Je suis à la recherche d'une façon d'améliorer le temps de run d'un macro - programme existant (extraction de données sur un serveur).
Un exemple, si je souhaite extraire 3 mois de données, j'aurais :
- Code:
%extract_macro (
tab_in = data
tab_out = ma_table
debut = 01/08/2016
fin = 31/10/2016
);
Je me demandais s'il était possible de plutôt procéder via un traitement parallèle.
Au lieu d'une macro qui procède comme indiqué ci dessus, j'aimerais que le lancement de cette macro génère 3 sous - macros identiques où seuls les paramètres de debut et fin changeront pour chacune :
- Code:
MACRO INITIALE :
%extract_macro (
tab_in = data
tab_out = ma_table
debut = 01/08/2016
fin = 31/10/2016
);
Cette macro génère les 3 macros suivantes, non pas à la suite mais parallèlement.
%extract_macro (
tab_in = data
tab_out = ma_table_1
debut = 01/08/2016
fin = 31/08/2016
);
%extract_macro (
tab_in = data
tab_out = ma_table_2
debut = 01/09/2016
fin = 30/09/2016
);
%extract_macro (
tab_in = data
tab_out = ma_table_3
debut = 01/10/2016
fin = 31/10/2016
);
Une fois que et seulement une fois que tout a tourné, est lancé le code suivant :
data ma_table
set ma_table_1 ma_table_2 ma_table_3;
run;
Bref, un moyen de réduire le temps de run à un mois d'extraction seulement. Mais qui je m'en doute sera plus gourmand en mémoire. Si trop gourmand, ce sera ensuite à moi d'aviser de mon côté pour voir si l'on ne pourrait pas élargir à 3 mois au lieu d'un. Aussi, ce n'est qu'un exemple fictif et dont certaines choses seront à déclarer en amont (les dates par exemple selon celles de la macro initiale). L'automatisation ne me pose pas de soucis, c'est la parallélisation des tâches que je ne maîtrise absolument pas.
Est - ce possible ? Si oui, de quelle façon et quelles sont les notions importantes à retenir pour une bonne parallélisation ?
Merci,
Mac_Leod.
Mac_Leod- Nombre de messages : 28
Date d'inscription : 25/06/2015
Re: Traitement parallèle d'un programme
Bonjour,
Je me permet de relancer le sujet qui est toujours d'actu de mon côté. Et je vous rassure, ma question ne mange pas, des pistes de réflexions seraient aussi très appréciables ! En guise de métaphore, ce serait comme une punition où l'on doit recopier 100 fois une ligne, au lieu de l'écrire 100 fois, on fait en sorte d'écrire 2 ou 3 lignes en même temps avec des stylos qu'on scotche ensemble pour gagner du temps
Voici un bout de code exemple, il suffit d'une table "data" contenant une variable "date" pour le lancer.
Ce code boucle sur les mois d'août à octobre (août PUIS septembre PUIS octobre) mais je voudrais qu'il fasse ces 3 mois en parallèle (août ET septembre ET octobre). Je ne sais pas si vous voyez la nuance.
Je me permet de relancer le sujet qui est toujours d'actu de mon côté. Et je vous rassure, ma question ne mange pas, des pistes de réflexions seraient aussi très appréciables ! En guise de métaphore, ce serait comme une punition où l'on doit recopier 100 fois une ligne, au lieu de l'écrire 100 fois, on fait en sorte d'écrire 2 ou 3 lignes en même temps avec des stylos qu'on scotche ensemble pour gagner du temps
Voici un bout de code exemple, il suffit d'une table "data" contenant une variable "date" pour le lancer.
- Code:
%macro _extract (tab_in =, tab_out =, debut =, fin =);
data &tab_out.;
set &tab_in.;
if &debut. <= date <= &fin.;
run;
%mend _extract;
%macro _dispatch(out, start, end);
/* Boucle sur chaque mois */
%do mois = %sysfunc(month(&start.)) %to %sysfunc(month(&end.)) ;
/* Détermination de la période pour un mois donné */
%let _min = %sysfunc(mdy(&mois., 1, %sysfunc(year(&start.))), date9.) ;
%let _max = %sysfunc(intnx(month, %sysfunc(inputn(&_min., date9.)), 0, end), date9.) ;
%_extract ( tab_in = lib.trx
, tab_out = &out._&mois.
, debut = "&_min."d
, fin = "&_max."d
);
/* On append dans la table finale */
proc append base = &out. data = &out._&mois.; run;
%end ;
%mend _dispatch;
%_dispatch(ma_table, "01AUG2016"d, "31OCT2016"d);
Ce code boucle sur les mois d'août à octobre (août PUIS septembre PUIS octobre) mais je voudrais qu'il fasse ces 3 mois en parallèle (août ET septembre ET octobre). Je ne sais pas si vous voyez la nuance.
Mac_Leod- Nombre de messages : 28
Date d'inscription : 25/06/2015
Re: Traitement parallèle d'un programme
Bonjour,
ce document pourra peut-être t'aider :
https://www.sas.com/offices/europe/france/services/support/doc_techniques/Process_CONNECT.pdf
Re-dis moi si c'est le cas!
Niaboc
ce document pourra peut-être t'aider :
https://www.sas.com/offices/europe/france/services/support/doc_techniques/Process_CONNECT.pdf
Re-dis moi si c'est le cas!
Niaboc
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: Traitement parallèle d'un programme
Franchement la parallélisation sous SAS est autant compliqué que ce qu'elle est facile sous R...
Déjà il va falloir que tu sois sur d'avoir le module MP connect, rien que là c'est pas gagner. Ensuite il faut voir avec ton admin réseau qu'il te file les droits. Et après bon courage pour la gueule du code... il faut créer les sessions filles, allouer le fichier de config paramétré par l'admin, paramétré pour SAS la gestion l'articulation de la parallélisation, charger dans chaque session fille les macros annexe, lui indiquer les fichiers à ré-assembler... bref un bordel sans nom.
Tu as plus vite fait de te lancer sous R qui fait quasiment tout tout seul.
Bon courage sinon.
Déjà il va falloir que tu sois sur d'avoir le module MP connect, rien que là c'est pas gagner. Ensuite il faut voir avec ton admin réseau qu'il te file les droits. Et après bon courage pour la gueule du code... il faut créer les sessions filles, allouer le fichier de config paramétré par l'admin, paramétré pour SAS la gestion l'articulation de la parallélisation, charger dans chaque session fille les macros annexe, lui indiquer les fichiers à ré-assembler... bref un bordel sans nom.
Tu as plus vite fait de te lancer sous R qui fait quasiment tout tout seul.
Bon courage sinon.
Sujets similaires
» Programme Past/AFC
» Aide pour un programme
» programme stata : odds ratio
» ALPHY : 6-7 février 2013 - programme en ligne
» Aide traitement
» Aide pour un programme
» programme stata : odds ratio
» ALPHY : 6-7 février 2013 - programme en ligne
» Aide traitement
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|