[
https://issues.apache.org/jira/browse/MATH-628?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13069936#comment-13069936
]
Arne Plöse commented on MATH-628:
---------------------------------
No, I read the test results as followns
performanceSparseVectorOpenMap [ms]
OpenMap 0: 2,193495| 0,546502
OpenMap 1: 0,473553| 0,561220
OpenMap 2: 0,472653| 0,502726
OpenMap 3: 0,496373| 0,545859
OpenMap 4: 0,472649| 0,502994
OpenMap 5: 1,839328| 0,642802
OpenMap 6: 1,885942| 0,221290
OpenMap 7: 1,794967| 0,200146
OpenMap 8: 0,523872| 0,211437
OpenMap 9: 0,547421| 0,210671
OpenMap 10: 0,464470| 0,213004
OpenMap 11: 0,453697| 0,227102
OpenMap 12: 0,467708| 0,212261
OpenMap 13: 0,456612| 0,209729
OpenMap 14: 0,341679| 0,209290
OpenMap 15: 0,337983| 0,201675
OpenMap 16: 0,347159| 0,216204
OpenMap 17: 0,351441| 0,220569
OpenMap 18: 0,350658| 0,230405
OpenMap 19: 0,197148| 0,223062
OpenMap 20: 0,204231| 0,235119
OpenMap 21: 0,196417| 0,227486
OpenMap 22: 0,194752| 0,220574
OpenMap 23: 0,190178| 0,219967
OpenMap 24: 0,194665| 0,221576
OpenMap 25: 0,192412| 0,211655
OpenMap 26: 0,196861| 0,229008
OpenMap 27: 0,194389| 0,220088
OpenMap 28: 0,190136| 0,223112
OpenMap 29: 0,202440| 0,213385
OpenMap 30: 0,181508| 0,207300
OpenMap 31: 0,149114| 0,028321
OpenMap 32: 0,023019| 0,017210
OpenMap 33: 0,008716| 0,018064
OpenMap 34: 0,011649| 0,018109
OpenMap 35: 0,008456| 0,018238
OpenMap 36: 0,008413| 0,018072
OpenMap 37: 0,008591| 0,018053
OpenMap 38: 0,008789| 0,018068
OpenMap 39: 0,008560| 0,018012
OpenMap 40: 0,008580| 0,018091
OpenMap 41: 0,008687| 0,018018
OpenMap 42: 0,008683| 0,018019
OpenMap 43: 0,008512| 0,018158
OpenMap 44: 0,008542| 0,017957
OpenMap 45: 0,008455| 0,018108
OpenMap 46: 0,008524| 0,017895
OpenMap 47: 0,008639| 0,017938
OpenMap 48: 0,008518| 0,018147
OpenMap 49: 0,008516| 0,018192
OpenMap 50: 0,008521| 0,018250
OpenMap 51: 0,008598| 0,018003
OpenMap 52: 0,008901| 0,018056
OpenMap 53: 0,008656| 0,018094
OpenMap 54: 0,007719| 0,016857
OpenMap 55: 0,008490| 0,017892
OpenMap 56: 0,008716| 0,017868
OpenMap 57: 0,008927| 0,017806
OpenMap 58: 0,008368| 0,018084
OpenMap 59: 0,008585| 0,018113
OpenMap 60: 0,008676| 0,017787
OpenMap 61: 0,008688| 0,017845
OpenMap 62: 0,008853| 0,018119
OpenMap 63: 0,008308| 0,017961
OpenMap 64: 0,008451| 0,018148
OpenMap 65: 0,008537| 0,017905
OpenMap 66: 0,008787| 0,018121
OpenMap 67: 0,008412| 0,017983
OpenMap 68: 0,008615| 0,018132
OpenMap 69: 0,008770| 0,017918
OpenMap 70: 0,008551| 0,017938
OpenMap 71: 0,008653| 0,017993
OpenMap 72: 0,008806| 0,017984
OpenMap 73: 0,008737| 0,017939
OpenMap 74: 0,008460| 0,018116
OpenMap 75: 0,008575| 0,018017
OpenMap 76: 0,008489| 0,018077
OpenMap 77: 0,008540| 0,017966
OpenMap 78: 0,008562| 0,017979
OpenMap 79: 0,008710| 0,018037
OpenMap 80: 0,008374| 0,018112
OpenMap 81: 0,008734| 0,017927
OpenMap 82: 0,008277| 0,018002
OpenMap 83: 0,008814| 0,017976
OpenMap 84: 0,008848| 0,017868
OpenMap 85: 0,008465| 0,018097
OpenMap 86: 0,008359| 0,018092
OpenMap 87: 0,008425| 0,018087
OpenMap 88: 0,008855| 0,017925
OpenMap 89: 0,008591| 0,017956
OpenMap 90: 0,008410| 0,018052
OpenMap 91: 0,008617| 0,018220
OpenMap 92: 0,008591| 0,018299
OpenMap 93: 0,008401| 0,018163
OpenMap 94: 0,008709| 0,018123
OpenMap 95: 0,008659| 0,018015
OpenMap 96: 0,008620| 0,017959
OpenMap 97: 0,008716| 0,018079
OpenMap 98: 0,008704| 0,017987
OpenMap 99: 0,008560| 0,018004
performanceSparseVectorArray [ms]
Array 0: 2,023287 | 0,186070
Array 1: 0,917888 | 0,204991
Array 2: 0,892925 | 0,143712
Array 3: 0,858185 | 0,146076
Array 4: 0,684331 | 0,155737
Array 5: 1,633593 | 0,138014
Array 6: 0,927778 | 0,148148
Array 7: 0,339777 | 0,144761
Array 8: 0,339778 | 0,144736
Array 9: 0,351218 | 0,143813
Array 10: 0,298786 | 0,144916
Array 11: 0,283394 | 0,145615
Array 12: 0,287752 | 0,144766
Array 13: 0,284476 | 0,144178
Array 14: 0,291953 | 0,143550
Array 15: 0,285529 | 0,144774
Array 16: 0,186793 | 0,144802
Array 17: 0,147914 | 0,145032
Array 18: 0,147936 | 0,144418
Array 19: 0,147397 | 0,144305
Array 20: 0,152120 | 0,145130
Array 21: 0,149030 | 0,144778
Array 22: 0,149788 | 0,144240
Array 23: 0,148297 | 0,145124
Array 24: 0,148502 | 0,144080
Array 25: 0,149361 | 0,144171
Array 26: 0,149198 | 0,144395
Array 27: 0,149126 | 0,144326
Array 28: 0,148975 | 0,144261
Array 29: 0,148939 | 0,144159
Array 30: 0,149005 | 0,144271
Array 31: 0,148844 | 0,144786
Array 32: 0,149205 | 0,144876
Array 33: 0,148771 | 0,144281
Array 34: 0,149221 | 0,144267
Array 35: 0,148602 | 0,144336
Array 36: 0,148915 | 0,144937
Array 37: 0,169016 | 0,145081
Array 38: 0,148983 | 0,144216
Array 39: 0,147412 | 0,144056
Array 40: 0,149133 | 0,144219
Array 41: 0,149274 | 0,144240
Array 42: 0,152563 | 0,022058
Array 43: 0,026914 | 0,002256
Array 44: 0,012159 | 0,002192
Array 45: 0,012191 | 0,002256
Array 46: 0,012321 | 0,002258
Array 47: 0,012073 | 0,002192
Array 48: 0,012214 | 0,002187
Array 49: 0,012196 | 0,002189
Array 50: 0,012625 | 0,002208
Array 51: 0,012086 | 0,002273
Array 52: 0,012184 | 0,002211
Array 53: 0,012132 | 0,002192
Array 54: 0,012281 | 0,002313
Array 55: 0,012174 | 0,002281
Array 56: 0,012225 | 0,002188
Array 57: 0,012233 | 0,002189
Array 58: 0,012423 | 0,002187
Array 59: 0,011971 | 0,002205
Array 60: 0,012101 | 0,002307
Array 61: 0,012121 | 0,002321
Array 62: 0,012189 | 0,002181
Array 63: 0,012182 | 0,002258
Array 64: 0,012125 | 0,002204
Array 65: 0,012049 | 0,002209
Array 66: 0,012372 | 0,002186
Array 67: 0,011879 | 0,002214
Array 68: 0,012371 | 0,002230
Array 69: 0,012265 | 0,002226
Array 70: 0,012274 | 0,002269
Array 71: 0,012264 | 0,002311
Array 72: 0,012286 | 0,002185
Array 73: 0,012225 | 0,002206
Array 74: 0,012274 | 0,002288
Array 75: 0,012264 | 0,002256
Array 76: 0,012278 | 0,002301
Array 77: 0,012346 | 0,002284
Array 78: 0,012269 | 0,002227
Array 79: 0,012175 | 0,002295
Array 80: 0,015729 | 0,002221
Array 81: 0,012204 | 0,002211
Array 82: 0,012382 | 0,002192
Array 83: 0,012179 | 0,002297
Array 84: 0,012232 | 0,002211
Array 85: 0,012251 | 0,002220
Array 86: 0,012448 | 0,002204
Array 87: 0,012327 | 0,002283
Array 88: 0,012456 | 0,002253
Array 89: 0,012513 | 0,002230
Array 90: 0,012386 | 0,002269
Array 91: 0,012287 | 0,002308
Array 92: 0,012261 | 0,002289
Array 93: 0,012358 | 0,002247
Array 94: 0,012452 | 0,002302
Array 95: 0,012316 | 0,002305
Array 96: 0,012321 | 0,002226
Array 97: 0,012276 | 0,002209
Array 98: 0,012220 | 0,002220
Array 99: 0,012398 | 0,002215
The SparseRealvector is filled to 50%.
Conclusion:
If you have an OpenMapRealvector Iteration is the fastest you can get.
If you have an ArrayRealvector random access is the fastes.
Note at around 35 (20 - 40) - I think the JIT Compiler is kicking in ...
My fix takes honours this.
> use only SparseIterator, on RealVectors, that implement SpareRealVectors
> -------------------------------------------------------------------------
>
> Key: MATH-628
> URL: https://issues.apache.org/jira/browse/MATH-628
> Project: Commons Math
> Issue Type: Improvement
> Affects Versions: 3.0
> Reporter: Arne Plöse
> Priority: Minor
> Attachments: ArrayRealVector.diff
>
>
> the performance suffers badly if one tries to use SparseIterator when there
> is no sparse backing.
> Currently there is only a check for ArrayRealvector, all other is supposed to
> be a SparseRealvector.
> If one creates a new implementation of RealVector ... bang.
> here is a performance test case:
> {code}
> package org.apache.commons.math.linear;
> import java.util.Iterator;
> import org.junit.Test;
> /**
> *
> * @author aploese
> */
> public class PerformanceTest {
> final static int ITER = 100;
> final static int VECTOR_SIZE = 2048;
> final static double SPARSE_FILL_STATE = 0.8;
> @Test
> public void performanceSparseVectorOpenMap() {
> System.out.println("performanceSparseVectorOpenMap");
> RealVector v = new OpenMapRealVector(VECTOR_SIZE);
> for (int i = 0; i < v.getDimension() * SPARSE_FILL_STATE; i++) {
> v.setEntry(i, i);
> }
> for (int j = 0; j < ITER; j++) {
> long t1 = System.nanoTime();
> double a = 0;
> Iterator<RealVector.Entry> it = v.sparseIterator();
> RealVector.Entry e;
> while (it.hasNext() && (e = it.next()) != null) {
> a += e.getValue();
> }
> long t2 = System.nanoTime();
> for (int i = 0; i < v.getDimension(); i++) {
> a += v.getEntry(i);
> }
> long t3 = System.nanoTime();
> System.out.println(String.format("OpenMap: %d\t%s\t| %s", j,
> Long.toString(t2 - t1), Long.toString(t3 - t2)));
> }
> }
> @Test
> public void performanceSparseVectorArray() {
> System.out.println("performanceSparseVectorArray");
> RealVector v = new ArrayRealVector(VECTOR_SIZE);
> for (int i = 0; i < v.getDimension() * SPARSE_FILL_STATE; i++) {
> v.setEntry(i, i);
> }
> for (int j = 0; j < ITER; j++) {
> long t1 = System.nanoTime();
> double a = 0;
> Iterator<RealVector.Entry> it = v.sparseIterator();
> RealVector.Entry e;
> while (it.hasNext() && (e = it.next()) != null) {
> a += e.getValue();
> }
> long t2 = System.nanoTime();
> for (int i = 0; i < v.getDimension(); i++) {
> a += v.getEntry(i);
> }
> long t3 = System.nanoTime();
> System.out.println(String.format("Array: %d\t%s\t| %s", j,
> Long.toString(t2 - t1), Long.toString(t3 - t2)));
> }
> }
> {code}
> Patch will follow.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira