Thread overview | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
December 01, 2020 Dude about ~ array concatenation performance | ||||
---|---|---|---|---|
| ||||
Yesterday I really shocked when, comparing one algorithm written in javascript and the equivalent in D, javascript performed better!!! The idea is to translate the "3 lines sort" in haskell to Javascript and D (with the limitations of each language). This is not a quick sort test, but a "expressiveness" example of functional orientation: you "declare" that the sorted version of an array is, given one of it's elements, the sorted version of the smaller ones, plus the item, plus the sorted version of the greater ones. In javascript const sorted = ([pivot, ...others]) => pivot === void 0 ? [] : [ ...sorted(others.filter(v => v < pivot)), pivot, ...sorted(others.filter(v => v >= pivot)) ]; In D T[] sorted(T)(T[] values) { return values.length == 0 ? [] : sorted(values[1 .. $].filter!(v => v < values[0]).array()) ~ items[0 .. 1] ~ sorted(values[1 .. $].filter!(v => v >= values[0]).array()); } With 1 million Double numbers (generated randomly): Javascript (node 12): 1507 ms DMD: 2166 ms With 6 million Double numbers Javascript (node 12): 10776 ms DMD: 15243 ms You can find more detains in https://github.com/ddcovery/expressive_sort I will really appreciate some improvements... the only "rule" is that "sorted" must be written, preferably, as a single expression ("declarative" way, avoiding imperative instructions) and, of course, you can't use the native library "sort" methods :-) ). |
December 01, 2020 Re: Doubts about the performance of array concatenation | ||||
---|---|---|---|---|
| ||||
Posted in reply to ddcovery | On Tuesday, 1 December 2020 at 22:49:55 UTC, ddcovery wrote:
> Yesterday I really shocked when, comparing one algorithm written in javascript and the equivalent in D, javascript performed better!!!
>
> [...]
Sorry about title (may be "doubt" :-/ )
|
December 01, 2020 Re: Dude about ~ array concatenation performance | ||||
---|---|---|---|---|
| ||||
Posted in reply to ddcovery | On Tuesday, 1 December 2020 at 22:49:55 UTC, ddcovery wrote:
> Yesterday I really shocked when, comparing one algorithm written in javascript and the equivalent in D, javascript performed better!!!
>
> [...]
Use ldc, rdmd can invoke it for you. DMD's optimizer is not even close to as advanced as a modern JavaScript engine's - that's why we use it for fast build times instead of performance.
|
December 02, 2020 Re: Doubts about the performance of array concatenation | ||||
---|---|---|---|---|
| ||||
Posted in reply to Max Haughton | On Tuesday, 1 December 2020 at 23:43:31 UTC, Max Haughton wrote:
> On Tuesday, 1 December 2020 at 22:49:55 UTC, ddcovery wrote:
>> Yesterday I really shocked when, comparing one algorithm written in javascript and the equivalent in D, javascript performed better!!!
>>
>> [...]
>
> Use ldc, rdmd can invoke it for you. DMD's optimizer is not even close to as advanced as a modern JavaScript engine's - that's why we use it for fast build times instead of performance.
Impressive performance increase:
$ ldc2 -O -release --run sorted.d
# D
1.0M: 810 ms
1.5M: 1324 ms
3.0M: 2783 ms
6.0M: 5727 ms
Thanks Max
|
December 02, 2020 Re: Doubts about the performance of array concatenation | ||||
---|---|---|---|---|
| ||||
Posted in reply to ddcovery | On Wednesday, 2 December 2020 at 00:08:55 UTC, ddcovery wrote:
> On Tuesday, 1 December 2020 at 23:43:31 UTC, Max Haughton wrote:
>> On Tuesday, 1 December 2020 at 22:49:55 UTC, ddcovery wrote:
>>> Yesterday I really shocked when, comparing one algorithm written in javascript and the equivalent in D, javascript performed better!!!
>>>
>>> [...]
>>
>> Use ldc, rdmd can invoke it for you. DMD's optimizer is not even close to as advanced as a modern JavaScript engine's - that's why we use it for fast build times instead of performance.
>
> Impressive performance increase:
>
> $ ldc2 -O -release --run sorted.d
> # D
> 1.0M: 810 ms
> 1.5M: 1324 ms
> 3.0M: 2783 ms
> 6.0M: 5727 ms
>
> Thanks Max
I've written a github issue on your repository with flags to get the most out of LLVM.
|
December 01, 2020 Re: Dude about ~ array concatenation performance | ||||
---|---|---|---|---|
| ||||
Posted in reply to ddcovery | On Tue, Dec 01, 2020 at 10:49:55PM +0000, ddcovery via Digitalmars-d-learn wrote: > Yesterday I really shocked when, comparing one algorithm written in javascript and the equivalent in D, javascript performed better!!! [...] > With 1 million Double numbers (generated randomly): > Javascript (node 12): 1507 ms > DMD: 2166 ms > > With 6 million Double numbers > Javascript (node 12): 10776 ms > DMD: 15243 ms Yeah, when it comes to performance-related things, don't bother with DMD. Its optimizer is known to have limitations, and IME consistently produces code that underperforms LDC-generated code by about 20-30%, sometimes even as high as 40%. For performance comparisons, always use GDC/LDC. T -- If you're not part of the solution, you're part of the precipitate. |
December 02, 2020 Re: Dude about ~ array concatenation performance | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | On Wednesday, 2 December 2020 at 06:31:49 UTC, H. S. Teoh wrote:
> On Tue, Dec 01, 2020 at 10:49:55PM +0000, ddcovery via Digitalmars-d-learn wrote:
>> Yesterday I really shocked when, comparing one algorithm written in javascript and the equivalent in D, javascript performed better!!!
> [...]
>> With 1 million Double numbers (generated randomly):
>> Javascript (node 12): 1507 ms
>> DMD: 2166 ms
>>
>> With 6 million Double numbers
>> Javascript (node 12): 10776 ms
>> DMD: 15243 ms
>
> Yeah, when it comes to performance-related things, don't bother with DMD. Its optimizer is known to have limitations, and IME consistently produces code that underperforms LDC-generated code by about 20-30%, sometimes even as high as 40%.
>
> For performance comparisons, always use GDC/LDC.
>
>
> T
After applying adecuate parametrization (thanks to Max Haughton for the tips), LDC generated code is running almost 3 times faster than DMD one!!!
|
Copyright © 1999-2021 by the D Language Foundation