Repository navigation
Expand file tree
/
Copy pathperformance-comparison.html
More file actions
1 lines (1 loc) · 7.66 KB
/
Copy pathperformance-comparison.html
File metadata and controls
1 lines (1 loc) · 7.66 KB
1
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>RTX 5080 · CUDA / WebGPU</title><style>body{margin:0;background:#10191d;color:#e4ece8;font:16px system-ui}main{max-width:1180px;margin:auto;padding:50px 28px}h1{font-size:44px;letter-spacing:-2px;margin:10px 0}p{max-width:1000px;line-height:1.65;color:#b4c4c3}a{color:#b8ef7f}small{display:block;color:#91a5a8;font-size:12px;margin-top:5px}table{width:100%;border-collapse:collapse;margin-top:24px}th,td{text-align:left;padding:15px 12px;border-bottom:1px solid #314146}th{color:#b8ef7f;font-size:13px}.bar{height:4px;background:#b8ef7f;margin-top:7px}select{padding:12px;background:#26363b;color:white;border:1px solid #506067;border-radius:6px}.scroll{overflow:auto}.badge{color:#b8ef7f;text-transform:uppercase;letter-spacing:2px;font-size:13px}</style><main><div class="badge">Measured on your GPU · 20 / 20 verified on both APIs</div><h1>CUDA ↔ WebGPU</h1><p>RTX 5080 · CUDA 13.3 · NVIDIA driver 616.64 · 2026-09-11 UTC<br>Ten identical kernel sources, two sizes, real GPU execution. Median microseconds per operation. Small text shows the observed sample range.</p><p><b>WebGPU / CUDA above 1 means CUDA graph replay was faster.</b> CUDA graph timing and WebGPU compute-pass timing both batch GPU-resident operations. Ordinary CUDA launches expose submission gaps. WebGPU wall time also includes encoding and completion waiting. Tiny differences can be noise.</p><label>Workload size <select id="scale"><option value="large">Large: 4M elements / 512² matrices / 262K particles</option><option value="small">Small: 256K elements / 128² matrices / 65K particles</option><option value="all">Both sizes</option></select></label><div class="scroll"><table><thead><tr><th>Kernel</th><th>WebGPU GPU µs</th><th>CUDA graph GPU µs</th><th>WebGPU / CUDA</th><th>CUDA ordinary GPU µs</th><th>WebGPU wall µs</th></tr></thead><tbody><tr data-scale="small"><td>saxpy<small>small</small></td><td>1.63<small>1.63–1.79</small></td><td>1.49<small>1.49–1.80</small></td><td><b>1.09×</b><div class="bar" style="width:27.29610565738042%"></div></td><td>6.66</td><td>3.31</td></tr><tr data-scale="small"><td>saxpy_vec4<small>small</small></td><td>1.44<small>1.41–1.60</small></td><td>1.40<small>1.27–1.72</small></td><td><b>1.03×</b><div class="bar" style="width:25.71227685082718%"></div></td><td>6.46</td><td>2.96</td></tr><tr data-scale="small"><td>matmul_naive<small>small</small></td><td>19.97<small>19.33–20.35</small></td><td>6.62<small>6.62–6.96</small></td><td><b>3.01×</b><div class="bar" style="width:75.35663294144665%"></div></td><td>10.25</td><td>24.87</td></tr><tr data-scale="small"><td>matmul_tiled<small>small</small></td><td>3.20<small>3.20–3.33</small></td><td>2.88<small>2.88–3.01</small></td><td><b>1.11×</b><div class="bar" style="width:27.7332409661103%"></div></td><td>7.00</td><td>5.52</td></tr><tr data-scale="small"><td>matmul_register<small>small</small></td><td>5.89<small>5.76–6.53</small></td><td>3.06<small>3.06–3.18</small></td><td><b>1.92×</b><div class="bar" style="width:48.05844205874858%"></div></td><td>8.00</td><td>11.11</td></tr><tr data-scale="small"><td>reduce_sum<small>small</small></td><td>3.68<small>3.68–3.71</small></td><td>3.55<small>3.39–3.59</small></td><td><b>1.04×</b><div class="bar" style="width:25.921767887561415%"></div></td><td>18.63</td><td>7.78</td></tr><tr data-scale="small"><td>convolution<small>small</small></td><td>2.05<small>2.05–2.11</small></td><td>1.81<small>1.67–1.98</small></td><td><b>1.13×</b><div class="bar" style="width:28.243162906845527%"></div></td><td>6.34</td><td>3.10</td></tr><tr data-scale="small"><td>histogram<small>small</small></td><td>4.10<small>4.10–4.29</small></td><td>3.82<small>3.82–4.06</small></td><td><b>1.07×</b><div class="bar" style="width:26.812862353266993%"></div></td><td>13.90</td><td>7.10</td></tr><tr data-scale="small"><td>transpose<small>small</small></td><td>1.76<small>1.73–1.95</small></td><td>1.21<small>1.21–1.38</small></td><td><b>1.46×</b><div class="bar" style="width:36.42572609092785%"></div></td><td>6.73</td><td>3.07</td></tr><tr data-scale="small"><td>particles<small>small</small></td><td>1.44<small>1.41–1.54</small></td><td>1.74<small>1.74–1.82</small></td><td><b>0.83×</b><div class="bar" style="width:20.688354326741276%"></div></td><td>6.74</td><td>3.31</td></tr><tr data-scale="large"><td>saxpy<small>large</small></td><td>16.26<small>16.16–16.29</small></td><td>16.16<small>16.06–16.33</small></td><td><b>1.01×</b><div class="bar" style="width:25.14970608536689%"></div></td><td>18.88</td><td>17.51</td></tr><tr data-scale="large"><td>saxpy_vec4<small>large</small></td><td>10.02<small>9.95–10.05</small></td><td>10.07<small>9.97–10.32</small></td><td><b>0.99×</b><div class="bar" style="width:24.85467758366823%"></div></td><td>12.67</td><td>11.25</td></tr><tr data-scale="large"><td>matmul_naive<small>large</small></td><td>231.42<small>230.53–232.06</small></td><td>107.18<small>106.95–108.53</small></td><td><b>2.16×</b><div class="bar" style="width:53.97936874863961%"></div></td><td>109.64</td><td>235.83</td></tr><tr data-scale="large"><td>matmul_tiled<small>large</small></td><td>64.26<small>63.62–64.77</small></td><td>63.08<small>62.21–63.34</small></td><td><b>1.02×</b><div class="bar" style="width:25.46420791729554%"></div></td><td>65.20</td><td>66.86</td></tr><tr data-scale="large"><td>matmul_register<small>large</small></td><td>46.21<small>45.95–47.49</small></td><td>43.08<small>42.92–44.10</small></td><td><b>1.07×</b><div class="bar" style="width:26.812933085880474%"></div></td><td>45.82</td><td>49.00</td></tr><tr data-scale="large"><td>reduce_sum<small>large</small></td><td>20.61<small>20.48–20.77</small></td><td>18.71<small>18.64–18.86</small></td><td><b>1.10×</b><div class="bar" style="width:27.53561579045622%"></div></td><td>25.36</td><td>25.57</td></tr><tr data-scale="large"><td>convolution<small>large</small></td><td>21.09<small>20.90–21.25</small></td><td>16.39<small>16.34–16.55</small></td><td><b>1.29×</b><div class="bar" style="width:32.172182297556326%"></div></td><td>18.99</td><td>22.23</td></tr><tr data-scale="large"><td>histogram<small>large</small></td><td>24.70<small>24.64–24.99</small></td><td>19.86<small>19.73–19.95</small></td><td><b>1.24×</b><div class="bar" style="width:31.09303631694281%"></div></td><td>23.36</td><td>27.85</td></tr><tr data-scale="large"><td>transpose<small>large</small></td><td>13.41<small>13.31–13.60</small></td><td>9.16<small>9.07–9.20</small></td><td><b>1.46×</b><div class="bar" style="width:36.60450109685125%"></div></td><td>11.16</td><td>15.04</td></tr><tr data-scale="large"><td>particles<small>large</small></td><td>4.51<small>4.51–4.74</small></td><td>4.93<small>4.72–5.03</small></td><td><b>0.91×</b><div class="bar" style="width:22.869669374454986%"></div></td><td>7.68</td><td>6.22</td></tr></tbody></table></div><p>Nine samples; 2,048 repeats per sample, 512 for matrices. Full reduction chains and histogram clearing are included. Particle compute excludes rendering. Inputs reset outside each sample; buffers are reused inside the sample. Float32 reference checks pass; integer histograms match exactly. This measures these kernels, not optimized CUDA libraries or cold transfers.</p><p><a href="performance-comparison.md">Full methodology and reproduction commands</a> · <a href="comparison-summary.json">Combined raw results</a> · <a href="../lab.html">Open live particle app</a></p></main><script>const s=document.querySelector('#scale');function filter(){document.querySelectorAll('tbody tr').forEach(r=>r.hidden=s.value!=='all'&&r.dataset.scale!==s.value)}s.onchange=filter;filter();</script></html>