vendredi 13 février 2015

Node.JS performance vs native C++ addon when populating an Int32Array


I've been experimenting with Node.JS and C++ addons and found that populating an Int32Array is considerably slower when using the C++ addon rather than directly doing so in Node.JS / JavaScript.



Node.JS: 133 ~ ms

C++: 1103 ~ ms



Does anyone know why this is? My test code consists of a fairly large array and for loops containing if statements.


I suspect I'm populating the array incorrectly in my C++ addon. (?)


JavaScript:



var testArray_ = new Int32Array(36594368);

var i = 0;
for (var xi = 0; xi < 332; xi++) {
for (var yi = 0; yi < 332; yi++) {
for (var zi = 0; zi < 332; zi++) {
if ((xi + yi + zi) % 62 == 0) testArray_[i] = 2;
else if (yi < 16) testArray_[i] = 2;
else if (yi == 16) testArray_[i] = 1;
else testArray_[i] = 0;

i++;
}
}
}


C++ Addon:



Local<Int32Array> testArray = Int32Array::New(ArrayBuffer::New(isolate, 4 * 36594368), 0, 36594368);

int i = 0;
for (int xi = 0; xi < 332; xi++) {
for (int yi = 0; yi < 332; yi++) {
for (int zi = 0; zi < 332; zi++) {
if ((xi + yi + zi) % 62 == 0) testArray->Set(i, Integer::New(isolate, 2));
else if (yi < 16) testArray->Set(i, Integer::New(isolate, 2));
else if (yi == 16) testArray->Set(i, Integer::New(isolate, 1));
else testArray->Set(i, Integer::New(isolate, 0));

i++;
}
}
}




Aucun commentaire:

Enregistrer un commentaire