簡體   English   中英

使用Javascript ArrayBuffer執行XOR的最快方法

[英]Fastest way to perform XOR using Javascript ArrayBuffer

我有一個表示位的類,它使用ArrayBuffers存儲二進制數據。 我試圖找出是否有一個更快的方法來執行兩個ArrayBuffers之間的xor

注意 ArrayBuffers的長度通常小於10個字節。 但是,由於執行了xor操作數百萬次(即使不是數十億次),因此每毫秒節省的時間很重要。

// my current/simple method
// assume 'buf1', 'buf2' & 'result' are ArrayBuffers
for (var i=0; i<result.length; i++) {
  result[i] = buf1[i] ^ buf2[i];
}

注意在本地和瀏覽器上尋求解決方案可執行文件。

我知道4種計算XOR

  • 本機^運算子
  • (n1+n2)%2
  • n1+n2-2*n1*n2
  • 使用預設數組: xor=[[0,1],[1,0]]

我運行了以下代碼,您可以自己查看結果:

 buf1=new Array(10000).fill(1).map((x)=>Math.floor(Math.random()*2)); buf2=new Array(10000).fill(1).map((x)=>Math.floor(Math.random()*2)); console.time('go'); for (let i=0;i<10000;i++) r=buf1[i]^buf2[i]; console.timeEnd('go'); console.time('go'); for (let i=0;i<10000;i++) r=(buf1[i]+buf2[i])%2; console.timeEnd('go'); console.time('go'); for (let i=0;i<10000;i++) r=buf1[i]+buf2[i]-2*buf1[i]*buf2[i]; console.timeEnd('go'); xor=[[0,1],[1,0]]; console.time('go'); for (let i=0;i<10000;i++) r=xor[buf1[i]][buf2[i]]; console.timeEnd('go'); 

所有方法似乎都給出相似的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM