Opération AtomiqueBonjour.
J'essaie de mesurer le temps écoulé de ce filtre (calcule la moyenne mobile de 10 secondes pour la colonne 'PowerRail'):
...
tStart = HP Time();
new_col << Formula( Summation( i = 1,10,Lag(dt:PowerRail,i))/10);
tStop = HP Time();
...
Il semble qu'au lieu de progresser linéairement, un nouveau thread est appelé et que le temps réel pour terminer l'opération ne soit pas réalisé.
En l'état actuel, 200uS est mesuré, ce qui n'est pas réaliste. Le fichier CSV avec la colonne "PowerRail" a une taille de 11 Go. 200uS est plus probablement le temps d'appeler le nouveau thread.
À la fin des scripts, la table JMP s'ouvre et les valeurs de la moyenne mobile s'affichent dans la zone visible de la table, mais si je fais défiler l'écran vers le bas, je constate que la formule n'a pas réellement terminé le traitement de la colonne entière.
Est-il possible d'exécuter la formule dans une opération atomique, c'est-à-dire pas dans un autre thread, de manière à ce que le temps réel nécessaire à la finalisation soit mesuré?
Merci d'avance.
Re: Opération AtomiqueCeci est juste un FYI est que vous regardez la performance de manière interactive. Exécutez le script avec le débogueur JMP et sélectionnez le bouton qui ressemble à une horloge au-dessus du signe dièse #. Il renvoie le% de temps à l'étape ou le nombre d '"étapes" pour effectuer les calculs. Vous trouverez ci-dessous le script, les différences de temps et les performances du débogueur. La fonction Col Moving Average () est la méthode fsatest.
Names default to here(1);
dt = New Table("Test", New Column("random", numeric), New Column("MA1", numeric),
New Column("MA2", numeric),
New Column("MA3", numeric),
);
dt << add rows(2000000);
xmat = J(2000000, 2, Random Integer(1,10));
dt:random << Set values(xmat[0,1]);
wait(5);
t1 = HP Time();
dt:MA1 << Formula( Summation( i = 1,10,Lag(dt:random,i))/10, <<RUN formula=""></RUN>Voici les résultats numériques:
t4 - t3 = 166; // Utilisation de la moyenne mobile du col
t3 - t2 = 2246576; // Utiliser une boucle For
t2 - t1 = 1038; // Utilisation de la formule de sommation divisée par 10
Voici la capture d'écran du rapport de performances du débogueur

Re: Opération Atomiqueih
Merci pour votre réponse rapide.
Avec 'Run Formulas ()', le temps d'exécution du filtre est en réalité de 4 heures!
Re: Opération AtomiqueVous avez raison de dire que le script continue avant que la formule ne soit réellement évaluée; généralement cela est préférable sinon vos scripts pourraient prendre une éternité à s'exécuter. Vous pouvez faire en sorte que le script attende à l'aide de Run Formulas:
Names default to here( 1 );
//Open sample data and create a column to modify
dt = Open("$Sample_Data/iris.jmp");
new_col = dt << New Column("Test",Numeric,"Continuous",Formula(1));
//Set the column formula
tStart = HP Time();
new_col << Formula( for(i=1,i<=100000, i++, i+1) );
tMiddle = HP Time();
print(tMiddle-tStart);
//Wait for the formula to finish calculating
dt << Run Formulas();
tStop = HP Time();
print(tStop-tStart);