Issue1951
Created on 2012-07-27.06:09:25 by ndrzmansn, last changed 2012-08-03.20:03:03 by pjenvey.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | Remove |
| array_pystack.diff | ndrzmansn, 2012-07-27.06:09:25 | patch | ||
| benchmark_scripts.tgz | ndrzmansn, 2012-07-27.22:06:46 | benchmark scripts | ||
| Messages | |||
|---|---|---|---|
| msg7336 (view) | Author: Wei Zhang (ndrzmansn) | Date: 2012-07-27.06:09:25 | |
This patch is an array version of PyStack in PyBytecode bytecode interpreter. Although, by default jython runs compiler, bytecode interpreter is still used when unmarshal .pyc files. Changing PyStack from an ArrayList to array makes it more efficient. |
|||
| msg7337 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2012-07-27.17:43:56 | |
Hi Wei Zhang - it would be nice to see a little microbenchmarking code to show that this is indeed speeds things up (and so others can have a try in their particular environments) |
|||
| msg7339 (view) | Author: Wei Zhang (ndrzmansn) | Date: 2012-07-27.22:06:46 | |
I used the attached files to test on my machines.
in jython root dir:
tar xvf benchmark_scripts.tgz
cd patch
taskset -c 1,3,5,7 ./jython.py -u -r
-r: run all benchmarks specified in ./benchmarks/.run;
I chose a couple of ones from Language Shootout Game with various arguments;
-u: unmarshal; It uses ./benchmarks/unmarshal.py to unmarshal pregenerated .pyc files for
the same set of benchmarks included in ./benchmarks/.run
The machine I used:
Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz
Mem 64GB
Linux 3.2.0-25-generic Ubuntu
result:
------------------------------------------------------------------------------------------------
ArrayList (old) | Array (new)
------------------------------------------------------------------------------------------------
Unmarshalling ... binarytrees.py 9 Unmarshalling ... binarytrees.py 9
2.845 3.016
Unmarshalling ... binarytrees.py 10 Unmarshalling ... binarytrees.py 10
2.618 2.642
Unmarshalling ... binarytrees.py 11 Unmarshalling ... binarytrees.py 11
2.945 2.608
Unmarshalling ... binarytrees.py 12 Unmarshalling ... binarytrees.py 12
4.333 3.607
Unmarshalling ... binarytrees.py 14 Unmarshalling ... binarytrees.py 14
10.724 10.148
Unmarshalling ... fannkuchredux.py 8 Unmarshalling ... fannkuchredux.py 8
2.744 3.022
Unmarshalling ... fannkuchredux.py 9 Unmarshalling ... fannkuchredux.py 9
10.646 10.667
Unmarshalling ... fasta.py 2000 Unmarshalling ... fasta.py 2000
2.952 3.320
Unmarshalling ... fasta.py 3000 Unmarshalling ... fasta.py 3000
3.234 3.023
Unmarshalling ... fasta.py 4000 Unmarshalling ... fasta.py 4000
2.917 3.399
Unmarshalling ... fasta.py 5000 Unmarshalling ... fasta.py 5000
3.246 3.225
Unmarshalling ... fasta.py 6000 Unmarshalling ... fasta.py 6000
2.977 3.502
Unmarshalling ... mandelbrot.py 200 Unmarshalling ... mandelbrot.py 200
3.262 3.295
Unmarshalling ... mandelbrot.py 300 Unmarshalling ... mandelbrot.py 300
4.355 4.378
Unmarshalling ... mandelbrot.py 400 Unmarshalling ... mandelbrot.py 400
5.466 5.156
Unmarshalling ... mandelbrot.py 500 Unmarshalling ... mandelbrot.py 500
7.586 7.193
Unmarshalling ... mandelbrot.py 600 Unmarshalling ... mandelbrot.py 600
9.992 9.145
Unmarshalling ... meteor.py 400 Unmarshalling ... meteor.py 400
6.135 5.728
Unmarshalling ... meteor.py 500 Unmarshalling ... meteor.py 500
7.030 6.765
Unmarshalling ... meteor.py 600 Unmarshalling ... meteor.py 600
7.755 7.505
Unmarshalling ... meteor.py 700 Unmarshalling ... meteor.py 700
8.485 8.280
Unmarshalling ... meteor.py 800 Unmarshalling ... meteor.py 800
8.744 8.723
Unmarshalling ... nbody.py 40000 Unmarshalling ... nbody.py 40000
4.635 4.037
Unmarshalling ... nbody.py 50000 Unmarshalling ... nbody.py 50000
5.056 4.623
Unmarshalling ... nbody.py 60000 Unmarshalling ... nbody.py 60000
6.479 5.054
Unmarshalling ... nbody.py 70000 Unmarshalling ... nbody.py 70000
6.534 5.868
Unmarshalling ... nbody.py 80000 Unmarshalling ... nbody.py 80000
7.400 6.751
Unmarshalling ... spectralnorm.py 100 Unmarshalling ... spectralnorm.py 100
2.552 2.787
Unmarshalling ... spectralnorm.py 200 Unmarshalling ... spectralnorm.py 200
5.180 4.616
Unmarshalling ... spectralnorm.py 300 Unmarshalling ... spectralnorm.py 300
7.843 7.437
Unmarshalling ... spectralnorm.py 400 Unmarshalling ... spectralnorm.py 400
11.694 11.282
Unmarshalling ... spectralnorm.py 500 Unmarshalling ... spectralnorm.py 500
17.548 16.271
------------------------------------------------------------------------------------------------
It shows that if the supplied arguments are not very small, the array version is noticeably faster.
In PyBytecode, line 46, the comments actually mentions that the field co_stacksize is used to convert PyStack from ArrayList to Array.
Thanks.
|
|||
| msg7342 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2012-07-31.17:12:02 | |
Great - thanks for the update - I will try to have a look this week. |
|||
| msg7349 (view) | Author: Philip Jenvey (pjenvey) | Date: 2012-08-03.20:03:02 | |
applied on default, 7cebb8b5aea7. thanks nice to meet you & your colleague @ the jvm lang summit =] |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2012-08-03 20:03:03 | pjenvey | set | status: open -> closed resolution: fixed messages: + msg7349 |
| 2012-08-03 19:53:01 | pjenvey | set | assignee: fwierzbicki -> pjenvey nosy: + pjenvey title: PyStack using array -> Bytecode Interpreter stack optimization for larger arguments |
| 2012-07-31 17:12:03 | fwierzbicki | set | messages: + msg7342 |
| 2012-07-31 17:11:36 | fwierzbicki | set | priority: normal assignee: fwierzbicki |
| 2012-07-27 22:06:46 | ndrzmansn | set | files:
+ benchmark_scripts.tgz messages: + msg7339 |
| 2012-07-27 17:43:56 | fwierzbicki | set | nosy:
+ fwierzbicki messages: + msg7337 |
| 2012-07-27 06:09:26 | ndrzmansn | create | |
Supported by Python Software Foundation,
Powered by Roundup