Operazione atomicaCiao.
Sto provando a misurare il tempo trascorso di questo filtro (calcola la media mobile di 10 secondi per la colonna "PowerRail"):
...
tStart = HP Time();
new_col << Formula( Summation( i = 1,10,Lag(dt:PowerRail,i))/10);
tStop = HP Time();
...
Sembra che invece di progredire linearmente, viene invocato un nuovo thread e il tempo effettivo per completare l'operazione non viene realizzato.
Allo stato attuale, viene misurato 200 uS che non è realistico. Il file CSV con la colonna "PowerRail" ha una dimensione di 11 GB. 200uS è più probabile che sia il momento di invocare il nuovo thread.
Alla fine degli script, la tabella JMP si apre e i valori medi mobili sono mostrati nell'area visibile della tabella, ma se scorro verso il basso vedo che la formula non ha completato in modo completo l'elaborazione dell'intera colonna.
È possibile eseguire la formula in un'operazione atomica, cioè non in un thread diverso, in modo che venga misurato il tempo effettivo di completamento?
Grazie in anticipo.
Re: Operazione atomicaQuesta è solo una FYI, stai guardando le prestazioni in modo interattivo. Esegui lo script con il debugger JMP e seleziona il pulsante che sembra un orologio sopra il cancelletto #. Restituisce la% di tempo nel passo o il numero di "passi" per completare i calcoli. Di seguito è riportato lo script, i differenziali temporali e le prestazioni del debugger. Applica la funzione Col Moving Average () è il metodo più veloce.
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>Ecco i risultati numerici:
t4 - t3 = 166; // Usando Col Moving Average
t3 - t2 = 2246576; // Utilizzando un ciclo For
t2 - t1 = 1038; // Usando la formula di Summation divisa per 10
Ecco la schermata del rapporto sul rendimento del debugger

Re: Operazione atomicaIH,
Grazie per la tua rapida risposta.
Usando 'Run Formulas ()', il tempo di eseguire il filtro è in realtà di 4 ore!
Re: Operazione atomicaHai ragione che lo script continua prima che la formula venga effettivamente valutata; di solito è preferibile altrimenti i tuoi script potrebbero impiegare per sempre. È possibile rendere lo script in attesa utilizzando Run Formule:
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);