I'm quite surprised that your ES5 code would be that much slower. Something must be going wrong somewhere. The performance should be fairly similar.
On Thu, Jun 22, 2017 at 6:33 AM Benedikt Meurer <[email protected]> wrote: > Nice, thanks for sharing the results! > > -- Benedikt > > Wink Saville <[email protected]> schrieb am Do., 22. Juni 2017, 02:55: > >> I've now tested v8 6.1 using the Node V9 canary build, see the details >> here <https://github.com/winksaville/test-nn-ts/tree/nodev9>. The >> summary is that Nodev9 for both ES5 and ES6 run approximately the same >> speed at 820,000 eps which is about *1.7x faster* than Nodev8 using ES5! >> >> Kudo's to the V8 team!! >> >> >> On Monday, June 12, 2017 at 9:36:01 PM UTC-7, Benedikt Meurer wrote: >> >>> With V8 5.8, that sounds possible. In 5.8 modern JavaScript (i.e. ES2015 >>> and later) is sent to the new compiler pipeline (based on Ignition and >>> TurboFan), whereas classic JavaScript is sent to the old compiler pipeline >>> (based on FullCodegen and Crankshaft). JavaScript code is strictly divided >>> by this and so you have a two-world view problem. In your case you >>> probably benefit from having the JIT inline the class constructor for you >>> into call sites, but with ES6 classes and V8 5.8, that's only possible if >>> the call site also lives in the Ignition+TurboFan world, which is probably >>> not the case and hence you see a significant slowdown already. All of these >>> problems disappear with V8 5.9/6.0, which is what Node 8 will upgrade to >>> eventually. >>> >>> HTH, >>> Benedikt >>> >>> On Tue, Jun 13, 2017 at 12:18 AM Wink Saville <[email protected]> wrote: >>> >> I've created a simple NeuralNet program >>>> <https://github.com/winksaville/test-nn-ts> in TypeScript v2.3.4 >>>> running on node v8.1.0 and v8 v5.8.283.41: >>>> >>>> $ npm version >>>>> { 'test-nn-ts': '0.1.0', >>>>> npm: '4.6.1', >>>>> ares: '1.12.0', >>>>> cldr: '31.0.1', >>>>> http_parser: '2.7.1', >>>>> icu: '59.1', >>>>> modules: '57', >>>>> node: '8.1.0', >>>>> openssl: '1.0.2l', >>>>> tz: '2017b', >>>>> unicode: '9.0', >>>>> uv: '1.12.0', >>>>> v8: '5.8.283.41', >>>>> zlib: '1.2.11' } >>>> >>>> >>>> When I target es6 the program runs 6x slower than if target es5. >>>> >>>> Here is the output when targeting es5: >>>> >>>> $ yarn runit 1000000 >>>>> yarn runit v0.24.6 >>>>> $ yarn build && yarn doit 1000000 >>>>> yarn build v0.24.6 >>>>> $ tsc -p src/tsconfig.json >>>>> Done in 2.02s. >>>>> yarn doit v0.24.6 >>>>> $ node build/test-nn.js 1000000 >>>>> Epoch=1,000,000 Error=4.63e-7 time=2.06s eps=484,784 >>>>> Pat Input0 Input1 Target0 Output0 >>>>> 0 0 0 0 0.000448827454864753 >>>>> 1 1 0 1 0.9995444354288804 >>>>> 2 0 1 1 0.9995445564977191 >>>>> 3 1 1 0 0.0005558910332638871 >>>>> Done in 2.24s. >>>>> Done in 4.63s. >>>> >>>> >>>> And here is the output targeting es6: >>>> >>>> $ yarn runit 1000000 >>>>> yarn runit v0.24.6 >>>>> $ yarn build && yarn doit 1000000 >>>>> yarn build v0.24.6 >>>>> $ tsc -p src/tsconfig.json >>>>> Done in 1.99s. >>>>> yarn doit v0.24.6 >>>>> $ node build/test-nn.js 1000000 >>>>> Epoch=1,000,000 Error=4.63e-7 time=13.29s eps=75,239 >>>>> Pat Input0 Input1 Target0 Output0 >>>>> 0 0 0 0 0.000448827454864753 >>>>> 1 1 0 1 0.9995444354288804 >>>>> 2 0 1 1 0.9995445564977191 >>>>> 3 1 1 0 0.0005558910332638871 >>>>> Done in 13.47s. >>>>> Done in 15.84s. >>>> >>>> >>>> Here is a snippet of the beginning of the NeuralNet.js targeting es5: >>>> >>>> var Neuron_1 = require("./Neuron"); >>>>> var DBG = false; >>>>> var Debug_1 = require("./Debug"); >>>>> var NeuralNet = (function () { >>>>> function NeuralNet(num_in_neurons, num_hidden_layers, >>>>> num_out_neurons) { >>>>> if (DBG) >>>>> Debug_1.default("ctor:+ in_neurons=" + num_in_neurons + " >>>>> hidden_layers=" + num_hidden_layers + " out_neurons=" + num_out_neurons); >>>>> this.max_layers = 2; // We always have an input and output >>>>> layer >>>>> this.max_layers += num_hidden_layers; // Add num_hidden layers >>>>> this.out_layer = this.max_layers - 1; // last one is out_layer >>>>> this.last_hidden = 0; // No hidden layers yet >>>>> this.points = 0; // No points yet >>>>> this.error = 0; // No errors yet >>>>> this.learning_rate = 0.5; // Learning rate aka eta >>>>> this.momentum_factor = 0.9; // momemtum factor aka alpha >>>>> this.layers = new Array(this.max_layers); >>>>> // Create the input and output layers >>>>> this.create_layer(0, num_in_neurons); >>>>> this.create_layer(this.out_layer, num_out_neurons); >>>>> if (DBG) >>>>> Debug_1.default("ctor:-"); >>>>> } >>>>> NeuralNet.prototype.create_layer = function (layer_index, >>>>> num_neurons) { >>>>> if (DBG) >>>>> Debug_1.default("create_layer:+ layer_index=" + >>>>> layer_index + " num_neurons=" + num_neurons); >>>>> this.layers[layer_index] = new Array(num_neurons); >>>>> if (DBG) >>>>> Debug_1.default("create_layer:- layer_index=" + >>>>> layer_index + " num_neurons=" + num_neurons); >>>>> }; >>>> >>>> >>>> >>>> And here is a snippet targeting es6: >>>> >>>> const Neuron_1 = require("./Neuron"); >>>>> const DBG = false; >>>>> const Debug_1 = require("./Debug"); >>>>> class NeuralNet { >>>>> constructor(num_in_neurons, num_hidden_layers, num_out_neurons) { >>>>> if (DBG) >>>>> Debug_1.default(`ctor:+ in_neurons=${num_in_neurons} >>>>> hidden_layers=${num_hidden_layers} out_neurons=${num_out_neurons}`); >>>>> this.max_layers = 2; // We always have an input and output >>>>> layer >>>>> this.max_layers += num_hidden_layers; // Add num_hidden layers >>>>> this.out_layer = this.max_layers - 1; // last one is out_layer >>>>> this.last_hidden = 0; // No hidden layers yet >>>>> this.points = 0; // No points yet >>>>> this.error = 0; // No errors yet >>>>> this.learning_rate = 0.5; // Learning rate aka eta >>>>> this.momentum_factor = 0.9; // momemtum factor aka alpha >>>>> this.layers = new Array(this.max_layers); >>>>> // Create the input and output layers >>>>> this.create_layer(0, num_in_neurons); >>>>> this.create_layer(this.out_layer, num_out_neurons); >>>>> if (DBG) >>>>> Debug_1.default("ctor:-"); >>>>> } >>>>> create_layer(layer_index, num_neurons) { >>>>> if (DBG) >>>>> Debug_1.default(`create_layer:+ layer_index=${layer_index} >>>>> num_neurons=${num_neurons}`); >>>>> this.layers[layer_index] = new Array(num_neurons); >>>>> if (DBG) >>>>> Debug_1.default(`create_layer:- layer_index=${layer_index} >>>>> num_neurons=${num_neurons}`); >>>>> } >>>> >>>> >>>> Have I done something wrong or is this expected? >>>> >>>> -- Wink >>>> >>>> -- >>>> -- >>>> 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. >>>> >>> -- >> -- >> 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. >> > -- > -- > 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. > -- Toon Verwaest | Software Engineer, V8 | Google Germany GmbH | Erika-Mann Str. 33, 80636 München Registergericht und -nummer: Hamburg, HRB 86891 | Sitz der Gesellschaft: Hamburg | Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle -- -- 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.
