@@ -95,7 +95,7 @@ Plot.plot({
9595 Plot .barY (latencyBarData, {x: " category" , y: " latency" , fill: " category" })
9696 ],
9797 x: {label: null , tickFormat : () => " " },
98- y: {label: " Latency (μs)" },
98+ y: {label: " Latency (μs)" , grid : true },
9999 color: {legend: true },
100100 width: 600 ,
101101 height: 400 ,
@@ -130,7 +130,7 @@ Plot.plot({
130130 Plot .rectY (filteredLatencyData, {x: " date" , y : d => d .med * 1e6 , fill: " coral" , interval: " day" })
131131 ],
132132 x: {type: " utc" , label: " Date" , domain: [thirtyDaysAgo, latestLatencyDate]},
133- y: {label: " Latency (μs)" },
133+ y: {label: " Latency (μs)" , grid : true },
134134 width: 800 ,
135135 height: 400 ,
136136 marginLeft: 60 ,
@@ -153,7 +153,124 @@ benchmark, which runs on two processes located on distinct nodes, and transfers
153153
154154### Latest Bandwidth Results
155155
156- TODO
156+ ``` js
157+ // Get unique dates from bandwidth data and sort chronologically
158+ const bandwidthDates = [... new Set (bandwidthData .map (d => String (d .date )))]
159+ .sort ((a , b ) => new Date (a) - new Date (b));
160+ const latestBandwidthDateInput = Inputs .select (bandwidthDates, {
161+ label: " Date" ,
162+ value: bandwidthDates[bandwidthDates .length - 1 ]
163+ });
164+ const selectedBandwidthDate = Generators .input (latestBandwidthDateInput);
165+ ```
166+
167+ ``` js
168+ // Filter data for selected date
169+ const bandwidthForDate = bandwidthData .filter (d => String (d .date ) === selectedBandwidthDate);
170+
171+ // Create function to generate data for specific op and busy_spin
172+ function getBandwidthData (op , busySpin ) {
173+ const concurrencies = [1 , 8 ];
174+ const xferSizes = {1048576 : " 1MiB" , 8388608 : " 8MiB" , 1000000 : " 1MB" };
175+ const data = [];
176+
177+ for (const conc of concurrencies) {
178+ for (const [xferSize , xferLabel ] of Object .entries (xferSizes)) {
179+ const entry = bandwidthForDate .find (d =>
180+ d .op === op &&
181+ d .concurrency === conc &&
182+ d .xfer_size === Number (xferSize) &&
183+ d .busy_spin === busySpin
184+ );
185+ data .push ({
186+ category: ` C${ conc} -${ xferLabel} ` ,
187+ throughput: entry ? entry[" MiB/s" ] / 1024 : 0
188+ });
189+ }
190+ }
191+ return data;
192+ }
193+
194+ const bandwidthPullFalse = getBandwidthData (" PULL" , false );
195+ const bandwidthPullTrue = getBandwidthData (" PULL" , true );
196+ const bandwidthPushFalse = getBandwidthData (" PUSH" , false );
197+ const bandwidthPushTrue = getBandwidthData (" PUSH" , true );
198+ ```
199+
200+ The following graphs show the bandwidth for different levels of transfer concurrency
201+ (1 or 8 threads) and different transfer sizes (1 MB, 1 MiB, or 8 MiB). Legends
202+ indicate the concurrency and transfer sizes (e.g. 1C-1MB represents 1 thread and 1 MB transfers).
203+
204+ ``` js
205+ html ` <div style =" margin-bottom : 1rem ;" >
206+ ${ latestBandwidthDateInput}
207+ </div >`
208+ ```
209+
210+ ``` js
211+ html ` <div style =" display : grid ; grid-template-columns : 1fr 1fr ; gap : 1rem ;" >
212+ <div >
213+ <h4 style =" text-align : center ; margin-bottom : 0.5rem ;" >PULL, Busy Spin: false</h4 >
214+ ${ Plot .plot ({
215+ marks: [
216+ Plot .barY (bandwidthPullFalse, {x: " category" , y: " throughput" , fill: " category" })
217+ ],
218+ x: {label: null },
219+ y: {label: " Throughput (GiB/s)" , grid: true },
220+ color: {legend: true },
221+ width: 380 ,
222+ height: 300 ,
223+ marginLeft: 60 ,
224+ marginBottom: 60
225+ })}
226+ </div >
227+ <div >
228+ <h4 style =" text-align : center ; margin-bottom : 0.5rem ;" >PULL, Busy Spin: true</h4 >
229+ ${ Plot .plot ({
230+ marks: [
231+ Plot .barY (bandwidthPullTrue, {x: " category" , y: " throughput" , fill: " category" })
232+ ],
233+ x: {label: null },
234+ y: {label: " Throughput (GiB/s)" , grid: true },
235+ color: {legend: true },
236+ width: 380 ,
237+ height: 300 ,
238+ marginLeft: 60 ,
239+ marginBottom: 60
240+ })}
241+ </div >
242+ <div >
243+ <h4 style =" text-align : center ; margin-bottom : 0.5rem ;" >PUSH, Busy Spin: false</h4 >
244+ ${ Plot .plot ({
245+ marks: [
246+ Plot .barY (bandwidthPushFalse, {x: " category" , y: " throughput" , fill: " category" })
247+ ],
248+ x: {label: null },
249+ y: {label: " Throughput (GiB/s)" , grid: true },
250+ color: {legend: true },
251+ width: 380 ,
252+ height: 300 ,
253+ marginLeft: 60 ,
254+ marginBottom: 60
255+ })}
256+ </div >
257+ <div >
258+ <h4 style =" text-align : center ; margin-bottom : 0.5rem ;" >PUSH, Busy Spin: true</h4 >
259+ ${ Plot .plot ({
260+ marks: [
261+ Plot .barY (bandwidthPushTrue, {x: " category" , y: " throughput" , fill: " category" })
262+ ],
263+ x: {label: null },
264+ y: {label: " Throughput (GiB/s)" , grid: true },
265+ color: {legend: true },
266+ width: 380 ,
267+ height: 300 ,
268+ marginLeft: 60 ,
269+ marginBottom: 60
270+ })}
271+ </div >
272+ </div >`
273+ ```
157274
158275### Bandwidth Over Time
159276
@@ -193,7 +310,7 @@ Plot.plot({
193310 Plot .rectY (filteredBandwidthData, {x: " date" , y : d => d[" MiB/s" ] / 1024 , fill: " green" , interval: " day" })
194311 ],
195312 x: {type: " utc" , label: " Date" , domain: [thirtyDaysAgoBandwidth, latestBandwidthDate]},
196- y: {label: " Throughput (GiB/s)" },
313+ y: {label: " Throughput (GiB/s)" , grid : true },
197314 width: 800 ,
198315 height: 400 ,
199316 marginLeft: 60 ,
0 commit comments