使用 Javascript ArrayBuffer 执行 XOR 的最快方法
Fastest way to perform XOR using Javascript ArrayBuffer
我有一个 class 表示位,它使用 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');
所有方法似乎都给出相似的结果。
我有一个 class 表示位,它使用 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');
所有方法似乎都给出相似的结果。