Operación atómicaHola.
Estoy tratando de medir el tiempo transcurrido de este filtro (calcula el promedio móvil de 10 segundos para la columna 'PowerRail'):
...
tStart = HP Time();
new_col << Formula( Summation( i = 1,10,Lag(dt:PowerRail,i))/10);
tStop = HP Time();
...
Parece que en lugar de progresar linealmente, se invoca un nuevo hilo y no se realiza el tiempo real para completar la operación.
En su estado actual, se mide 200uS que no es realista. El archivo CSV con la columna 'PowerRail' tiene un tamaño de 11 GB. 200uS es más probable que sea el momento de invocar el nuevo hilo.
Al final de las secuencias de comandos, la tabla JMP se abre y los valores de la media móvil se muestran en el área visible de la tabla, pero si me desplazo hacia abajo, veo que la fórmula no ha completado el procesamiento de toda la columna.
¿Es posible ejecutar la fórmula en una operación atómica, es decir, no en un hilo diferente, de modo que se mida el tiempo real para completar?
Gracias por adelantado.
Re: operación atómicaEsto es solo un FYI si usted está viendo el rendimiento de manera interactiva. Ejecute la secuencia de comandos con el depurador JMP y seleccione el botón que parece un reloj en la parte superior de un signo de número #. Devuelve el% de tiempo en el paso, o el número de "pasos" para completar los cálculos. A continuación se muestra el script, los diferenciales de tiempo y el rendimiento del depurador. Aparece que la función Col Moving Average () es el método 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>Aquí están los resultados numéricos:
t4 - t3 = 166; // Uso de Col Moving Average
t3 - t2 = 2246576; // Usando un bucle For
t2 - t1 = 1038; // Usando la fórmula de Suma dividida por 10
Aquí está la captura de pantalla del informe de rendimiento del depurador

Re: operación atómicaih
Gracias por tu pronta respuesta.
¡Usando 'Run Formulas ()', el tiempo para ejecutar el filtro es en realidad 4 horas!
Re: operación atómicaTienes razón en que el script continúa antes de que la fórmula se evalúe realmente; Por lo general, es preferible que de lo contrario sus scripts tarden una eternidad en ejecutarse. Puedes hacer que el script espere usando Ejecutar Fórmulas:
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);