원자 적 조작여보세요.
이 필터의 경과 시간을 측정하려고합니다 (열 'PowerRail'에 대해 10 초 이동 평균을 계산합니다).
...
tStart = HP Time();
new_col << Formula( Summation( i = 1,10,Lag(dt:PowerRail,i))/10);
tStop = HP Time();
...
선형 적으로 진행하는 대신 새 스레드가 호출되고 작업을 완료하기위한 실제 시간이 실현되지 않는 것으로 보입니다.
그대로, 현실적이지 않은 200uS가 측정됩니다. 'PowerRail'열이있는 CSV 파일의 크기는 11GB입니다. 새 스레드를 호출 할 확률이 200uS 일 가능성이 큽니다.
스크립트가 끝날 때 JMP 테이블이 열리고 테이블의 가시 영역에 이동 평균값이 표시되지만 아래로 스크롤하면 수식이 전체 열 처리를 완료하지 못했음을 알 수 있습니다.
수식을 원자 연산으로 실행할 수 있습니까? 즉, 다른 스레드가 아닌 것입니다. 따라서 실제 완료 시간을 측정 할 수 있습니까?
미리 감사드립니다.
다시 : 원자 작업이것은 단지 당신이 대화식으로 성과를보고 있다는 것입니다. JMP 디버거를 사용하여 스크립트를 실행하고 # 기호 위에 시계처럼 보이는 버튼을 선택하십시오. 그것은 단계에서의 시간의 % 또는 계산을 완료하는 "단계"의 수를 반환합니다. 아래 스크립트, 시간 차이 및 디버거 성능입니다. Col Moving Average () 함수는 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>숫자 결과는 다음과 같습니다.
t4 - t3 = 166; // 평균 이동 평균 사용
t3 - t2 = 2246576; // For 루프 사용
t2 - t1 = 1038; // 합계 수식을 10으로 나눈 값 사용
다음은 디버거 성능 보고서의 스크린 샷입니다.

다시 : 원자 작업어,
빠른 응답에 감사드립니다.
'수식 실행 ()'을 사용하면 필터 실행 시간이 실제로 4 시간입니다!
다시 : 원자 작업공식이 실제로 평가되기 전에 스크립트가 계속 진행되는 것이 옳습니다. 일반적으로 그렇지 않으면 스크립트가 영원히 실행될 수도 있습니다. 수식 실행을 사용하여 스크립트를 대기 상태로 만들 수 있습니다.
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);