The program "filcorr-online-perf-bench.jar" is used for benchmarking the online performance of the FilCorr algorithm. It is based on the JMH testing framework, but we use the maximum number of time series and pairs that the system can handle without causing any delay as the benchmark results instead of the results from JMH which is measuring execution time.
The program will simulate the time series streams by generating a certain number of observations at a specific rate specified by the user inputs. The basic idea is that the system cannot handle that much time series if the execution time exceeds the available time. Such execution time is measured as one round lagged correlation computation for all the pairs at a timestamp, and the available time for such computation is the period for the output rusults which is
(1/output Rate), the output rate is computable as (f/step). For example, if the sampling rate is 100Hz, step is 10 then the output rate is 10Hz, and the available time is 100ms.
Our approach is to check whether the final round of computation finishes within the available time. The final round exists since we only simulate a specific number of observations. The reason to not check each computation time is the error will accumulate if the system cannot handle that many time series, so all results of the lagged correlation computation will reflect at the final round. The error is the extra time needed for one round of computation to finish beyond the available time. The program will run eight times for a certain amount of time series. If there are more number of runs pass than the fail, we consider it passes. When tie, we compare the average time with the available time. If the average time is less than the available time, then pass.
Since FilCorr is data-independent so we use random synthetic data generated automatacially by the program based on the user inputs.
Note: The usage of each paramete and their default values can be checked in the program with input argument -help
print help info
-help
algorithm to compute the lagged correlation
-algo
window length;
-n
lag length;
-l
sampling rate;
-f
lower cutoff frequency of band pass filter;
-fs
higher cutoff frequency of band pass filter;
-ft
step length;
-step
number of thread to work;
-threadNum
show running detail(no arguments followed)
-v
Note: If user turn on this option by inputing -v then then all the running detail will be printed in the console and The results for each number of series are saved in a folder named "online-perf-results/${current arguments}" in the same director of the jar file.
java -Xms28g -Xmx28g -Xmn23g -XX:+UseParallelGC -jar ./filcorr-online-perf-bench.jar -n 500 -l 250 -f 100 -fs 1 -ft 10 -step 20 -algo filcorr
explain: The program will find the maximum number of time series and the corresponding pairs the system can handle for the giving inputs parameters.
For the FilCorr, the length of basic window is 500 observations since the lag is 250 observations, so the length of the sliding window is n + l = 750 observations. Step length is 20 observations which means the sliding window will move forward by 20 observations for each computation.
-f 100 means the observations are generated at 100Hz, -fs 1 -ft 10 means the bandwidth for the bandpass filter is from 1Hz to 10Hz.
-algo filcorr means we use FilCorr to compute instead of Naive.
System info:
OS: Pop!_OS 20.04 LTS
CPU: intel i9-9900k@4.70GHz,
Ram: 32GB ddr4 ram 3200MHz ; Timing: 14-14-14-34
Java version: openjdk version "1.8.0_252"; OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1ubuntu1-b09)
Jvm config: -Xms28g -Xmx28g -Xmn23g -XX:+UseParallelGC.
Note: Users should adjust the heap size accordingly based on the ram availablity.
n = 250, l = 125, f = 25, fs = 1, ft = 10, step = 1, threadNum= 16
FilCorr: number of series: 141, pairs: 9870
naive: number of series: 120, pairs: 7140
n = 1000, l = 500, f = 100, fs = 1, ft = 10, step = 4, threadNum= 16
FilCorr: number of series: 59, pairs: 1711
naive: number of series: 25, pairs: 300