Skip to content

Instantly share code, notes, and snippets.

@JobLeonard
Last active April 30, 2024 15:35
Show Gist options
  • Save JobLeonard/f7dcc09a641c48edb77aad952bb41bbc to your computer and use it in GitHub Desktop.
Save JobLeonard/f7dcc09a641c48edb77aad952bb41bbc to your computer and use it in GitHub Desktop.
TypedArray OOB read access
{"title":"TypedArray OOB read access","initialization":"// runs once\n\nconst size = 10000;\n\nconst ta1 = new Float32Array(size);\nconst ta2 = new Float32Array(size);\nconst ta3 = new Float32Array(size);\n\nfunction respectsBounds(arr) {\n let r = 0;\n for (let i = 0; i < arr.length; i++) {\n r += arr[i];\n }\n return r;\n};\n\nfunction respectsBounds2(arr) {\n let r = 0;\n for (let i = 0; i < size; i++) {\n r += arr[i];\n }\n return r;\n};\n\nfunction outOfBounds(arr) {\n let r = 0;\n const s2 = size + 1000;\n for (let i = 1000; i < s2; i++) {\n r += arr[i];\n }\n return r;\n};","setup":"// runs before each test\nconst r = Math.random;\nfor (let i = 0; i < ta1.length; i++) {\n ta1[i] = ta2[i] = ta3[i] = r();\n}","tests":[{"name":"respectsBounds","code":"const v = respectsBounds(ta1);","results":{"aborted":false,"count":5631,"cycles":3,"hz":42643.707176343305,"stats":{"moe":2.2939139350212393e-7,"rme":0.9782099413277913,"sem":1.1703642525618568e-7,"deviation":7.584827243539321e-7,"mean":0.000023450118815062878,"variance":5.75296043143363e-13,"numSamples":42},"times":{"cycle":0.13204761904761908,"elapsed":5.984,"period":0.000023450118815062878,"timeStamp":1714490511410}},"platforms":{"Mozilla/5.0 (X11; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0":{"aborted":false,"count":4793,"cycles":6,"hz":61536.68599301354,"stats":{"moe":1.6281218915511e-7,"rme":1.001892255987313,"sem":8.30674434464847e-8,"deviation":6.540737037716514e-7,"mean":0.000016250468868497943,"variance":4.2781240996556596e-13,"numSamples":62},"times":{"cycle":0.07788849728671064,"elapsed":6.066,"period":0.000016250468868497943,"timeStamp":1714490198185}},"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36":{"aborted":false,"count":5631,"cycles":3,"hz":42643.707176343305,"stats":{"moe":2.2939139350212393e-7,"rme":0.9782099413277913,"sem":1.1703642525618568e-7,"deviation":7.584827243539321e-7,"mean":0.000023450118815062878,"variance":5.75296043143363e-13,"numSamples":42},"times":{"cycle":0.13204761904761908,"elapsed":5.984,"period":0.000023450118815062878,"timeStamp":1714490511410}}}},{"name":"respectsBounds2","code":"const v = respectsBounds2(ta2);","results":{"aborted":false,"count":6100,"cycles":3,"hz":55162.01959306704,"stats":{"moe":8.70711450311467e-8,"rme":0.48030202081988954,"sem":4.442405358731974e-8,"deviation":3.0777887156560096e-7,"mean":0.000018128415300546458,"variance":9.472783378219467e-14,"numSamples":48},"times":{"cycle":0.1105833333333334,"elapsed":5.759,"period":0.000018128415300546458,"timeStamp":1714490517400}},"platforms":{"Mozilla/5.0 (X11; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0":{"aborted":false,"count":4848,"cycles":5,"hz":58689.408050110665,"stats":{"moe":4.2616735553624163e-7,"rme":2.5011509826703073,"sem":2.174323242531845e-7,"deviation":0.000001712063833234264,"mean":0.00001703884965318055,"variance":2.9311625690688017e-12,"numSamples":62},"times":{"cycle":0.0826043431186193,"elapsed":6.38,"period":0.00001703884965318055,"timeStamp":1714490204257}},"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36":{"aborted":false,"count":6100,"cycles":3,"hz":55162.01959306704,"stats":{"moe":8.70711450311467e-8,"rme":0.48030202081988954,"sem":4.442405358731974e-8,"deviation":3.0777887156560096e-7,"mean":0.000018128415300546458,"variance":9.472783378219467e-14,"numSamples":48},"times":{"cycle":0.1105833333333334,"elapsed":5.759,"period":0.000018128415300546458,"timeStamp":1714490517400}}}},{"name":"outOfBounds","code":"const v = outOfBounds(ta3);","results":{"aborted":false,"count":1566,"cycles":4,"hz":19577.839130657136,"stats":{"moe":6.788203270326177e-7,"rme":1.3289835161264656,"sem":3.463369015472539e-7,"deviation":0.0000027706952123780312,"mean":0.00005107816002196534,"variance":7.676751959894543e-12,"numSamples":64},"times":{"cycle":0.07998839859439771,"elapsed":5.996,"period":0.00005107816002196534,"timeStamp":1714490523164}},"platforms":{"Mozilla/5.0 (X11; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0":{"aborted":false,"count":1187,"cycles":3,"hz":15439.645924699456,"stats":{"moe":4.752351651194326e-7,"rme":0.7337462680410121,"sem":2.4246692097930235e-7,"deviation":0.0000019548308123714725,"mean":0.00006476832466735896,"variance":3.8213635049969114e-12,"numSamples":65},"times":{"cycle":0.07688000138015508,"elapsed":6.056,"period":0.00006476832466735896,"timeStamp":1714490210642}},"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36":{"aborted":false,"count":1566,"cycles":4,"hz":19577.839130657136,"stats":{"moe":6.788203270326177e-7,"rme":1.3289835161264656,"sem":3.463369015472539e-7,"deviation":0.0000027706952123780312,"mean":0.00005107816002196534,"variance":7.676751959894543e-12,"numSamples":64},"times":{"cycle":0.07998839859439771,"elapsed":5.996,"period":0.00005107816002196534,"timeStamp":1714490523164}}}}]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment