Just wondering if I'm crazy/doing something incredibly stupid. 

I wrote this sort function using v8 (wrapper around qsort):

void Sort(const FunctionCallbackInfo<Value>& args) {
   Isolate* isolate = Isolate::GetCurrent();
   HandleScope scope(isolate);

   if (args.Length() < 1 || !args[0]->IsArray()) {
      isolate->ThrowException(
            Exception::TypeError(
                  String::NewFromUtf8(isolate,
                        "First argument should be an array")));
      return;
   }

   Handle<Array> arr = Handle<Array>::Cast(args[0]);
   int size = arr->Length();
   double other_arr[size];
   for (int i = 0; i < size; i++){
      other_arr[i] = arr->Get(i)->NumberValue();
   }


   qsort(other_arr, size, sizeof(other_arr[0]), compare);
   Handle<Array> res = Array::New(isolate, size);
   for (int i = 0; i < size; ++i) {
//      printf ("I val: %f\n",other_arr[i]);
      res->Set(i, Number::New(isolate, other_arr[i]));
   }

   args.GetReturnValue().Set(res);

}



when i run it in js from node, its markedly slower than the equivalent js sort 
(which I understand v8 [].sort() uses qsort under the hood) for objects between 
1000 - 10000+


var sort = require('bindings')('sort.node');


function benchmarkSort(size){

 var arr = helpers.generateArray(size);
 var cres = benchmark(sort.sort, [arr], 10);

 
 var arr = helpers.generateArray(size);
 var jsres = benchmark(helpers.sort, [arr], 10);
 return {
  c: cres,
  js: jsres
 };
 
}


function benchmark(fn, args, times){
 var noTimes = (typeof times != 'undefined'? times: NO_TIMES);
 var start = Date.now();
 var result = run(fn, noTimes, args);
 var duration = Date.now() - start;
 return duration;
}


 ----- Cost for sorting 100 -------
JS time: 1 msec
C time: 1 msec
 ----- Cost for sorting 1000 -------
JS time: 4 msec
C time: 3 msec
 ----- Cost for sorting 10000 -------
JS time: 22 msec
C time: 37 msec
 ----- Cost for sorting 100000 -------
JS time: 278 msec
C time: 441 msec


These results seem incredibly strange. Am I doing something incredibly 
stupid/missing something? Can someone explain whats going on? Much 
appreciated!!!! 

-- 
-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to