Самый эффективный способ выполнения побитовых операций над парами элементов в двух массивах ArrayBuffers в Javascript

У меня есть два Javascript ArrayBuffers; каждый содержит 512 бит данных. Я хотел бы сделать сравнение xor двух массивов и сохранить результаты в третьем массиве.

В настоящее время я перебираю элементы в буферах. В приведенном ниже коде "расстояние" - целое число, а feat_a1 и feat_b1 - массивы ArrayBuffers длиной 512 бит.

for(var d1=0; d1<512; d1++){
  distance += feat_b1[d1] ^ feat_a1[d1];
}

Существует ли более эффективный способ парного сравнения этих двух массивов?

Ответ 1

как я понимаю, вы не можете напрямую использовать arrayBuffer [i], вы должны передать его в какой-нибудь контейнер (например, Int8Array). Я сделал следующий пример http://jsfiddle.net/mLurz/, попробовал с различными типизированными массивами из this список и Uint32Array показали лучшую производительность

var i;
var dist = 0;
var max = Math.pow(2,32);
var buf1 = new ArrayBuffer(1024);
var x = new Uint32Array(buf1);
for (i = 0; i < 256; ++i) {
    x[i] = Math.random()*max;
}

var buf2 = new ArrayBuffer(1024);
var y = new Uint32Array(buf2);
for (i = 0; i < 256; ++i) {
    y[i] = Math.random()*max
}

console.time('Uint32Array');
for (var j = 0; j < 1000000; ++j) {
    for (i = 0; i < 256; ++i) {
        dist += y[i]^x[i];
    }
}
console.timeEnd('Uint32Array');