Hi Stephan,

On Wed, Jan 14, 2015 at 6:05 AM, Stephan Eggermont <[email protected]> wrote:

> I'm more worried about this part.
>
> [ 10000 timesRepeat: [ | c |
>                 c  := OrderedCollection new.
>                 c add: 1.
>                  2 to: 10000 do: [ :i |
>                         c add: i beforeIndex: (c atRandom) ] ] ] timeToRun
> "5 min. 30 s."
>
> Stephan
>

About 90% of the entire time is in the string copying primitive.  Not much
to be done there.  Sista could speed this up by eliminating the validation
overhead of the primitive.  But with our current VM technology there's not
a lot one can do given that OrderedCollection is organized as a flat
stack.  This is probably a case where an ordered tree would be faster,
albeit have a lot more space overhead.

/Users/eliot/Cog/oscogvm/build.macos32x86/squeak.cog.spur/Fast.app/Contents/MacOS/Squeak
 1/14/2015
eden size: 4,101,312  stack pages: 160  code size: 1,048,576

500
timesRepeat: [| c |
c := OrderedCollection new.
c add: 1.
2
to: 10000
do: [:i | c add: i beforeIndex: c atRandom]]

gc prior.  clear prior.
25.14 seconds; sampling frequency 1459 hz
36250 samples in the VM (36670 samples in the entire program)  98.85% of
total

2749 samples in generated vm code   7.58% of entire vm (  7.50% of total)
33501 samples in vanilla vm code 92.42% of entire vm (91.36% of total)

% of generated vm code (% of total) (samples) (cumulative)
10.51%    (  0.79%) Semaphore>>critical: (289) (10.51%)
  7.97%    (  0.60%) Collection>>atRandom (219) (18.48%)
  6.37%    (  0.48%) BoxedFloat64>>/ (175) (24.85%)
  5.82%    (  0.44%) ceSmallMethodContext (160) (30.67%)
  5.60%    (  0.42%) OrderedCollection>>insert:before: (154) (36.27%)
  5.17%    (  0.39%) BoxedFloat64>>* (142) (41.43%)
  3.78%    (  0.28%) BlockClosure>>ensure: (104) (45.22%)
  3.60%    (  0.27%) Random>>nextValue (99) (48.82%)
  3.35%    (  0.25%) BlockClosure>>value (92) (52.16%)
  3.20%    (  0.24%) Array>>replaceFrom:to:with:startingAt: (88) (55.37%)
  3.20%    (  0.24%) BoxedFloat64>>truncated (88) (58.57%)
  3.20%    (  0.24%) OrderedCollection>>add:beforeIndex: (88) (61.77%)
  2.87%    (  0.22%) BlockClosure>>valueNoContextSwitch (79) (64.64%)
  2.87%    (  0.22%) Random>>next (79) (67.52%)
  2.58%    (  0.19%) BoxedFloat64>>- (71) (70.10%)
  2.51%    (  0.19%) OrderedCollection>>size (69) (72.61%)
  2.22%    (  0.17%) Semaphore>>wait (61) (74.83%)
  2.11%    (  0.16%) SmallInteger>>- (58) (76.94%)
  2.11%    (  0.16%) UndefinedObject>>DoIt (58) (79.05%)
  2.07%    (  0.16%) OrderedCollection>>at: (57) (81.12%)
  2.07%    (  0.16%) Random>>nextInt: (57) (83.19%)
  1.93%    (  0.14%) SequenceableCollection>>atRandom: (53) (85.12%)
  1.93%    (  0.14%) SmallInteger>>+ (53) (87.05%)
  1.75%    (  0.13%) Magnitude>>between:and: (48) (88.80%)
  1.71%    (  0.13%) Semaphore>>signal (47) (90.51%)
  1.49%    (  0.11%) Number>>quo: (41) (92.00%)
  1.49%    (  0.11%) Object>>at:put: (41) (93.49%)
  1.31%    (  0.10%) Collection class>>mutexForPicking (36) (94.80%)
  1.20%    (  0.09%) Object>>at: (33) (96.00%)
  1.05%    (  0.08%) Collection class>>randomForPicking (29) (97.05%)
  0.87%    (  0.07%) Number>>strictlyPositive (24) (97.93%)
  0.76%    (  0.06%) BoxedFloat64>>> (21) (98.69%)
  0.62%    (  0.05%) SmallInteger>>> (17) (99.31%)
  0.51%    (  0.04%) SmallInteger>><= (14) (99.82%)
  0.18%    (  0.01%) ...others... (5) (100.0%)


% of vanilla vm code (% of total) (samples) (cumulative)
97.38%    (88.96%) primitiveStringReplace (32623) (97.38%)
  0.90%    (  0.82%) primitiveTruncated (302) (98.28%)
  0.61%    (  0.56%) scavengeReferentsOf (204) (98.89%)
  0.36%    (  0.33%) copyAndForward (122) (99.25%)
  0.20%    (  0.18%) primitiveWait (66) (99.45%)
  0.18%    (  0.16%) scavengeLoop (59) (99.63%)
  0.12%    (  0.11%) synchronousSignal (40) (99.75%)
  0.07%    (  0.06%) primitiveSignal (22) (99.81%)
  0.04%    (  0.04%) instantiateC...ndexableSize(15) (99.86%)
  0.04%    (  0.04%) processWeakSurvivor (14) (99.90%)
  0.03%    (  0.03%) mapStackPages (10) (99.93%)
  0.01%    (  0.01%) scavengingGCTenuringIf(5) (99.94%)
  0.06%    (  0.05%) ...others... (19) (100.0%)


-- 
best,
Eliot

Reply via email to