Scalable K-Core Decomposition for Static Graphs Using a Dynamic - - PowerPoint PPT Presentation
Scalable K-Core Decomposition for Static Graphs Using a Dynamic - - PowerPoint PPT Presentation
Scalable K-Core Decomposition for Static Graphs Using a Dynamic Graph Data Structure Alok Tripathy What Ill Show Maximal -core algorithm Up to 4 faster than previous research Up to 58 faster than popular graph
What Iβll Show
- Maximal π-core algorithm
β Up to 4π faster than previous research β Up to 58π faster than popular graph libraries
- π-core edge decomposition algorithm
β Up to 8π faster than previous research β Up to 129π faster than popular graph libraries
2
Alok Tripathy, GTC 2019
What Iβll Show
- Maximal π-core algorithm
β Up to 4π faster than previous research β Up to 58π faster than popular graph libraries
- π-core edge decomposition algorithm
β Up to 8π faster than previous research β Up to 129π faster than popular graph libraries β Us Uses a d dynamic g graph op
- peration
- ns
3
Alok Tripathy, GTC 2019
Takeaways
- Algorithms on static graphs can use dynamic
graph operations efficiently with the GPU.
- Dynamic graph operations can be computed
- n a GPU efficiently.
β Check out the Hornet data structure! β https://github.com/hornet-gt/hornet
4
Alok Tripathy, GTC 2019
Motivation
- Two types of graphs
β Static graphs that donβt change β Dynamic graphs that change frequently
- Edge/vertex insertions/deletions
- e.g. Facebook, road networks
5
Alok Tripathy, GTC 2019
Motivation
- Two types of graphs
β Static graphs that donβt change β Dynamic graphs that change frequently
- Edge/vertex insertions/deletions
- e.g. Facebook, road networks
- Algorithms on static graphs can benefit from
dynamic graph operations
6
Alok Tripathy, GTC 2019
- π-truss problem
7
Alok Tripathy, GTC 2019
Dynamic Operations on Static Graphs
- π-truss problem
β Subgraph where all edges belong to at least
π Β‘ β 2 triangles
β Can be extended to maximal π-truss
8
Alok Tripathy, GTC 2019
π = 4
Dynamic Operations on Static Graphs
- π-truss problem
β Subgraph where all edges belong to at least
π Β‘ β 2 triangles
β Can be extended to maximal π-truss β Applications: community detection, anomaly
detection
9
Alok Tripathy, GTC 2019
π = 4
Dynamic Operations on Static Graphs
π-truss Algorithm
10
- Ββ πΉ. = Β‘all Β‘edges Β‘in Β‘β₯ π Β‘ β 2 triangles
- Ββ while Β‘ πΉ. > 0
- Ββ delete Β‘πΉ. Β‘from Β‘G Β‘
- Ββ update Β‘triangles Β‘in Β‘G
- Ββ πΉ. = Β‘all Β‘edges Β‘in Β‘β₯ π Β‘ β 2 triangles
Alok Tripathy, GTC 2019
Takeaways
- Algorithms on static graphs can use dynamic
graph operations efficiently with the GPU.
- Dynamic graph operations can be computed
- n a GPU efficiently.
β Check out the Hornet data structure! β https://github.com/hornet-gt/hornet
11
Alok Tripathy, GTC 2019
Widely used graph data structures
12
Na Names Pr Pros
- s
Con Cons
Dense Adjacency Matrix
- Supports updates
- Poor locality
- Massive storage
requirements Linked lists
- Flexible
- Poor locality
- Limited parallelism
- Allocation time is costly
COO (Edge list) - unsorted
- Has some flexibility
- Updates are simple
- Lots of parallelism
- Poor locality
- Stores both the source and
destination CSR
- Uses exact amount of
memory
- Good locality
- Lots of parallelism
- Inflexible
These data structures donβt cut it
Oded Green, Alok Tripathy, GTC 2019
Compressed Sparse Row (CSR)
Pr Pros:
- Uses precise storage
requirements
- Great locality
β Good for GPUs
- Handful of arrays
β Simple to use and manage
Co Cons ns:
- Inflexible.
- Network growth
unsupported
- Topology changes
unsupported
- Property graphs not
supported
13
1 2 3 4 5 6 7 2 4 7 9 11 13 14 14
Src/Row Offset
1 2 5 3 4 2 6 2 5 1 4 3 2 5 2 7 4 1 4 1 2 4 1 7 1 2
Dest./Col. Value Oded Green, Alok Tripathy, GTC 2019
Hornet β A High Level View
14
1 2 2 5 0 5 2 7 0 3 4 4 1 4 2 6 1 2 2 5 4 1 1 4 7 1 3 2
Over-Ββallocated Β‘space
Dest Value 1 2 3 4 5 6 7 2 2 3 2 2 2 1 Vertex Id Id Us Used Po Pointer
USER-ΒβINTERFACE
Oded Green, Alok Tripathy, GTC 2019
Hornet in Detail
15
1 1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 2 2 3 2 2 2 1 Vertex Β‘Id Used ( (#Neighbors/nnz nnz) Po Pointer 1 2 5 2 0 5 5 7 0 3 4 2 1 4 2 6 1 2 2 5 4 1 1 4 7 1 3 2
πͺπ©π,π πͺπ©π,π πͺπ©π,π πͺπ©π,π
Bit Β‘status Β‘ Over-Ββallocated space for Β‘vertex insertions
USER-ΒβINTERFACE
Dest./Col. Weight
MEMORY MANAGER
bsize=1 bsize =2 bsize =2 bsize =4 Vec-ΒβTree Over-Ββallocated space for Β‘power-Ββof-Ββtwo rule
Oded Green, Alok Tripathy, GTC 2019
Hornet Insertion
16
Oded Green, Alok Tripathy, GTC 2019
Hornet Insertion Pseudocode
17
parallel Β‘for Β‘(u, Β‘v) Β‘in Β‘batch Β‘
- Ββ if Β‘uβs Β‘block Β‘is Β‘too Β‘full
- Ββ allocate Β‘a Β‘new Β‘block
- Ββ queue.add(u)
parallel Β‘for Β‘v Β‘in Β‘queue
- Ββ copy Β‘adjacency Β‘list Β‘to Β‘new Β‘block
parallel Β‘for Β‘(u, Β‘v) Β‘in Β‘batch
- Ββ add Β‘(u, Β‘v) Β‘to Β‘uβs Β‘block
Alok Tripathy, GTC 2019
Update Β‘Rate Β‘(edges Β‘per Β‘second)
in-Ββ2004 soc-ΒβLiveJournal1 cage15 kron_g500-Ββlogn21
Insertion Rates
- Supports over 150M updates per second
- Hornet
β 4π β 10π faster than cuSTINGER β Does not have πππ πππ πππππ Β‘πππ like cuSTINGER
- Scalable growth in update rate
18
cuSTIN INGER Ho Horne net
1,000 10,000 100,000 1,000,000 10,000,000 100,000,000 1,000,000,000Update Β‘Rate Β‘(edges Β‘per Β‘second)
in-Ββ2004 soc-ΒβLiveJournal1 cage15 kron_g500-Ββlogn21
103 104 105 106 107 108 109 103 104 105 106 107 108 109
Oded Green, Alok Tripathy, GTC 2019
Takeaways
- Algorithms on static graphs can use dynamic
graph operations efficiently with the GPU.
- Dynamic graph operations can be computed
- n a GPU efficiently.
β Check out the Hornet data structure! β https://github.com/hornet-gt/hornet
19
Alok Tripathy, GTC 2019
Motivation
- Current idea:
β Dynamic graph operations are only for dynamic graphs, not static graphs.
- Very expensive
- Why bother?
20
Alok Tripathy, GTC 2019
Motivation
- Current idea:
β Dynamic graph operations are only for dynamic graphs, not static graphs.
- Very expensive
- Why bother?
- New idea: Algorithms on static graphs can
benefit from dynamic graph operations
β If If we can efficiently parallelize operations
21
Alok Tripathy, GTC 2019
What Iβll Show
- 3 static graph algorithms
β All 3 leverage NVIDIA P100 GPUs.
- 2 beat the state-of-the-art
- 1 does not (does not have good GPU
utilization)
22
Alok Tripathy, GTC 2019
Algorithms
- Old maximal π-core algorithm
- New maximal π-core algorithm
- π-core edge decomposition
23
Alok Tripathy, GTC 2019
Algorithms
- Old maximal π-core algorithm Lο
- New maximal π-core algorithm
- π-core edge decomposition
24
Alok Tripathy, GTC 2019
- π-core
β Maximal subgraph where all vertices have
degree at least π
25
Alok Tripathy, GTC 2019
π = 2
Maximal π-core Definitions
- π-core
β Maximal subgraph where all vertices have
degree at least π
- Maximal π-core
β Largest π such that π-core exists in graph
26
Alok Tripathy, GTC 2019
Maximal π-core Definitions
π = 3
- π-core
β Maximal subgraph where all vertices have
degree at least π
- Maximal π-core
β Largest π such that π-core exists in graph
- Applications: visualization, community detection
27
Alok Tripathy, GTC 2019
Maximal π-core Definitions
π = 3
Maximal π-core High-Level
28
ππππ = 0 while Β‘vertices Β‘exist Β‘in Β‘G Β‘
- Ββ delete Β‘all Β‘vertices Β‘ Β‘ Β‘
with Β‘degree Β‘<= Β‘ππππ
- Ββ if Β‘there Β‘arenβt Β‘any
- Ββ increment Β‘ππππ
2 2 5 3 4 4 5 1 1 1 ππππ = 1
Alok Tripathy, GTC 2019
Maximal π-core High-Level
29
2 2 5 3 4 4 2 ππππ = 2
Alok Tripathy, GTC 2019
ππππ = 0 while Β‘vertices Β‘exist Β‘in Β‘G Β‘
- Ββ delete Β‘all Β‘vertices Β‘ Β‘ Β‘
with Β‘degree Β‘<= Β‘ππππ
- Ββ if Β‘there Β‘arenβt Β‘any
- Ββ increment Β‘ππππ
Maximal π-core High-Level
30
3 3 3 3 ππππ = 3
Alok Tripathy, GTC 2019
ππππ = 0 while Β‘vertices Β‘exist Β‘in Β‘G Β‘
- Ββ delete Β‘all Β‘vertices Β‘ Β‘ Β‘
with Β‘degree Β‘<= Β‘ππππ
- Ββ if Β‘there Β‘arenβt Β‘any
- Ββ increment Β‘ππππ
Old Maximal π-core Algorithm
31
ππππ = 0 while Β‘vertices Β‘exist Β‘in Β‘π»
- Ββ reset Β‘colors Β‘
- Ββ color Β‘all Β‘vertices
with Β‘degree Β‘β€ ππππ
- Ββ if Β‘#coloredvertices > Β‘0
- Ββ delete Β‘colored Β‘vertices
- Ββ delete Β‘incident Β‘edges
- Ββ insert Β‘vertices Β‘in Β‘π»
J
- Ββ insert Β‘edges Β‘in Β‘π»
J Β‘
- Ββ else
- Ββ increment Β‘ππππ
2 2 5 3 4 4 5 1 1 1 ππππ = 1
Alok Tripathy, GTC 2019
Old Maximal π-core Code
32
Alok Tripathy, GTC 2019
- ParK
β parallel π-core algorithm; IEEE BigData 2014 β Some parallelism β No dynamic graph operations
- igraph
β network analysis toolkit β Sequential β No dynamic graph operations
- Both run on Intel Xeon E5-2695; 36 cores, 72
threads
33
Alok Tripathy, GTC 2019
Compared Against
Old Maximal π-core Results
- Our algorithm is sometimes better than igraph.
- Our algorithm never beats ParK.
- Why are we so slow?
34
ππππ |πΎ| |π| π·ππ πππππππππ πΈπππ³ Β‘ ππππππ
ππππ β ππ£π’βππ
5.5π 8.6π 2.2π 15π 1π
πππ’πππ’πππ’π
3.8π 16.5π 1.3π 15π 1π
π‘ππ β πππ€ππΎππ£π πππ1
4.8π 42.9π πππ 11.3π 1π
π‘ππ β πππππ β π ππππ’ππππ‘βπππ‘
1.6π 22.3π 0.6π 16.6π 1π
π’π πππππ π‘
27.7π 140.6π πππ 6.8π 1π
π₯ππππππππ β ππππ β ππ
3.2π 65.8π πππ 5.1π 1π
Alok Tripathy, GTC 2019
GPU Utilization
35
Alok Tripathy, GTC 2019
GPU Utilization / Batch Size
36
Alok Tripathy, GTC 2019
1,000 10,000 100,000 1,000,000 10,000,000 100,000,000 1,000,000,000Update Β‘Rate Β‘(edges Β‘per Β‘second)
in-Ββ2004 soc-ΒβLiveJournal1 cage15 kron_g500-Ββlogn21
Algorithms
- Old maximal π-core algorithm Lο
- New maximal π-core algorithm
- π-core edge decomposition
37
Alok Tripathy, GTC 2019
Algorithms
- Old maximal π-core algorithm Lο
- New maximal π-core algorithm Jο
- π-core edge decomposition
38
Alok Tripathy, GTC 2019
New Maximal π-core Algorithm
39
- Flag vertices instead of deleting them.
while Β‘not Β‘every Β‘vertex Β‘is Β‘flagged
- Ββ flag Β‘all Β‘vertices Β‘with Β‘degree Β‘<= Β‘ππππ
- Ββ if Β‘there Β‘arenβt Β‘any
- Ββ increment Β‘ππππ
- Ββ else
- Ββ for Β‘each Β‘flagged Β‘vertex Β‘π€
- Ββ for Β‘each Β‘neighbor Β‘of Β‘π€
- Ββ decrement Β‘neighborβs Β‘degree
Alok Tripathy, GTC 2019
New Maximal π-core Code
40
Alok Tripathy, GTC 2019
New Maximal π-core Results
- Our algorithm always beats igraph.
- Our algorithm is sometimes better than ParK.
β At best, 3.9π faster β At worst, 4.3π slower
- Learned that batch size affected performance.
41
ππππ |πΎ| |π| π·ππ Β‘πππππππππ πΈπππ³ ππππππ
ππππ β ππ£π’βππ
5.5π 8.6π 58π 15π 1π
πππ’πππ’πππ’π
3.8π 16.5π 26π 15π 1π
π‘ππ β πππ€ππΎππ£π πππ1
4.8π 42.9π 7.4π 11.3π 1π
π‘ππ β πππππ β π ππππ’ππππ‘βπππ‘
1.6π 22.3π 15π 16.6π 1π
π’π πππππ π‘
27.7π 140.6π 1.6π 6.8π 1π
Alok Tripathy, GTC 2019
Algorithms
- Old maximal π-core algorithm Lο
- New maximal π-core algorithm Jο
- π-core edge decomposition
42
Alok Tripathy, GTC 2019
Algorithms
- Old maximal π-core algorithm Lο
- New maximal π-core algorithm Jο
- π-core edge decomposition Jο
43
Alok Tripathy, GTC 2019
- π-core edge decomposition
β For each edge, what is the largest π-core that
edge belongs to?
44
Alok Tripathy, GTC 2019
1 2 2 2 2 2 2
π-core Decomp. Definitions
π-core Decomp. Algorithm
45
while Β‘vertices Β‘exist Β‘in Β‘G
- Ββ find Β‘the Β‘maximal Β‘k-Ββcore Β‘in Β‘G Β‘
- Ββ mark Β‘all Β‘edges Β‘in Β‘k-Ββcore Β‘with Β‘value
k
- Ββ delete Β‘k-Ββcore Β‘from Β‘G Β‘
Alok Tripathy, GTC 2019
π-core Decomp. Code
46
Alok Tripathy, GTC 2019
- ParK Extension
β parallel π-core algorithm; IEEE BigData 2014 β Some parallelism β No dynamic graph operations β vertex flagging
- igraph Extension
β network analysis toolkit β Sequential β Uses edge deletions
- Both run on Intel Xeon E5-2695; 36 cores, 72
threads
47
Alok Tripathy, GTC 2019
Compared Against
π-core Decomp. Results
- Our algorithm always beats igraph
- Our algorithm always beats ParK (1.2π β 7.8π).
β Usually ~2π faster
- Our algorithm uses dynamic graph operations
β And effectively uses the GPU
48
ππππ |πΎ| |π| Β‘π·ππ Β‘ πππππππππ Β‘πΈπππ³ Β‘ ππππππ
ππππ β ππ£π’βππ
5.5π 8.6π 129.2π 51.5π 1π
πππ’πππ’πππ’π
3.8π 16.5π 63.8π 25π 1π
π‘ππ β πππ€ππΎππ£π πππ1
4.8π 42.9π 25.9π 3.3π 1π
π‘ππ β πππππ β π ππππ’ππππ‘βπππ‘
1.6π 22.3π 85.9π 36.3π 1π
π’π πππππ π‘
27.7π 140.6π 4.7π 4.1π 1π
Alok Tripathy, GTC 2019
π-core Decomp. GPU Utilization
49
Alok Tripathy, GTC 2019
- Decomp. vs. Slow Maximal π-core
50
Alok Tripathy, GTC 2019
Conclusion
- Dynamic graph operations can be computed
- n a GPU efficiently.
- Current idea:
β Dynamic graph operations are only for dynamic graphs, not static graphs
- New idea: Static graph algorithms can benefit
from dynamic graph operations
β If If we can efficiently utilize the system
51
Alok Tripathy, GTC 2019
Takeaway
- Consider dynamic graph operations when you
implement graph algorithms
β Even if the graph doesnβt change over time.
52
Alok Tripathy, GTC 2019
Thank you
53
- π-core Paper: Proceedings of IEEE BigData 2018
- π-truss, Hornet Paper: Proceedings of IEEE HPEC 2017/18
- Code: https://github.com/hornet-gt/hornet
Oded Green Georgia Tech/NVIDIA
- green@gatech.edu
@OdedGreen Polo Chau Georgia Tech polo@gatech.edu @PoloChau cc.gatech.edu/~dchau/ Fred Hohman Georgia Tech fredhohman@gatech.edu @fredhohman fredhohman.com Alok Tripathy Georgia Tech atripathy8@gatech.edu @alokpathy www.aloktripathy.me
Scalable K-Core Decomposition for Static Graphs Using a Dynamic Graph Data Structure
Alok Tripathy, GTC 2019
Backup slides
54
Oded Green, HPEC-18
- Compared against
β ParK: parallel π-core algorithm; BigData 2014 β igraph: network analysis toolkit
- Dynamic graph data structure
β Hornet, GPU-based
- Systems used
β Our algorithms: NVIDIA P100 β ParK, igraph: Intel Xeon E5-2695; 36 cores, 72 threads
- igraph is sequential
55
Alok Tripathy, GTC 2019
Performance
- Compared against
β Wang & Cheng: sequential algorithm for finding π-truss β Graphulo: parallel algorithm for finding π-tru
- Dynamic graph data structure
β cuSTINGER-Delta, GPU-based
- Evolved into Hornet
- Systems used
β Our algorithm: NVIDIA P100 β Wang & Cheng: Intel Core2 dual-core 2.80GHz CPU β Graphulo: 2 Intel i7dual-core
56
Alok Tripathy, GTC 2019
Performance
GPU Utilization / Batch Size
57
Alok Tripathy, GTC 2019
HKS (maximal k-core) results
- ParK: k-core algorithm from IEEE Big Data 2014
- HKS run on NVIDIA P100 with Hornet data structure.
58
ππππ |πΎ| |π| π°π³π» Β‘(πππ . ) πΈπππ³ Β‘(πππ . ) ππππππ Β‘(πππ . )
ππππ β ππ£π’βππ
5.5π 8.6π 0.731 2.2π 0.105 15π 1.633 1π
πππ’πππ’πππ’π
3.8π 16.5π 2.953 1.3π 0.253 15π 3.825 1π
π‘ππ β πππ€ππΎππ£π πππ1
4.8π 42.9π πππ πππ 0.549 11.3π 6.191 1π
π‘ππ β πππππ β π ππππ’ππππ‘βπππ‘
1.6π 22.3π 4.331 0.6π 0.155 16.6π 2.586 1π
π’π πππππ π‘
27.7π 140.6π πππ πππ 3.052 6.8π 20.693 1π
π₯ππππππππ β ππππ β ππ
3.2π 65.8π πππ πππ 0.764 5.1π 3.954 1π
Alok Tripathy, BigData 2018
HDS (k-core decomp) results
- ParK: k-core algorithm from IEEE Big Data 2014
- HDS run on NVIDIA P100 with Hornet data structure.
59
ππππ |πΎ| |π| π°π¬π» Β‘(πππ . ) πΈπππ³ Β‘(πππ . ) ππππππ Β‘(πππ . )
ππππ β ππ£π’βππ
5.5π 8.6π 6.184 13.3π 1.595 51.5π 82.066 1π
πππ’πππ’πππ’π
3.8π 16.5π 91.481 3.6π 13.294 25π 331.538 1π
π‘ππ β πππ€ππΎππ£π πππ1
4.8π 42.9π πππ πππ 487.112 3.3π 1572.985 1π
π‘ππ β πππππ β π ππππ’ππππ‘βπππ‘
1.6π 22.3π 50.049 4.7π 6.488 36.3π 235.790 1π
π’π πππππ π‘
27.7π 140.6π πππ πππ 1148.638 4.1π 4725.317 1π
π₯ππππππππ β ππππ β ππ
3.2π 65.8π πππ πππ 1397.323 2.1π 3003.166 1π
Alok Tripathy, BigData 2018
GPU Utilization
60
Alok Tripathy, BigData 2018
GPU Utilization / Batch Size
61
Alok Tripathy, BigData 2018
Maximal K-Core Algorithm (HKO)
62
Alok Tripathy, BigData 2018
while Β‘there Β‘are Β‘non-Ββflagged Β‘vertices flag Β‘all Β‘vertices Β‘with Β‘degree Β‘<= Β‘ππππ if Β‘there Β‘arenβt Β‘any increment Β‘ππππ else for Β‘each Β‘flagged Β‘vertex Β‘π€ for Β‘each Β‘neighbor Β‘of Β‘π€ decrement Β‘neighborβs Β‘degree
ππππ = 3
Maximal K-Core Algorithm (HKO)
63
Alok Tripathy, BigData 2018
Maximal K-Core Algorithm 1 (HKS)
64
Alok Tripathy, BigData 2018
Maximal K-Core Algorithm 1 (HKS)
65
Alok Tripathy, BigData 2018
Maximal K-Core Algorithm 1 (HKS)
66
Alok Tripathy, BigData 2018
Maximal K-Core Algorithm 1 (HKS)
67
Alok Tripathy, BigData 2018
Maximal K-Core Algorithm 1 (HKS)
68
Alok Tripathy, BigData 2018
K-Core Decomp. Algorithm 1 (HDS)
69
Alok Tripathy, BigData 2018
HKO (maximal k-core) results
- ParK: k-core algorithm from IEEE Big Data 2014
- HKO run on NVIDIA P100 with Hornet data structure.
70
ππππ |πΎ| |π| π°π³π· Β‘(πππ . ) πΈπππ³ Β‘(πππ . ) ππππππ Β‘(πππ . )
ππππ β ππ£π’βππ
5.5π 8.6π 0.028 15π 0.105 15π 1.633 1π
πππ’πππ’πππ’π
3.8π 16.5π 0.147 26π 0.253 15π 3.825 1π
π‘ππ β πππ€ππΎππ£π πππ1
4.8π 42.9π 0.838 7.4π 0.549 11.3π 6.191 1π
π‘ππ β πππππ β π ππππ’ππππ‘βπππ‘
1.6π 22.3π 0.174 15π 0.155 16.6π 2.586 1π
π’π πππππ π‘
27.7π 140.6π 13.160 1.6π 3.052 6.8π 20.693 1π
π₯ππππππππ β ππππ β ππ
3.2π 65.8π 1.987 2π 0.764 5.1π 3.954 1π
Alok Tripathy, BigData 2018
HDO (k-core decomp) results
- ParK: k-core algorithm from IEEE Big Data 2014
- HDO run on NVIDIA P100 with Hornet data structure.
71
ππππ |πΎ| |π| π°π¬π· Β‘(πππ . ) πΈπππ³ Β‘(πππ . ) ππππππ Β‘(πππ . )
ππππ β ππ£π’βππ
5.5π 8.6π 0.635 129.2π 1.595 51.5π 82.066 1π
πππ’πππ’πππ’π
3.8π 16.5π 5.200 63.8π 13.294 25π 331.538 1π
π‘ππ β πππ€ππΎππ£π πππ1
4.8π 42.9π 60.755 25.9π 487.112 3.3π 1572.985 1π
π‘ππ β πππππ β π ππππ’ππππ‘βπππ‘
1.6π 22.3π 2.756 85.9π 6.488 36.3π 235.790 1π
π’π πππππ π‘
27.7π 140.6π 1006.954 4.7π 1148.638 4.1π 4725.317 1π
π₯ππππππππ β ππππ β ππ
3.2π 65.8π 266.923 11.3π 1397.323 2.1π 3003.166 1π
Alok Tripathy, BigData 2018