Skip to content

Commit 281a1a9

Browse files
committed
Add plot for lossy compression with ZSTD and up to 3.6 GB (700k)
1 parent bbf362e commit 281a1a9

2 files changed

Lines changed: 179 additions & 1 deletion

File tree

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
#######################################################################
2+
# Copyright (c) 2019-present, Blosc Development Team <blosc@blosc.org>
3+
# All rights reserved.
4+
#
5+
# This source code is licensed under a BSD-style license (found in the
6+
# LICENSE file in the root directory of this source tree)
7+
#######################################################################
8+
9+
# Plots for the jit vs. numpy benchmarks on different array sizes and platforms.
10+
11+
import plotly.graph_objects as go
12+
import numpy as np
13+
14+
iobw = True # use I/O bandwidth instead of time
15+
16+
sizes = [1, 5, 10, 20, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 150, 200, 250, 300, 350, 400, 450, 500, 600, 700]
17+
sizes_GB = np.array([n * 1000 * n * 1000 * 4 * 2 / 2**30 for n in sizes])
18+
19+
# Default title
20+
title_ = "np.sum(((a ** 3 + np.sin(a * 2)) < c) & (b > 0), axis=1); (codec: ZSTD)"
21+
22+
# Load the data from AMD Ryzen 9 9800X3D (64 GB RAM)
23+
#title_ = "AMD Ryzen 9 9800X3D (64 GB RAM)"
24+
25+
create_ZSTD_l5_8bits_disk = [ 0.0291, 0.3015, 1.0396, 4.3120, 9.4448, 11.9615, 16.4934, 20.8363, 25.6686, 30.5084, 37.4541, 43.1708, 49.5912, 54.8510, 62.9904, 71.6792, 82.8624, 87.3148, 99.6089, 110.6020, 120.6817, 230.7189, 393.3838, 635.6783, 920.4081, 1224.8611, 1542.1973, 2067.7355, 2643.4060, 3960.7069, 6605.8679 ]
26+
compute_ZSTD_l5_8bits_disk = [ 0.0018, 0.0264, 0.0666, 0.3514, 0.5839, 0.7897, 1.0354, 1.3110, 1.6365, 1.9557, 2.3461, 2.7590, 3.1654, 3.6511, 4.1705, 4.6487, 5.2456, 5.9307, 6.6057, 7.1372, 7.8886, 14.4919, 26.9140, 41.5376, 59.6396, 79.8878, 109.3518, 134.7697, 167.8493, 242.3677, 328.7269 ]
27+
28+
create_ZSTD_l5_8bits_mem = [ 0.2848, 0.5540, 1.6162, 5.0427, 10.2004, 14.9469, 17.0872, 23.2580, 26.4399, 35.9111, 38.8774, 47.2819, 59.8694, 55.6182, 64.7790, 73.3225, 89.1435, 89.1889, 105.3143, 123.7543, 127.4739, 268.2381, 397.1528, 682.4370, 931.2079, 1408.0286, 1907.0228, 2513.9356, 3169.7178, 4898.9904, 6108.3949 ]
29+
compute_ZSTD_l5_8bits_mem = [ 3.5426, 0.0439, 0.0721, 0.3544, 0.6075, 0.7633, 1.0329, 1.2853, 1.6016, 1.9229, 2.2995, 2.7300, 3.1072, 3.5914, 4.0754, 4.5324, 5.1152, 5.8040, 6.4044, 6.9661, 7.7495, 14.3803, 26.1613, 40.5647, 58.5311, 77.8399, 105.7455, 132.6907, 166.3500, 247.3172, 325.7362 ]
30+
31+
create_ZSTD_l5_12bits_disk = [ 0.0431, 0.2961, 1.0377, 4.3224, 9.1700, 11.9641, 16.5006, 20.8539, 25.5999, 30.5143, 37.1139, 43.6415, 49.8283, 54.4649, 63.6562, 71.0058, 82.8709, 87.4242, 99.8155, 110.6995, 120.7145, 228.1858, 388.0447, 630.0056, 901.3052, 1227.0249, 1538.4994, 2192.4736, 3058.9535, 3970.1224, 6720.8534 ]
32+
compute_ZSTD_l5_12bits_disk = [ 0.0018, 0.0261, 0.0668, 0.3529, 0.5862, 0.8014, 1.0288, 1.3392, 1.6499, 1.9708, 2.3465, 2.8174, 3.1577, 3.6683, 4.2046, 4.6664, 5.2713, 5.9672, 6.6033, 7.3388, 7.9277, 14.7204, 26.9279, 41.8064, 59.8765, 80.5294, 108.8107, 136.0069, 169.9042, 242.5698, 334.2899 ]
33+
34+
create_ZSTD_l5_12bits_mem = [ 0.3097, 0.7280, 1.5824, 5.3017, 10.0199, 15.0386, 16.8093, 23.5793, 26.4025, 35.4388, 38.3893, 47.5386, 61.0661, 56.6073, 66.3175, 72.9117, 89.0572, 89.0964, 104.8680, 125.0135, 128.6147, 269.4906, 397.8105, 743.2941, 936.2004, 1440.9327, 1934.9108, 2547.0800, 3438.9840, 4912.5360, 6103.0010 ]
35+
compute_ZSTD_l5_12bits_mem = [ 3.2933, 0.0450, 0.0823, 0.3598, 0.6156, 0.7802, 1.0374, 1.3120, 1.6274, 1.9737, 2.3018, 2.7496, 3.0923, 3.6573, 4.0879, 4.5646, 5.1826, 5.8380, 6.4389, 7.0517, 7.7586, 14.6210, 26.0380, 40.9289, 58.5579, 79.5502, 106.3976, 134.6044, 166.4742, 237.0625, 333.7096 ]
36+
37+
create_ZSTD_l5_16bits_disk = [ 0.0430, 0.3144, 1.0715, 4.2417, 9.1328, 11.9006, 16.4920, 20.4754, 25.5973, 30.1237, 36.9232, 42.6159, 48.9959, 53.9110, 62.4312, 70.7186, 81.0649, 86.1593, 98.1041, 110.4069, 120.2413, 226.6709, 381.0409, 620.3338, 892.2901, 1240.1823, 1629.5867, 2177.8013, 2969.3828, 3967.6243, 6609.0145 ]
38+
compute_ZSTD_l5_16bits_disk = [ 0.0018, 0.0271, 0.0691, 0.3559, 0.5969, 0.8219, 1.0591, 1.3476, 1.6760, 1.9941, 2.3686, 2.8510, 3.1904, 3.7279, 4.2099, 4.7084, 5.3074, 5.9957, 6.6762, 7.2743, 8.0519, 14.8181, 27.5201, 42.3674, 60.4739, 81.2832, 112.6656, 139.3029, 174.4497, 246.2020, 336.9309 ]
39+
40+
create_ZSTD_l5_16bits_mem = [ 0.2618, 0.9147, 1.6346, 5.2474, 10.0476, 15.1650, 17.5610, 22.8673, 26.4274, 36.0352, 39.2973, 47.8204, 60.1208, 55.8942, 68.1996, 73.0547, 85.7855, 89.3090, 104.9364, 126.9699, 123.1824, 276.0629, 396.0899, 743.5490, 934.4396, 1478.9950, 1931.2574, 2532.6307, 3402.5700, 4885.8968, 6654.6702 ]
41+
compute_ZSTD_l5_16bits_mem = [ 2.7690, 0.0459, 0.0738, 0.3657, 0.6195, 0.7958, 1.0575, 1.3256, 1.6513, 2.0090, 2.3522, 2.8353, 3.1545, 3.6713, 4.1154, 4.6581, 5.2726, 5.9554, 6.5680, 7.2284, 7.9461, 14.6099, 26.8851, 41.2897, 59.4072, 79.7960, 108.8751, 136.0794, 169.3939, 240.8721, 338.8543 ]
42+
43+
create_ZSTD_l5_24bits_disk = [ 0.0443, 0.3082, 1.1479, 4.6196, 10.3190, 13.5080, 18.2468, 22.4225, 28.2498, 33.4455, 40.8569, 46.7288, 53.3009, 59.0729, 67.3034, 75.1796, 87.8337, 92.0496, 103.9884, 115.9744, 127.8724, 234.0250, 399.6466, 643.1328, 922.7186, 1243.4742, 1585.6460, 2392.9311, 3028.6756, 4026.1285, 6778.0339 ]
44+
compute_ZSTD_l5_24bits_disk = [ 0.0018, 0.0275, 0.0743, 0.3770, 0.6462, 0.8711, 1.1622, 1.4456, 1.8297, 2.1455, 2.5582, 3.0233, 3.4629, 3.9855, 4.5493, 5.0444, 5.7148, 6.4459, 7.0735, 7.6082, 8.5538, 15.6118, 28.4247, 43.4489, 62.4833, 84.2844, 112.2303, 145.1725, 175.4419, 250.6996, 342.5847 ]
45+
46+
create_ZSTD_l5_24bits_mem = [ 0.2846, 0.7443, 1.7465, 5.6776, 11.1323, 16.4522, 19.0117, 25.3204, 28.7993, 38.0313, 41.5742, 50.2025, 63.5148, 60.0686, 70.0280, 76.9878, 95.6996, 93.7957, 108.3032, 130.7858, 131.2840, 274.0678, 405.2104, 748.1952, 955.4778, 1448.5087, 1947.1579, 2444.6069, 3487.4620, 4914.8358, 6685.2610 ]
47+
compute_ZSTD_l5_24bits_mem = [ 2.7509, 0.0466, 0.0854, 0.3774, 0.6809, 0.8508, 1.1446, 1.4176, 1.8078, 2.1420, 2.5089, 2.9998, 3.4242, 3.9550, 4.4779, 4.9172, 5.5910, 6.2880, 6.9373, 7.5398, 8.3317, 15.4684, 27.6829, 43.0323, 61.5013, 82.3317, 110.7303, 140.3281, 173.7906, 248.9565, 340.5203 ]
48+
49+
create_ZSTD_l5_32bits_disk = [ 0.0515, 0.3116, 1.1512, 4.6352, 9.9101, 12.8060, 17.4190, 22.0518, 27.1258, 32.9336, 40.1834, 45.2333, 51.1433, 57.7009, 66.7316, 75.2147, 86.7955, 92.3465, 112.3666, 123.4091, 136.4982, 248.1517, 425.7151, 692.5093, 964.6273, 1288.3537, 1768.9565, 2363.8556, 3052.0195, 4435.4477, 7077.3454 ]
50+
compute_ZSTD_l5_32bits_disk = [ 0.0020, 0.0297, 0.0831, 0.4003, 0.7244, 0.9587, 1.2656, 1.5964, 1.9488, 2.3584, 2.8733, 3.3516, 3.6925, 4.4041, 4.9282, 5.7000, 6.0026, 7.1855, 7.6281, 8.3859, 9.1505, 16.9414, 31.5513, 47.6357, 66.7197, 88.0063, 124.9729, 157.2028, 189.8281, 277.6650, 372.2259 ]
51+
52+
create_ZSTD_l5_32bits_mem = [ 0.2740, 1.0527, 1.8111, 5.7117, 11.1256, 16.2087, 18.1610, 25.3161, 27.6771, 38.2490, 40.6003, 48.3606, 63.4355, 59.2211, 68.5838, 76.7220, 97.3595, 94.7692, 117.2560, 138.9500, 139.6692, 292.7232, 430.8667, 796.4217, 1008.3740, 1488.9369, 2143.2650, 2772.4041, 3675.6133, 5406.4743, 6472.9431 ]
53+
compute_ZSTD_l5_32bits_mem = [ 3.7490, 0.0531, 0.0929, 0.4056, 0.7479, 0.9526, 1.2541, 1.5919, 1.9174, 2.3495, 2.8487, 3.3340, 3.6438, 4.3989, 4.8966, 5.6537, 5.9449, 7.0888, 7.5406, 8.3222, 9.1164, 16.8181, 30.9136, 47.1204, 66.4587, 87.1323, 122.4179, 157.8325, 187.5637, 271.5958, 374.7192 ]
54+
55+
create_ZSTD_l5_f32_disk = [ 0.1891, 0.2530, 0.9717, 3.9297, 8.7861, 11.7525, 16.2177, 19.6682, 22.5171, 27.8397, 34.4995, 41.3844, 47.3245, 50.1879, 61.5008, 63.4198, 77.2572, 107.3055, 95.6815, 103.9656, 110.2893, 195.1330, 378.3826, 533.2835, 873.7248, 1151.9387, 1498.3907, 1954.9378, 2343.6427, 3477.0688, 4274.8765 ]
56+
compute_ZSTD_l5_f32_disk = [ 0.0013, 0.0150, 0.0526, 0.2082, 0.4613, 0.6286, 0.8218, 1.0329, 1.2733, 1.5246, 1.7876, 2.1808, 2.4450, 2.7508, 3.1495, 3.5895, 3.9414, 4.4979, 4.9185, 5.4491, 5.9133, 10.9502, 19.4659, 30.3280, 43.5058, 59.6969, 78.8010, 98.6456, 123.3424, 174.8172, 238.0731 ]
57+
58+
59+
yaxis_title = 'Time (s)'
60+
if iobw:
61+
yaxis_title = 'I/O bandwidth (GB/s)'
62+
# Convert times to I/O bandwidth
63+
create_ZSTD_l5_8bits_disk = sizes_GB[:len(create_ZSTD_l5_8bits_disk)] / np.array(create_ZSTD_l5_8bits_disk)
64+
compute_ZSTD_l5_8bits_disk = sizes_GB[:len(compute_ZSTD_l5_8bits_disk)] / np.array(compute_ZSTD_l5_8bits_disk)
65+
create_ZSTD_l5_8bits_mem = sizes_GB[:len(create_ZSTD_l5_8bits_mem)] / np.array(create_ZSTD_l5_8bits_mem)
66+
compute_ZSTD_l5_8bits_mem = sizes_GB[:len(compute_ZSTD_l5_8bits_mem)] / np.array(compute_ZSTD_l5_8bits_mem)
67+
create_ZSTD_l5_12bits_disk = sizes_GB[:len(create_ZSTD_l5_12bits_disk)] / np.array(create_ZSTD_l5_12bits_disk)
68+
compute_ZSTD_l5_12bits_disk = sizes_GB[:len(compute_ZSTD_l5_12bits_disk)] / np.array(compute_ZSTD_l5_12bits_disk)
69+
create_ZSTD_l5_12bits_mem = sizes_GB[:len(create_ZSTD_l5_12bits_mem)] / np.array(create_ZSTD_l5_12bits_mem)
70+
compute_ZSTD_l5_12bits_mem = sizes_GB[:len(compute_ZSTD_l5_12bits_mem)] / np.array(compute_ZSTD_l5_12bits_mem)
71+
create_ZSTD_l5_16bits_disk = sizes_GB[:len(create_ZSTD_l5_16bits_disk)] / np.array(create_ZSTD_l5_16bits_disk)
72+
compute_ZSTD_l5_16bits_disk = sizes_GB[:len(compute_ZSTD_l5_16bits_disk)] / np.array(compute_ZSTD_l5_16bits_disk)
73+
create_ZSTD_l5_16bits_mem = sizes_GB[:len(create_ZSTD_l5_16bits_mem)] / np.array(create_ZSTD_l5_16bits_mem)
74+
compute_ZSTD_l5_16bits_mem = sizes_GB[:len(compute_ZSTD_l5_16bits_mem)] / np.array(compute_ZSTD_l5_16bits_mem)
75+
create_ZSTD_l5_24bits_disk = sizes_GB[:len(create_ZSTD_l5_24bits_disk)] / np.array(create_ZSTD_l5_24bits_disk)
76+
compute_ZSTD_l5_24bits_disk = sizes_GB[:len(compute_ZSTD_l5_24bits_disk)] / np.array(compute_ZSTD_l5_24bits_disk)
77+
create_ZSTD_l5_24bits_mem = sizes_GB[:len(create_ZSTD_l5_24bits_mem)] / np.array(create_ZSTD_l5_24bits_mem)
78+
compute_ZSTD_l5_24bits_mem = sizes_GB[:len(compute_ZSTD_l5_24bits_mem)] / np.array(compute_ZSTD_l5_24bits_mem)
79+
create_ZSTD_l5_32bits_disk = sizes_GB[:len(create_ZSTD_l5_32bits_disk)] / np.array(create_ZSTD_l5_32bits_disk)
80+
compute_ZSTD_l5_32bits_disk = sizes_GB[:len(compute_ZSTD_l5_32bits_disk)] / np.array(compute_ZSTD_l5_32bits_disk)
81+
create_ZSTD_l5_32bits_mem = sizes_GB[:len(create_ZSTD_l5_32bits_mem)] / np.array(create_ZSTD_l5_32bits_mem)
82+
compute_ZSTD_l5_32bits_mem = sizes_GB[:len(compute_ZSTD_l5_32bits_mem)] / np.array(compute_ZSTD_l5_32bits_mem)
83+
create_ZSTD_l5_f32_disk = sizes_GB[:len(create_ZSTD_l5_f32_disk)] / np.array(create_ZSTD_l5_f32_disk)
84+
compute_ZSTD_l5_f32_disk = sizes_GB[:len(compute_ZSTD_l5_f32_disk)] / np.array(compute_ZSTD_l5_f32_disk)
85+
86+
87+
def add_ram_limit(figure, compute=True):
88+
y1_max = 20 if compute else 1
89+
#y1_max = 35 if compute else y1_max
90+
figure.add_shape(
91+
type="line", x0=64, y0=0, x1=64, y1=y1_max,
92+
line=dict(color="Gray", width=2, dash="dot"),
93+
)
94+
figure.add_annotation(x=np.log10(64), y=y1_max * .9, text="64 GB", showarrow=True, arrowhead=2, ax=40, ay=0, xref='x')
95+
96+
97+
# Plot the data. There will be 2 plots: one for create times and another for compute times
98+
labels = {
99+
'8bits_disk': "8 bits, disk",
100+
'8bits_mem': "8 bits, mem",
101+
'12bits_disk': "12 bits, disk",
102+
'12bits_mem': "12 bits, mem",
103+
'16bits_disk': "16 bits, disk",
104+
'16bits_mem': "16 bits, mem",
105+
'24bits_disk': "24 bits, disk",
106+
'24bits_mem': "24 bits, mem",
107+
'32bits_disk': "32 bits, disk",
108+
'32bits_mem': "32 bits, mem",
109+
'f32_disk': "f32, disk",
110+
'f32_mem': "f32, mem",
111+
}
112+
113+
# The create times plot
114+
fig_create = go.Figure()
115+
fig_create.add_trace(
116+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_8bits_disk, mode='lines+markers', name=labels["8bits_disk"]))
117+
fig_create.add_trace(
118+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_8bits_mem, mode='lines+markers', name=labels["8bits_mem"]))
119+
fig_create.add_trace(
120+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_12bits_disk, mode='lines+markers', name=labels["12bits_disk"]))
121+
fig_create.add_trace(
122+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_12bits_mem, mode='lines+markers', name=labels["12bits_mem"]))
123+
fig_create.add_trace(
124+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_16bits_disk, mode='lines+markers', name=labels["16bits_disk"]))
125+
fig_create.add_trace(
126+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_16bits_mem, mode='lines+markers', name=labels["16bits_mem"]))
127+
fig_create.add_trace(
128+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_24bits_disk, mode='lines+markers', name=labels["24bits_disk"]))
129+
fig_create.add_trace(
130+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_24bits_mem, mode='lines+markers', name=labels["24bits_mem"]))
131+
fig_create.add_trace(
132+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_32bits_disk, mode='lines+markers', name=labels["32bits_disk"]))
133+
fig_create.add_trace(
134+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_32bits_mem, mode='lines+markers', name=labels["32bits_mem"]))
135+
fig_create.add_trace(
136+
go.Scatter(x=sizes_GB, y=create_ZSTD_l5_f32_disk, mode='lines+markers', name=labels["f32_disk"],
137+
line=dict(color='brown')))
138+
#fig_create.add_trace(go.Scatter(x=sizes_GB, y=create_ZSTD_l5_f32_mem, mode='lines+markers', name=labels["f32_mem"]))
139+
fig_create.update_layout(title=f'Create operands: {title_}', xaxis_title='Size (GB)', yaxis_title=yaxis_title,
140+
xaxis_type="log")
141+
142+
# Add a vertical line at RAM limit
143+
add_ram_limit(fig_create, compute=False)
144+
145+
# The compute times plot
146+
fig_compute = go.Figure()
147+
fig_compute.add_trace(
148+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_8bits_disk, mode='lines+markers', name=labels["8bits_disk"]))
149+
fig_compute.add_trace(
150+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_8bits_mem, mode='lines+markers', name=labels["8bits_mem"]))
151+
fig_compute.add_trace(
152+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_12bits_disk, mode='lines+markers', name=labels["12bits_disk"]))
153+
fig_compute.add_trace(
154+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_12bits_mem, mode='lines+markers', name=labels["12bits_mem"]))
155+
fig_compute.add_trace(
156+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_16bits_disk, mode='lines+markers', name=labels["16bits_disk"]))
157+
fig_compute.add_trace(
158+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_16bits_mem, mode='lines+markers', name=labels["16bits_mem"]))
159+
fig_compute.add_trace(
160+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_24bits_disk, mode='lines+markers', name=labels["24bits_disk"]))
161+
fig_compute.add_trace(
162+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_24bits_mem, mode='lines+markers', name=labels["24bits_mem"]))
163+
fig_compute.add_trace(
164+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_32bits_disk, mode='lines+markers', name=labels["32bits_disk"]))
165+
fig_compute.add_trace(
166+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_32bits_mem, mode='lines+markers', name=labels["32bits_mem"]))
167+
fig_compute.add_trace(
168+
go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_f32_disk, mode='lines+markers', name=labels["f32_disk"],
169+
line=dict(color='brown')))
170+
#fig_compute.add_trace(go.Scatter(x=sizes_GB, y=compute_ZSTD_l5_f32_mem, mode='lines+markers', name=labels["f32_mem"]))
171+
fig_compute.update_layout(title=f'Blosc2 compute: {title_}', xaxis_title='Size (GB)', yaxis_title=yaxis_title,
172+
xaxis_type="log")
173+
174+
# Add a vertical line at RAM limit
175+
add_ram_limit(fig_compute, compute=True)
176+
177+
# Show the plots
178+
fig_create.show()
179+
fig_compute.show()

bench/ndarray/jit-reduc-float64-plot-semilogx.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
# Plots for the jit vs. numpy benchmarks on different array sizes and platforms.
1010

11-
import matplotlib.pyplot as plt
1211
import plotly.graph_objects as go
1312
import numpy as np
1413

0 commit comments

Comments
 (0)