[Vm-dev] VM Maker: Cog-eem.169.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Jul 20 19:08:02 UTC 2014
Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.169.mcz
==================== Summary ====================
Name: Cog-eem.169
Author: eem
Time: 20 July 2014, 9:07:22.665 am
UUID: d81bd745-87e0-4649-bbc1-af7961f820fa
Ancestors: Cog-eem.168
Implement patchAndUploadNewer to provide an incremental
uploading of updated Spur packages.
Refactor ShootoutTests to allow reporting to stdout with
the comparison to the reference times.
=============== Diff against Cog-eem.168 ===============
Item was changed:
----- Method: ShootoutTests class>>runAllToDummyStreamVs: (in category 'benchmark scripts') -----
runAllToDummyStreamVs: referenceTimes
"Transcript clear.
self runAllToDummyStreamVs: self referenceTimesForClosureInterpreter"
"Transcript clear.
self runAllToDummyStreamVs: self referenceTimesForSqueakVM"
+ ^self runAllToDummyStreamVs: referenceTimes reportTo: Transcript!
- | times ratios geometricMean |
- times := Array new writeStream.
- ratios := Array new writeStream.
- (self standardSuiteTo: DummyStream basicNew) do:
- [:block | | benchmark reference t |
- benchmark := (self selectorForSimpleBlock: block) copyUpTo: $:.
- reference := referenceTimes at: benchmark asSymbol.
- Smalltalk garbageCollect.
- times nextPut: (t := Time millisecondsToRun: block).
- ratios nextPut: t asFloat / reference.
- self report: block decompile printString time: t reference: reference on: Transcript].
- geometricMean := (ratios contents inject: 1 into: [:m :n| m * n]) raisedTo: 1 / ratios position.
- Transcript
- nextPutAll: 'geometric mean '; print: (geometricMean roundTo: 0.001);
- nextPutAll: ' average speedup '; print: ((geometricMean - 1 * 100) roundTo: 0.01); nextPut: $%; cr; cr; flush.
- ^times contents!
Item was added:
+ ----- Method: ShootoutTests class>>runAllToDummyStreamVs:reportTo: (in category 'benchmark scripts') -----
+ runAllToDummyStreamVs: referenceTimes reportTo: aStream
+ "Transcript clear.
+ self runAllToDummyStreamVs: self referenceTimesForClosureInterpreter"
+ "Transcript clear.
+ self runAllToDummyStreamVs: self referenceTimesForSqueakVM"
+ | times ratios geometricMean |
+ times := Array new writeStream.
+ ratios := Array new writeStream.
+ (self standardSuiteTo: DummyStream basicNew) do:
+ [:block | | benchmark reference t |
+ benchmark := (self selectorForSimpleBlock: block) copyUpTo: $:.
+ reference := referenceTimes at: benchmark asSymbol.
+ Smalltalk garbageCollect.
+ times nextPut: (t := Time millisecondsToRun: block).
+ ratios nextPut: t asFloat / reference.
+ self report: block decompile printString time: t reference: reference on: aStream].
+ geometricMean := (ratios contents inject: 1 into: [:m :n| m * n]) raisedTo: 1 / ratios position.
+ aStream
+ nextPutAll: 'geometric mean '; print: (geometricMean roundTo: 0.001);
+ nextPutAll: ' average speedup '; print: ((geometricMean - 1 * 100) roundTo: 0.01); nextPut: $%; cr; cr; flush.
+ ^times contents!
Item was changed:
----- Method: ShootoutTests class>>stdout (in category 'platform') -----
stdout
+ ^StandardFileStream stdout!
- ^StandardFileStream stdOut!
Item was changed:
Object subclass: #SpurBootstrapMonticelloPackagePatcher
+ instanceVariableNames: 'sourceDir destDir packagesAndPatches'
- instanceVariableNames: 'sourceDir destDir'
classVariableNames: ''
poolDictionaries: ''
category: 'Cog-Bootstrapping'!
!SpurBootstrapMonticelloPackagePatcher commentStamp: 'eem 1/15/2014 17:59' prior: 0!
A SpurBootstrapMonticelloPackagePatcher is used to construct a new set of patched Monticello packages for Spur. The use case is some bootstrap process loads a set of Monticello packages. To repeat the bootstrap with a Spur image the bootstrap must use suitably patched Monticello packages containing the new method versions on the class side of SpurBootstrap.
Instance Variables
destDir: <FileDirectory>
sourceDir: <FileDirectory>
destDir
- directory to which patched packages are to be written
sourceDir
- directory from which packages to be patched are to be read!
Item was changed:
----- Method: SpurBootstrapMonticelloPackagePatcher>>packagesAndPatches (in category 'private-accessing') -----
packagesAndPatches
"SpurBootstrapMonticelloPackagePatcher new packagesAndPatches"
+ packagesAndPatches ifNotNil:
+ [^packagesAndPatches].
- | packagesAndPatches |
packagesAndPatches := Dictionary new.
SpurBootstrap new prototypeClassNameMetaSelectorMethodDo:
[:className :isMeta :selector :method| | class methodReference source |
class := Smalltalk classNamed: className.
isMeta ifTrue:
[class := class class].
methodReference := (class includesSelector: selector) ifTrue:
[(class >> selector) methodReference].
source := method getSourceFromFile asString allButFirst: method selector size - selector size.
source first ~= selector first ifTrue:
[source replaceFrom: 1 to: selector size with: selector startingAt: 1].
(packagesAndPatches
at: (methodReference
ifNotNil: [PackageOrganizer default packageOfMethod: methodReference]
ifNil: [PackageOrganizer default packageOfClass: class])
ifAbsentPut: [OrderedCollection new])
add: (MCAddition of: (MCMethodDefinition
className: className
classIsMeta: isMeta
selector: selector
category: (methodReference
ifNotNil: [methodReference category]
ifNil: [Categorizer default])
timeStamp: method timeStamp
source: source))].
^packagesAndPatches!
Item was added:
+ ----- Method: SpurBootstrapMonticelloPackagePatcher>>patchAndUploadNewer (in category 'patching') -----
+ patchAndUploadNewer
+ "Look for unbranched versions on the default repository that are newer than the
+ image''s versions. Download and patch them and upload the patched versions."
+ "(SpurBootstrapMonticelloPackagePatcher new
+ from: 'spurpackages'
+ to: 'trunkpackages')
+ patchAndUploadNewer"
+ | repo sourceRepo |
+ sourceDir deleteLocalFiles.
+ destDir deleteLocalFiles.
+ repo := self repositoryForUrl: MCMcmUpdater defaultUpdateURL.
+ sourceRepo := MCDirectoryRepository directory: sourceDir.
+ repo cacheAllFileNamesDuring:
+ [self packagesAndPatches keys do:
+ [:package| | workingCopy |
+ workingCopy := MCWorkingCopy allManagers detect: [:pkg| pkg packageName = package packageName].
+ (workingCopy possiblyNewerVersionsIn: repo) do:
+ [:newerVersion |
+ (sourceRepo includesVersionNamed: newerVersion) ifFalse:
+ [sourceRepo storeVersion: (repo versionNamed: newerVersion)]]].
+ self patchAsNeeded.
+ self uploadFrom: (MCDirectoryRepository directory: destDir) to: self trunk]!
Item was added:
+ ----- Method: SpurBootstrapMonticelloPackagePatcher>>repositoryForUrl: (in category 'repository population') -----
+ repositoryForUrl: url
+ ^MCRepositoryGroup default repositories
+ detect: [:r| r description = url]
+ ifNone: [MCHttpRepository
+ location: url
+ user: 'squeak'
+ password: 'squeak']!
Item was changed:
----- Method: SpurBootstrapMonticelloPackagePatcher>>trunk (in category 'repository population') -----
trunk
+ ^self repositoryForUrl: 'http://source.squeak.org/trunk'!
- | url |
- url := 'http://source.squeak.org/trunk'.
- ^MCRepositoryGroup default repositories
- detect: [:r| r description = url]
- ifNone: [MCHttpRepository
- location: url
- user: 'squeak'
- password: 'squeak']!
More information about the Vm-dev
mailing list