# Profiling on Metal MSM This report summarizes the profiling of Metal MSM implementation carried out under the mopro grant, with the goal of identifying areas for further optimization. You can refer to the relevant milestone reports for detailed context: - [mopro 22 milestone 1 report](/ZCxFpQ8AROyYGTl5GLqAGQ) - [mopro 22 milestone 2 report](/YtTVJUArRmWrdvaTza2LGg) - [mopro 22 milestone 3 report](/v8WPAG8-RsCANrbv_seSXw) - [mopro 22 milestone 4 report](/6aYxLgNZTaGG4gbXkZUlCw) This report focuses on performance metrics derived from Xcode’s `Metal System Trace`, `Game Performance`, and `Game Memory` profiling tools, with a specific emphasis on areas for improvement. ## Metrics Below are the performance metrics for Metal MSM, focusing primarily on the GPU aspect with some CPU-related data. In this case, <u>a single instance with 2^16 pairs of EC points and scalars</u> is used as an example. For a detailed system trace, please refer to the [Raw Profiling Instruments section](/#Raw-Profiling-Instruments). - CPU to GPU latency - CPU and GPU Synchronization - EC Point Conversion (64-bit to 32-bit) - Misc - GPU Performance State Trace - Memory Events (CPU-GPU) - Single Encoder Submitting Command Buffers ### CPU to GPU latency CPU to GPU latency refers to the time delay between the CPU issuing a command and the GPU executing it within a Metal application. High latency can create performance bottlenecks, leading to slower computing times. We introduce a ratio, $\delta{}$, to express the relationship between latency and the actual GPU computation time (duration): $$ \delta=\dfrac{\text{CPU to GPU Latency}}{\text{Duration (GPU Computation Time)}} $$ - $\delta{}>1$ indicates an I/O-bound workload. - $\delta{}\leq1$ suggests a computation-bound workload. Now, let's zoom in to the Compute channel in GPU, we observe that Frame 3 suffer from high $\delta{}$ ratio, indicating an I/O bottleneck in this frame. <figure align="center"> <a href="https://hackmd.io/_uploads/S1mEaZuRC.png"> <img src="https://hackmd.io/_uploads/S1mEaZuRC.png" alt="High Latency"/> <br> </a> <center><em>GPU Channels of Metal MSM</em></center> </figure> | Duration (ms) | CPU to GPU Latency (ms) | Frame | $\delta{}$ Ratio (Latency/Duration) | |---------------|--------------------------|-------|------------------------| | 228.21 | 694.87 | 3 | 3.044871 | | 268.79 | 426.01 | 3 | 1.584918 | | 95.92 | 329.88 | 3 | 3.439116 | | 21.93 | 307.86 | 3 | 14.038304 | | 79.71 | 228.09 | 3 | 2.861498 | | 39.94 | 187.86 | 3 | 4.702856 | | 1.26 | 4.62 | 1 | 3.666667 | | 0.53267 | 1.13 | 2 | 2.121 | | 186.89 | 0.90042 | 3 | 0.004817275 | | 8.29 | 0.35188 | 5 | 0.042435963 | | 699.92 | 0.26267 | 4 | 0.000375217 | Next, we can identify the shader corresponding to each frame by comparing the timestamps. <figure align="center"> <a href="https://hackmd.io/_uploads/H1l0sxfdCC.png"> <img src="https://hackmd.io/_uploads/H1l0sxfdCC.png" alt="overall shaders"/> <br> </a> <center><em>Overall 5 Shaders</em></center> </figure> <figure align="center"> <a href="https://hackmd.io/_uploads/SJJ7MGOCR.png"> <img src="https://hackmd.io/_uploads/SJJ7MGOCR.png" alt="overall frames"/> <br> </a> <center><em>Overall 5 Frames</em></center> </figure> <figure align="center"> <a href="https://hackmd.io/_uploads/BJu-WMdA0.png"> <img src="https://hackmd.io/_uploads/BJu-WMdA0.png" alt="Frame 1"/> <br> </a> <center><em>Frame 1 as to Shader 1</em></center> </figure> <figure align="center"> <a href="https://hackmd.io/_uploads/H1hmZGuR0.png"> <img src="https://hackmd.io/_uploads/H1hmZGuR0.png" alt="Frame 2"/> <br> </a> <center><em>Frame 2 as to Shader 2</em></center> </figure> <figure align="center"> <a href="https://hackmd.io/_uploads/HJGO-MuAC.png"> <img src="https://hackmd.io/_uploads/HJGO-MuAC.png" alt="Frame 3"/> <br> </a> <center><em>Frame 3 as to Shader 3</em></center> </figure> <figure align="center"> <a href="https://hackmd.io/_uploads/r1W9-MOCC.png"> <img src="https://hackmd.io/_uploads/r1W9-MOCC.png" alt="Frame 4"/> <br> </a> <center><em>Frame 4 as to Shader 4</em></center> </figure> <figure align="center"> <a href="https://hackmd.io/_uploads/ryV2ZzuRC.png"> <img src="https://hackmd.io/_uploads/ryV2ZzuRC.png" alt="Frame 5"/> <br> </a> <center><em>Frame 5 as to Shader 5</em></center> </figure> This analysis highlights that Frame 3, associated with the `bucket_wise_accumulation` shader, is a key area requiring optimization. ### CPU and GPU synchronizing Optimizing the synchronization between CPU and GPU could significantly improve performance. Current profiling data shows that the MSM algorithm is fully executed on either CPU or GPU, without leveraging simultaneous CPU-GPU workloads. This represents a potential area for improvement, especially in resource-constrained environments like mobile devices. <figure align="center"> <a href="https://hackmd.io/_uploads/rkvf2bd0C.png"> <img src="https://hackmd.io/_uploads/rkvf2bd0C.png" alt="Frame 5"/> <br> </a> <center><em>Profiling Trace of CPU and GPU usage</em></center> </figure> ### EC Point Conversion (64-bit to 32-bit) The conversion of elliptic curve (EC) points from 64-bit (CPU-native) to 32-bit (GPU-native) representations is a significant overhead, accounting for the majority of the encoding process. This indicates that EC point conversion could be a key target for optimization. ``` Encoding instance to GPU memory... > Conversion of ec points from 64-bit to 32-bit: 38.7275ms > Encode into shared memory for GPU usage: 855.125µs Done encoding data in 39.8385ms ``` <center><em>Logs for Metal MSM on laptop</em></center> ### Misc #### GPU Performance State Trace The GPU operates at maximum performance for 88% of the time in the current Metal MSM implementation. This metric will serve as a baseline for future improvements. <figure align="center"> <a href="https://hackmd.io/_uploads/SkLonbdRA.png"> <img src="https://hackmd.io/_uploads/SkLonbdRA.png" alt="GPU Perf State"/> <br> </a> <center><em>GPU runs at maximum performance for most of the time</em></center> </figure> #### Memory Events (CPU-GPU) In the 16x1 instance, the Metal Resource Event shows 45.77 MiB of memory allocated and 44.00 MiB deallocated, which is a reasonable resource consumption for the current instance size. <figure align="center"> <a href="https://hackmd.io/_uploads/ByB2retA0.png"> <img src="https://hackmd.io/_uploads/ByB2retA0.png" alt="GPU Memory Consumption"/> <br> </a> <center><em>GPU Memory Event</em></center> </figure> The total memory allocated for Arkworks MSM, primarily executed on the CPU, is approximately 245.52 MiB, while for Metal MSM, mainly executed on the GPU, it is about 310.76 MiB. These numbers align with the Metal Resource Event data obtained earlier. With this metrics, we can further investigate the cause of the [GPU Hang Error mentioned in previous report](https://hackmd.io/v8WPAG8-RsCANrbv_seSXw#GPU-Hang-Error-on-mobile-device) and work towards finding a solution. <figure align="center"> <a href="https://hackmd.io/_uploads/SJjaIgF00.png"> <img src="https://hackmd.io/_uploads/SJjaIgF00.png" alt="arkwork memory alloc"/> <br> </a> <center><em>Allocations of Arkworks MSM</em></center> </figure> <figure align="center"> <a href="https://hackmd.io/_uploads/rkTCIeFR0.png"> <img src="https://hackmd.io/_uploads/rkTCIeFR0.png" alt="metal memory alloc"/> <br> </a> <center><em>Allocations of Metal MSM</em></center> </figure> #### Single Encoder Submitting Command Buffers Currently, there's only 1 encoder response for submitting command buffers for all frames. We would research more about whether multiple encoders could improve performance. <figure align="center"> <a href="https://hackmd.io/_uploads/B1oFcWOAC.png"> <img src="https://hackmd.io/_uploads/B1oFcWOAC.png" alt="encoder issue"/> <br> </a> <center><em>Command Buffer Submissions</em></center> </figure> ## Comparison In this section, we compared 16x1, 18x1, and 20x1 instances across the aforementioned metrics to get a deeper understanding of how instance size impacts the performance of Metal MSM. ### CPU to GPU latency Observations: - Frame 3 being exceptionally I/O-bound. The $\delta{}$ ratio grows dramatically from instance sizes of 2^16 to 2^18. - Frame 3 is related to the `bucket_wise_accumulation` shader - The MSM algorithm has been designed in a parallel computating style - Frame 1 and 2 are relatively stabled I/O-bound events. - Both Frame 1 and 2 are related to shaders for preprocessing the bucket. - The ratio is relatively low compared to Frame 3. The improvement of Frame 3 should be the priority. - Frames 4 and 5 are relatively stabled computation-bound events, indicating periods of optimal GPU utilization. | Frame | 16x1 avg. $\delta$ ratio | 18x1 avg. $\delta$ ratio | 20x1 avg. $\delta$ ratio | | ----- | ------------------------ | ------------------------ | ------------------------ | | 1 | 3.666667|4|1.21514| | 2 | 2.121000|2.28659|2.44561| | 3 | 4.239483|111.2822585|660.4654879| | 4 | 0.000375|0.350657|0.00156667| | 5 | 0.042436|0.0345243|0.0371402| ### EC Point Conversion (64-bit to 32-bit) The time spent converting EC points is linearly proportional to instance size, consistently representing 97% of total encoding time. | Instance Size | Conversion of EC Points (ms) | Encode into Shared Memory (ms) | Total Encoding Time (ms) | |---------------|------------------------------|---------------------------------|--------------------------| | 16x1 | 38.7275 | 0.855125 | 39.8385 | | 18x1 | 156.096625 | 3.61975 | 159.932833 | | 20x1 | 596.744667 | 14.896834 | 612.829833 | ### GPU Performance State Trace Despite increasing workloads, the ratio remains relatively stable, suggesting that the GPU handles peak loads efficiently relative to total processing time. | Instance Size | Overall Time (s) | Maximum Time (s) | Max / Overall (%) | |-------|------------------|------------------|--------------------| | 16x1 | 1.84 | 1.62 | 88.04% | | 18x1 | 10.49 | 10.23 | 97.52% | | 20x1 | 42.20 | 40.23 | 95.33% | ### Memory Events (CPU-GPU) The increase in the Metal Resource Event is proportional to the size. However, the other resource events remain nearly constant, even as the instance size grows. | Instance Size | Metal Resource Event (MiB) | Total (MiB) | | ------------- | -------------------------- | ----------- | | 16x1 | 89.77 | 310.76 | | 18x1 | 275.45 | 436.43 | | 20x1 | 905.77 | 1157.76 | ## Raw Profiling Instruments You can download the full profiling data for further analysis. Please download the whole folder with name `SIZEx1 msm profile.trace` and open it with Xcode. - [2^16 instances size, 1 instance](https://drive.google.com/drive/folders/1HqbKo4sQ7uekk3v-bjcstx4ntARyuLjL?usp=sharing) - [2^18 instances size, 1 instance](https://drive.google.com/drive/folders/1Mzz_D0S_5ojjOodBS8cFcan5YWzNlodl?usp=sharing) - [2^20 instances size, 1 instance](https://drive.google.com/drive/folders/1hPSHI1GfyIXVy0LtZLzKQpU8xmnlW2Ef?usp=sharing) ## References - [Analyzing the performance of your Metal app](https://developer.apple.com/documentation/xcode/analyzing-the-performance-of-your-metal-app/) - [Analyzing the memory usage of your Metal app](https://developer.apple.com/documentation/xcode/analyzing-the-memory-usage-of-your-metal-app) - [Avoid stalls between CPU and GPU work by using multiple instances of a resource](https://developer.apple.com/documentation/metal/resource_synchronization/synchronizing_cpu_and_gpu_work) - [Performance Optimization | Metal by Tutorials](https://www.kodeco.com/books/metal-by-tutorials/v2.0/chapters/24-performance-optimization) - [Improve your app’s shader performance by examining and editing your shaders](https://developer.apple.com/documentation/xcode/inspecting-shaders) - [Find and address performance bottlenecks using the Metal debugger](https://developer.apple.com/documentation/xcode/optimizing-gpu-performance) - [Discover Metal debugging, profiling, and asset creation tools](https://developer.apple.com/videos/play/wwdc2021/10157) ## Appendix ### 18x1 $\delta{}$ Ratio | Duration (s) | CPU to GPU Latency (s) | Frame | $\delta{}$ Ratio (Latency/Duration) | |---------------:|-------------------------:|--------:|---------------------------:| | 3.36 | 5.46 | 3 | 1.625 | | 0.26775 | 5.2 | 3 | 19.4211 | | 0.23393 | 4.93 | 3 | 21.0747 | | 0.20092 | 4.76 | 3 | 23.691 | | 0.00194 | 4.46 | 3 | 2298.97 | | 0.29594 | 4.46 | 3 | 15.0706 | | 0.19492 | 4.27 | 3 | 21.9064 | | 0.01185 | 4.26 | 3 | 359.494 | | 0.05986 | 4.2 | 3 | 70.1637 | | 0.23494 | 3.96 | 3 | 16.8554 | | 0.17993 | 3.78 | 3 | 21.0082 | | 0.02094 | 3.75 | 3 | 179.083 | | 0.29594 | 3.46 | 3 | 11.6916 | | 0.27575 | 3.19 | 3 | 11.5684 | | 0.22594 | 2.96 | 3 | 13.1008 | | 0.18892 | 2.77 | 3 | 14.6623 | | 0.01293 | 2.76 | 3 | 213.457 | | 0.29594 | 2.46 | 3 | 8.3125 | | 0.17892 | 2.28 | 3 | 12.7431 | | 0.02893 | 2.26 | 3 | 78.1196 | | 0.06589 | 2.19 | 3 | 33.2372 | | 0.22894 | 1.96 | 3 | 8.5612 | | 0.18692 | 1.77 | 3 | 9.46929 | | 0.01394 | 1.76 | 3 | 126.255 | | 0.29593 | 1.46 | 3 | 4.9336 | | 0.17986 | 1.28 | 3 | 7.11665 | | 0.09486 | 1.19 | 3 | 12.5448 | | 0.22894 | 0.95974 | 3 | 4.1921 | | 0.18593 | 0.77376 | 3 | 4.16157 | | 0.01592 | 0.75776 | 3 | 47.598 | | 0.30094 | 0.45674 | 3 | 1.51771 | | 0.26875 | 0.18793 | 3 | 0.699274 | | 0.00251 | 0.01004 | 1 | 4 | | 0.00164 | 0.00375 | 2 | 2.28659 | | 0.18587 | 0.00181 | 3 | 0.00973799 | | 0.0014 | 0.00049092 | 4 | 0.350657 | | 0.00843 | 0.00029104 | 5 | 0.0345243 | ### 20x1 $\delta{}$ Ratio | Duration (ms) | CPU to GPU Latency (ms) | Frame | $\delta{}$ Ratio (Latency/Duration) | |----------------:|--------------------------:|:--------|-------------:| | 1910.00 | 35620 | 3 | 18.6492 | | 250.93 | 35370 | 3 | 140.956 | | 914.21 | 35370 | 3 | 38.6891 | | 245.93 | 35120 | 3 | 142.805 | | 198.93 | 34920 | 3 | 175.539 | | 939.50 | 34790 | 3 | 37.0369 | | 301.96 | 34620 | 3 | 114.646 | | 252.90 | 34470 | 3 | 136.323 | | 244.94 | 34120 | 3 | 139.281 | | 170.92 | 33950 | 3 | 198.566 | | 29.93 | 33920 | 3 | 1133.83 | | 300.94 | 33620 | 3 | 111.711 | | 172.86 | 33450 | 3 | 193.501 | | 78.86 | 33370 | 3 | 423.049 | | 245.94 | 33120 | 3 | 134.718 | | 171.92 | 32950 | 3 | 191.632 | | 28.93 | 32920 | 3 | 1137.95 | | 300.93 | 32620 | 3 | 108.418 | | 251.75 | 32370 | 3 | 128.570 | | 244.94 | 32120 | 3 | 131.131 | | 170.92 | 31950 | 3 | 186.893 | | 29.94 | 31920 | 3 | 1066.14 | | 301.94 | 31620 | 3 | 104.697 | | 163.92 | 31460 | 3 | 191.976 | | 41.85 | 31420 | 3 | 751.118 | | 46.87 | 31370 | 3 | 669.219 | | 244.94 | 31120 | 3 | 127.079 | | 501.94 | 30620 | 3 | 61.0064 | | 189.92 | 30430 | 3 | 160.213 | | 10.94 | 30240 | 3 | 2764.73 | | 59.73 | 30130 | 3 | 504.585 | | 236.97 | 30120 | 3 | 127.126 | | 501.94 | 29920 | 3 | 59.6124 | | 165.92 | 29640 | 3 | 178.676 | | 38.85 | 29240 | 3 | 752.792 | | 54.87 | 29360 | 3 | 535.191 | | 237.94 | 29120 | 3 | 122.382 | | 502.94 | 28260 | 3 | 56.1894 | | 170.92 | 28450 | 3 | 166.452141 | | 29.94 | 2994 | 3 | 100.000000 | | 58.74 | 3876 | 3 | 65.985700 | | 236.94 | 28120 | 3 | 118.679835 | | 495.94 | 27630 | 3 | 55.712385 | | 178.92 | 27450 | 3 | 153.420523 | | 23.84 | 27420 | 3 | 1150.167785 | | 63.87 | 27360 | 3 | 428.370127 | | 236.93 | 27120 | 3 | 114.464188 | | 501.94 | 26620 | 3 | 53.034227 | | 173.92 | 26450 | 3 | 152.081417 | | 25.94 | 26240 | 3 | 1011.565150 | | 50.88 | 26370 | 3 | 518.278302 | | 1.84 | 26370 | 3 | 14331.521739 | | 244.94 | 26120 | 3 | 106.638360 | | 171.92 | 25950 | 3 | 150.942299 | | 29.94 | 25920 | 3 | 865.731463 | | 300.94 | 25620 | 3 | 85.133249 | | 252.89 | 25370 | 3 | 100.320297 | | 33.89 | 25330 | 3 | 747.418117 | | 1.91 | 25330 | 3 | 13261.780105 | | 15.94 | 25320 | 3 | 1588.456713 | | 191.94 | 25120 | 3 | 130.874232 | | 170.92 | 24950 | 3 | 145.974725 | | 20.94 | 24930 | 3 | 1190.544413 | | 309.94 | 24620 | 3 | 79.434729 | | 172.86 | 24450 | 3 | 141.443943 | | 78.86 | 24370 | 3 | 309.028658 | | 245.93 | 24120 | 3 | 98.076688 | | 171.92 | 23950 | 3 | 139.308981 | | 33.94 | 23920 | 3 | 704.773129 | | 295.94 | 23620 | 3 | 79.813476 | | 252.75 | 23370 | 3 | 92.462908 | | 244.94 | 23120 | 3 | 94.390463 | | 169.92 | 22950 | 3 | 135.063559 | | 29.94 | 22920 | 3 | 765.531062 | | 301.94 | 22260 | 3 | 73.723256 | | 252.89 | 22270 | 3 | 88.062003 | | 244.94 | 22120 | 3 | 90.3078 | | 170.92 | 21950 | 3 | 128.423 | | 34.94 | 21920 | 3 | 627.361 | | 295.94 | 21620 | 3 | 73.0553 | | 164.86 | 21460 | 3 | 130.171 | | 86.87 | 21370 | 3 | 245.962 | | 245.94 | 21120 | 3 | 85.8942 | | 170.92 | 20950 | 3 | 122.607 | | 20.94 | 20930 | 3 | 1000.478 | | 309.94 | 20620 | 3 | 66.5348 | | 63.94 | 20560 | 3 | 321.513 | | 194.88 | 20360 | 3 | 104.482 | | 837.62 | 20350 | 3 | 24.2935 | | 237.94 | 20120 | 3 | 84.5652 | | 178.92 | 19940 | 3 | 111.466 | | 20.94 | 19920 | 3 | 951.766 | | 67.61 | 19860 | 3 | 293.782 | | 234.94 | 19620 | 3 | 83.5117 | | 198.76 | 19420 | 3 | 97.6984 | | 60.89 | 19360 | 3 | 317.994 | | 236.94 | 19120 | 3 | 80.6883 | | 179.92 | 18940 | 3 | 105.303 | | 25.94 | 19020 | 3 | 733.281 | | 60.42 | 18860 | 3 | 312.177 | | 40.41 | 18820 | 3 | 465.708 | | 17.3 | 18800 | 3 | 1086.71 | | 583.33 | 18790 | 3 | 32.2115 | | 2.35 | 18790 | 3 | 7995.74 | | 2.78 | 18790 | 3 | 6760.07 | | 1.27 | 18790 | 3 | 14796.1 | | 1.02 | 18790 | 3 | 18421.6 | | 168.33 | 18780 | 3 | 111.554 | | 3.89 | 18780 | 3 | 4827.25 | | 839.5 | 18780 | 3 | 22.3695 | | 538.79 | 18780 | 3 | 34.8583 | | 153.94 | 18620 | 3 | 120.960 | | 169.87 | 18450 | 3 | 108.631 | | 87.86 | 18360 | 3 | 208.960 | | 242.94 | 18120 | 3 | 74.586318 | | 171.92 | 17950 | 3 | 104.409027 | | 28.94 | 17920 | 3 | 619.212163 | | 295.94 | 17620 | 3 | 59.539096 | | 251.75 | 17370 | 3 | 68.997021 | | 250.94 | 17120 | 3 | 68.241672 | | 163.92 | 16960 | 3 | 103.455135 | | 36.94 | 16920 | 3 | 457.902597 | | 295.94 | 16620 | 3 | 56.160192 | | 170.92 | 16450 | 3 | 96.255985 | | 23.86 | 16430 | 3 | 688.586206 | | 10.94 | 16420 | 3 | 1500.365355 | | 45.86 | 16370 | 3 | 356.851235 | | 249.94 | 16120 | 3 | 64.514004 | | 497.94 | 15620 | 3 | 31.372154 | | 178.92 | 15440 | 3 | 86.329664 | | 26.94 | 15420 | 3 | 572.360964 | | 51.88 | 15370 | 3 | 296.174903 | | 900.04 | 15360 | 3 | 17.066019 | | 909.21 | 15360 | 3 | 16.898074 | | 242.94 | 15120 | 3 | 62.261239 | | 162.92 | 14960 | 3 | 91.840450 | | 37.94 | 14920 | 3 | 393.162932 | | 295.94 | 14620 | 3 | 49.404889 | | 179.92 | 14440 | 3 | 80.281246 | | 23.85 | 14420 | 3 | 604.185234 | | 47.87 | 14370 | 3 | 300.197073 | | 250.94 | 14120 | 3 | 56.258622 | | 496.94 | 13620 | 3 | 27.409680 | | 163.93 | 13460 | 3 | 82.117005 | | 41.94 | 13420 | 3 | 319.948546 | | 52.75 | 13360 | 3 | 253.308612 | | 236.94 | 13130 | 3 | 55.414282 | | 503.94 | 12620 | 3 | 25.044341 | | 163.92 | 12460 | 3 | 76.004882 | | 41.85 | 12420 | 3 | 296.792368 | | 53.86 | 12360 | 3 | 229.481122 | | 241.94 | 12120 | 3 | 50.093179 | | 498.94 | 11620 | 3 | 23.29 | | 197.92 | 11420 | 3 | 57.70 | | 0.93517 | 11420 | 3 | 12210 | | 57.76 | 11370 | 3 | 196.85 | | 244.94 | 11120 | 3 | 45.40 | | 170.93 | 10950 | 3 | 64.06 | | 29.94 | 10920 | 3 | 364.64 | | 295.94 | 10620 | 3 | 35.89 | | 259.89 | 10360 | 3 | 39.86 | | 241.93 | 10120 | 3 | 41.83 | | 171.92 | 9950 | 3 | 57.88 | | 28.94 | 9920 | 3 | 342.81 | | 296.94 | 9620 | 3 | 32.40 | | 171.86 | 9450 | 3 | 54.98 | | 87.86 | 9360 | 3 | 106.50 | | 241.94 | 9120 | 3 | 37.70 | | 172.92 | 8950 | 3 | 51.76 | | 28.94 | 8920 | 3 | 308.26 | | 295.94 | 8620 | 3 | 29.12 | | 251.75 | 8370 | 3 | 33.25 | | 249.94 | 8120 | 3 | 32.49 | | 164.93 | 7960 | 3 | 48.28 | | 36.94 | 7920 | 3 | 214.45 | | 295.94 | 7620 | 3 | 25.75 | | 170.92 | 7450 | 3 | 43.57 | | 34.94 | 7420 | 3 | 212.30 | | 45.89 | 7370 | 3 | 160.57 | | 249.94 | 7120 | 3 | 28.49 | | 164.93 | 6960 | 3 | 42.20 | | 36.94 | 6920 | 3 | 187.29 | | 295.94 | 6620 | 3 | 22.37 | | 171.86 | 6450 | 3 | 37.52 | | 77.83 | 6370 | 3 | 81.86 | | 252.97 | 6120 | 3 | 24.20 | | 164.93 | 5960 | 3 | 36.14 | | 35.88 | 5920 | 3 | 165.07 | | 295.00 | 6050 | 3 | 20.51 | | 255.88 | 5370 | 3 | 20.98 | | 1.94 | 5370 | 3 | 2768.04 | | 0.84612 | 5360 | 3 | 6334.8 | | 242.94 | 5120 | 3 | 21.0752 | | 173.92 | 4950 | 3 | 28.4614 | | 26.94 | 4920 | 3 | 182.628 | | 296.94 | 4620 | 3 | 15.5587 | | 259.89 | 4360 | 3 | 16.7763 | | 241.94 | 4120 | 3 | 17.029 | | 171.93 | 3950 | 3 | 22.9745 | | 28.94 | 3920 | 3 | 135.453 | | 296.94 | 3620 | 3 | 12.191 | | 163.87 | 3460 | 3 | 21.1143 | | 95.86 | 3360 | 3 | 35.0511 | | 241.94 | 3120 | 3 | 12.8958 | | 172.93 | 2950 | 3 | 17.0589 | | 28.94 | 2920 | 3 | 100.898 | | 295.94 | 2620 | 3 | 8.85315 | | 257.75 | 2370 | 3 | 9.19496 | | 244.94 | 2120 | 3 | 8.65518 | | 170.92 | 1950 | 3 | 11.4088 | | 29.94 | 1920 | 3 | 64.1283 | | 295.94 | 1620 | 3 | 5.47408 | | 170.92 | 1450 | 3 | 8.4835 | | 34.94 | 1420 | 3 | 40.6411 | | 53.89 | 1360 | 3 | 25.2366 | | 241.94 | 1120 | 3 | 4.62925 | | 171.92 | 949.52 | 3 | 5.52303 | | 28.94 | 920.5 | 3 | 31.8072 | | 296.94 | 623.5 | 3 | 2.09975 | | 171.86 | 451.58 | 3 | 2.6276 | | 87.87 | 363.58 | 3 | 4.1377 | | 241.94 | 121.5 | 3 | 0.502191 | | 69.92 | 51.51 | 3 | 0.736699 | | 2.85 | 6.97 | 2 | 2.44561 | | 46.88 | 4.56 | 3 | 0.0972696 | | 2700 | 4.23 | 4 | 0.00156667 | | 2.51 | 3.05 | 1 | 1.21514 | | 7.99 | 0.29675 | 5 | 0.0371402 |