On Mon, Jun 21, 2010 at 12:27 PM, stephane ducasse <[hidden email]> wrote:
These are "carefully crafted" to be backward-compatible. They will /not/ break an image for older VMs. There are three sets of changes:
1. remove primitives in LargePositiveInteger. These will make images slightly slower for certain benchmarks but won't break anything. 2. add special primitives for Float>>basicAt: at: basicAt:put: & at:put: that call super if they fail. They will fail on older VMs, hence these will make images slightly slower for certain benchmarks but won't break anything.
3. a new version of recreateSpecialObjectsArray that does not recreate the Character table. This will have no effect except for Cog, where it allows the VM to inline Character table access in the at: primitive.
|
thanks for educating me :) On Jun 21, 2010, at 9:34 PM, Eliot Miranda wrote: > > > On Mon, Jun 21, 2010 at 12:27 PM, stephane ducasse <[hidden email]> wrote: > > > There are a few other things also. Please file-in NecessaryImageChangesForCogToWork.1.cs from the image directory in the tarball or upgrade to the latest in trunk (i.e. Andreas added the changes from NecessaryImageChangesForCogToWork.1.cs to trunk over the weekend). > > eliot > do you know whether these changes can be integrated and the images will work on the different Cog and nonCog > > These are "carefully crafted" to be backward-compatible. They will /not/ break an image for older VMs. There are three sets of changes: > > 1. remove primitives in LargePositiveInteger. These will make images slightly slower for certain benchmarks but won't break anything. > 2. add special primitives for Float>>basicAt: at: basicAt:put: & at:put: that call super if they fail. They will fail on older VMs, hence these will make images slightly slower for certain benchmarks but won't break anything. > 3. a new version of recreateSpecialObjectsArray that does not recreate the Character table. This will have no effect except for Cog, where it allows the VM to inline Character table access in the at: primitive. > > > > Stef > > > > > > > Cheers, > > Henry > > > > On Jun 21, 2010, at 1:39 51PM, Göran Krampe wrote: > > > > > Howdy! > > > > > > First: Super fun and cool! I am of course *very* happy to see Cog released. > > > > > > Now, over to some "testing"... > > > > > > SIDENOTE: First btw I ran pystone.py with regular Python 2.6.5 on my Lucid Lynx, then in the latest "regular" VM from Squeakvm.org. Result: > > > > > > Python: 36k pystones > > > Squeak: 45k pystones > > > > > > So... the good ole VM is still a tad faster than CPython in that bench. :) > > > > > > Now, I wanted to try it out with Cogit. Trouble begins! :) > > > > > > I am using the tar ball on a Lucid laptop. > > > > > > 1. vm-sound-NAS does not compile! Lots of compile errors, probably due to a new upstream NAS. So try to get rid of that plugin... is harder than I thought! I finally ended up hacking the configure script to "fail" on the compile check by trying to compile rubbish. ;) > > > > > > 2. For some odd reason this will still create duplicate lines about NAS in disabledPlugins.c, just manually remove one of them, fine. Tada! Got a VM binary. > > > > > > 3. Fire it up on a *vanilla* Squeak4.1.1.image. BOOM, segfault. This is a "full debug VM" per instructions in HowToBuild. Anyway, see all info below, and tell me if there is more you want. :) > > > > > > Btw, is there some nice existing script to run to "collect data about the box" that does uname etc? > > > > > > regards, Göran > > > ------------------ > > > gokr@yoda:~/squeak$ cat /proc/cpuinfo > > > processor : 0 > > > vendor_id : GenuineIntel > > > cpu family : 6 > > > model : 14 > > > model name : Genuine Intel(R) CPU U2500 @ 1.20GHz > > > stepping : 8 > > > cpu MHz : 800.000 > > > cache size : 2048 KB > > > physical id : 0 > > > siblings : 2 > > > core id : 0 > > > cpu cores : 2 > > > apicid : 0 > > > initial apicid : 0 > > > fdiv_bug : no > > > hlt_bug : no > > > f00f_bug : no > > > coma_bug : no > > > fpu : yes > > > fpu_exception : yes > > > cpuid level : 10 > > > wp : yes > > > flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts aperfmperf pni monitor vmx est tm2 xtpr pdcm > > > bogomips : 2393.82 > > > clflush size : 64 > > > cache_alignment : 64 > > > address sizes : 32 bits physical, 32 bits virtual > > > power management: > > > > > > gokr@yoda:~/squeak$ gcc --version > > > gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 > > > Copyright (C) 2009 Free Software Foundation, Inc. > > > This is free software; see the source for copying conditions. There is NO > > > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > > > > > gokr@yoda:~/squeak$ uname -a > > > Linux yoda 2.6.32-22-generic-pae #36-Ubuntu SMP Thu Jun 3 23:14:23 UTC 2010 i686 GNU/Linux > > > > > > gokr@yoda:~/squeak$ squeak -version > > > 3.9-7 #1 Mon Jun 21 13:20:28 CEST 2010 gcc 4.4.3 > > > Croquet Closure Cog VM [CoInterpreter VMMaker-oscog.11] > > > Linux yoda 2.6.32-22-generic-pae #36-Ubuntu SMP Thu Jun 3 23:14:23 UTC 2010 i686 GNU/Linux > > > plugin path: /usr/local/lib/squeak/3.9-7/ [default: /usr/local/lib/squeak/3.9-7/] > > > > > > gokr@yoda:~/squeak$ squeak Squeak4.1.1.image > > > > > > ((rcvr & 1)) || (addressCouldBeObj(rcvr)) 11334 > > > > > > Segmentation fault > > > > > > > > > > > > Smalltalk stack dump: > > > 0xbfc87e08 M GradientFillStyle>scaledAlphaMix:of:with: 2018669100: a(n) GradientFillStyle > > > 0xbfc87e5c M [] in GradientFillStyle>computePixelRampOfSize: 2018669100: a(n) GradientFillStyle > > > 0xbfc87e7c M SortedCollection(OrderedCollection)>do: 2018669424: a(n) SortedCollection > > > 0xbfc87eb4 I GradientFillStyle>computePixelRampOfSize: 2018669100: a(n) GradientFillStyle > > > 0xbfc87ed8 I [] in GradientFillStyle class>initPixelRampCache 2007164144: a(n) GradientFillStyle class > > > 0xbfc87f10 I LRUCache>at: 2012963616: a(n) LRUCache > > > 0xbfc87f2c M GradientFillStyle>pixelRamp 2018529312: a(n) GradientFillStyle > > > 0xbfc87f4c M BalloonEngine>registerFill: 2018659444: a(n) BalloonEngine > > > 0xbfc87f74 M BalloonEngine>registerFills: 2018659444: a(n) BalloonEngine > > > 0xbfc87f90 M BalloonEngine>registerFill:and: 2018659444: a(n) BalloonEngine > > > 0xbfc87fb4 M BalloonEngine>drawRectangle:fill:borderWidth:borderColor:transform: 2018659444: a(n) BalloonEngine > > > 0xbfc87fe8 M BalloonCanvas>drawRectangle:color:borderWidth:borderColor: 2018659252: a(n) BalloonCanvas > > > 0xbfc88010 M BalloonCanvas>fillRectangle:fillStyle: 2018659252: a(n) BalloonCanvas > > > 0xbfc88030 M FormCanvas>balloonFillRectangle:fillStyle: 2018611404: a(n) FormCanvas > > > 0xbfc88054 M FormCanvas>fillRectangle:fillStyle: 2018611404: a(n) FormCanvas > > > 0xbfc88074 M FormCanvas(Canvas)>fillRectangle:fillStyle:borderStyle: 2018611404: a(n) FormCanvas > > > 0xbfc88098 M SystemWindow(Morph)>drawOn: 2014426088: a(n) SystemWindow > > > 0xbfc880b4 M FormCanvas(Canvas)>draw: 2018611404: a(n) FormCanvas > > > 0xbfc880d0 M FormCanvas(Canvas)>drawMorph: 2018611404: a(n) FormCanvas > > > 0xbfc880f0 M [] in SystemWindow(Morph)>fullDrawOn: 2014426088: a(n) SystemWindow > > > 0xbfc8810c M CornerRounder class>roundCornersOf:on:in:displayBlock:borderWidth:corners: 2007442196: a(n) CornerRounder class > > > 0xbfc8813c M FormCanvas>roundCornersOf:in:during: 2018611404: a(n) FormCanvas > > > 0xbfc88160 M FormCanvas(Canvas)>roundCornersOf:during: 2018611404: a(n) FormCanvas > > > 0xbfc88180 M SystemWindow(Morph)>fullDrawOn: 2014426088: a(n) SystemWindow > > > 0xbfc8819c M FormCanvas(Canvas)>fullDraw: 2018611404: a(n) FormCanvas > > > 0xbfc881b8 M FormCanvas(Canvas)>fullDrawMorph: 2018611404: a(n) FormCanvas > > > 0xbfc88208 M [] in WorldState>drawWorld:submorphs:invalidAreasOn: 2001318316: a(n) WorldState > > > 0xbfc88240 I Rectangle>allAreasOutsideList:startingAt:do: 2017358104: a(n) Rectangle > > > 0xbfc8826c I Rectangle>allAreasOutsideList:do: 2017358104: a(n) Rectangle > > > 0xbfc882a8 M [] in WorldState>drawWorld:submorphs:invalidAreasOn: 2001318316: a(n) WorldState > > > 0xbfc882cc M Array(SequenceableCollection)>do: 2018529764: a(n) Array > > > 0xbfc882fc M WorldState>drawWorld:submorphs:invalidAreasOn: 2001318316: a(n) WorldState > > > 0xbfc88334 M [] in WorldState>displayWorld:submorphs: 2001318316: a(n) WorldState > > > 0xbfc8834c M FormCanvas>roundCornersOf:in:during: 2017358448: a(n) FormCanvas > > > 0xbfc88370 M FormCanvas(Canvas)>roundCornersOf:during: 2017358448: a(n) FormCanvas > > > 0xbfc88398 M WorldState>displayWorld:submorphs: 2001318316: a(n) WorldState > > > 0xbfc883c0 I PasteUpMorph>privateOuterDisplayWorld 2001318568: a(n) PasteUpMorph > > > 0xbfc883e0 I PasteUpMorph>displayWorld 2001318568: a(n) PasteUpMorph > > > 0xbfc88404 I [] in WorldState>displayWorldSafely: 2001318316: a(n) WorldState > > > 0xbfc88420 M BlockClosure>on:do: 2018529472: a(n) BlockClosure > > > 0xbfc88440 M BlockClosure>ifError: 2018529472: a(n) BlockClosure > > > 0xbfc88464 I WorldState>displayWorldSafely: 2001318316: a(n) WorldState > > > 0xbfc88480 M PasteUpMorph>displayWorldSafely 2001318568: a(n) PasteUpMorph > > > 0xbfc88498 M PasteUpMorph>install 2001318568: a(n) PasteUpMorph > > > 0xbfc884c0 I AutoStart class>checkForPluginUpdate 2008299932: a(n) AutoStart class > > > 0xbfc884e0 M AutoStart class>startUp: 2008299932: a(n) AutoStart class > > > 0xbfc8850c M [] in SmalltalkImage>send:toClassesNamedIn:with: 2009624740: a(n) SmalltalkImage > > > 0xbfc88534 I OrderedCollection>do: 2009661056: a(n) OrderedCollection > > > 0xbfc8855c I SmalltalkImage>send:toClassesNamedIn:with: 2009624740: a(n) SmalltalkImage > > > 0xbfc88588 I SmalltalkImage>processStartUpList: 2009624740: a(n) SmalltalkImage > > > 0xbfc885b4 I SmalltalkImage>snapshot:andQuit:embedded: 2009624740: a(n) SmalltalkImage > > > 2014606248 s SmalltalkImage>snapshot:andQuit: > > > 2014606132 s TheWorldMainDockingBar>saveAndQuitSqueak > > > 2014606040 s [] in MenuItemMorph>invokeWithEvent: > > > 2014605924 s BlockClosure>ensure: > > > 2014605832 s CursorWithMask(Cursor)>showWhile: > > > 2014605632 s MenuItemMorph>invokeWithEvent: > > > 2014605540 s MenuItemMorph>mouseUp: > > > 2014605448 s MenuItemMorph>handleMouseUp: > > > 2014605316 s MouseButtonEvent>sentTo: > > > 2014605224 s MenuItemMorph(Morph)>handleEvent: > > > 2014605132 s MorphicEventDispatcher>dispatchDefault:with: > > > 2014605040 s MorphicEventDispatcher>dispatchEvent:with: > > > 2014604948 s MenuItemMorph(Morph)>processEvent:using: > > > 2014604856 s MorphicEventDispatcher>dispatchDefault:with: > > > 2014604748 s MorphicEventDispatcher>dispatchEvent:with: > > > 2014604616 s DockingBarMenuMorph(Morph)>processEvent:using: > > > 2014604524 s DockingBarMenuMorph(Morph)>processEvent: > > > 2014604432 s DockingBarMenuMorph(MenuMorph)>handleFocusEvent: > > > 2014604340 s [] in HandMorph>sendFocusEvent:to:clear: > > > 2014604248 s [] in PasteUpMorph>becomeActiveDuring: > > > 2014604068 s BlockClosure>on:do: > > > 2014603976 s PasteUpMorph>becomeActiveDuring: > > > 2014603856 s HandMorph>sendFocusEvent:to:clear: > > > 2014603764 s HandMorph>sendEvent:focus:clear: > > > 2014603672 s HandMorph>sendMouseEvent: > > > 2014603528 s HandMorph>handleEvent: > > > 2014603180 s HandMorph>processEvents > > > 2014603064 s [] in WorldState>doOneCycleNowFor: > > > 2014602972 s Array(SequenceableCollection)>do: > > > 2014602872 s WorldState>handsDo: > > > 2014602780 s WorldState>doOneCycleNowFor: > > > 2014602688 s WorldState>doOneCycleFor: > > > 2014602596 s PasteUpMorph>doOneCycle > > > 2010011832 s [] in Project class>spawnNewProcess > > > 2010011700 s [] in BlockClosure>newProcess > > > > > > Most recent primitives > > > basicNew > > > copyBits > > > @ > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > @ > > > basicNew > > > copyBits > > > @ > > > @ > > > @ > > > basicNew > > > @ > > > copyBits > > > @ > > > @ > > > @ > > > basicNew > > > basicNew: > > > at:put: > > > @ > > > copyBits > > > @ > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > @ > > > basicNew > > > shallowCopy > > > new: > > > @ > > > @ > > > new: > > > at:put: > > > at:put: > > > at:put: > > > at:put: > > > @ > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > basicNew > > > basicNew: > > > basicNew > > > @ > > > @ > > > basicNew > > > copyBits > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > @ > > > basicNew > > > basicNew: > > > at:put: > > > at:put: > > > @ > > > basicNew > > > copyBits > > > at:put: > > > @ > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > basicNew > > > basicNew: > > > basicNew > > > @ > > > @ > > > basicNew > > > copyBits > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > @ > > > basicNew > > > basicNew: > > > at:put: > > > at:put: > > > @ > > > basicNew > > > copyBits > > > at:put: > > > @ > > > @ > > > @ > > > @ > > > basicNew@ > > > @ > > > basicNew > > > basicNew: > > > basicNew > > > @ > > > @ > > > basicNew > > > copyBits > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > @ > > > basicNew > > > basicNew: > > > at:put: > > > at:put: > > > @ > > > basicNew > > > copyBits > > > at:put: > > > @ > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > basicNew > > > basicNew: > > > basicNew > > > @ > > > @ > > > basicNew > > > copyBits > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > @ > > > basicNew > > > basicNew: > > > at:put: > > > at:put: > > > @ > > > basicNew > > > copyBits > > > at:put: > > > @ > > > perform:with: > > > @ > > > @ > > > perform:with: > > > @ > > > basicNew > > > basicNew > > > @ > > > @ > > > @ > > > basicNew > > > basicNew > > > basicNew > > > basicNew > > > new: > > > basicNew: > > > basicNew > > > primitiveSetBitBltPlugin: > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > basicNew > > > @ > > > primitiveSetBitBltPlugin: > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > basicNew > > > @ > > > @ > > > wait > > > at:put: > > > signal > > > primInitializeBuffer: > > > primSetAALevel: > > > primSetOffset: > > > primSetClipRect: > > > primSetEdgeTransform: > > > primSetColorTransform: > > > primSetEdgeTransform: > > > primSetColorTransform: > > > primGetDepth > > > primSetDepth: > > > new: > > > at:put: > > > at:put: > > > basicNew: > > > species > > > stringHash:initialHash: > > > fractionPart > > > truncated > > > fractionPart > > > fractionPart > > > truncated > > > basicNew > > > basicNew > > > new: > > > value: > > > at:put: > > > value: > > > at:put: > > > at:put: > > > value:value: > > > value:value: > > > basicNew: > > > basicNew: > > > at:put: > > > at:put: > > > at:put: > > > at:put: > > > fractionPart > > > truncated > > > basicNew: > > > at:put: > > > at:put: > > > at:put: > > > at:put: > > > fractionPart > > > truncated > > > basicNew: > > > at:put: > > > at:put: > > > at:put: > > > at:put: > > > truncated > > > truncated > > > truncated > > > truncated > > > at:put: > > > perform:with: > > > truncated > > > Aborted > > > gokr@yoda:~/squeak$ > > > > > > > > > > > > |
In reply to this post by Eliot Miranda-2
On 20.06.2010 22:11, Eliot Miranda wrote: > While the VMs convert float order automatically on load they do > require special accessing primitives Float>>basicAt: & > Float>>basicAt:put: that undo the reversal and answer Float contents > in big-endian order so that e.g. Float>>hash is unchanged. The > methods assume these primitives can fail, allowing the code to be used > on current Squeak VMs. > > Should also note, Float divisions by zero now return + / - Infinity rather than raising ZeroDivide errors. 15.0 / 0 Infinity -15.0 / 0.0 -Infinity Cheers, Henry |
On Mon, Jun 21, 2010 at 5:16 PM, Henrik Sperre Johansen <[hidden email]> wrote:
which is clearly a bug in Cog. But I'd like to provide a flag/image-header-bit to allow one to specify either behaviour. i.e. fail float primitives that return NaNs or Infs, or return the relevant IEEE Inf/NaN. Andreas and I have just discussed this and he points out that while under ieee Inf and non-NaN results are bit-identical across platforms, NaNs are not. So for Croquet one really needs the code generator to arrange that float primitives that do return NaNs normalise those NaNs to a small set (e.g. a pair of a single +ve NaN & a single -ve NaN).
cheers, Eliot
|
In reply to this post by Juan Vuletich-4
On 6/21/2010 11:29 AM, Juan Vuletich wrote: > When starting, it does an invalid memory access, and terminates without > any error message or log. I guess I'd need to setup a VM building and > debugging environment, etc, and learn quite a bit to fix this myself. I > guess it would take you minutes to spot this, compared with the days I'd > need to spend... I'd very much appreciate your help. I've seen that before :-) Cog requires LargeNegativeInteger to be compact at 5 (previously PseudoContext). After installing and running the attached code in addition to the other changes you're good to go. Enjoy! - Andreas Integer class-initialize.st (1K) Download Attachment |
Hi Andreas, Andreas Raab wrote: > On 6/21/2010 11:29 AM, Juan Vuletich wrote: >> When starting, it does an invalid memory access, and terminates without >> any error message or log. I guess I'd need to setup a VM building and >> debugging environment, etc, and learn quite a bit to fix this myself. I >> guess it would take you minutes to spot this, compared with the days I'd >> need to spend... I'd very much appreciate your help. > > I've seen that before :-) Cog requires LargeNegativeInteger to be > compact at 5 (previously PseudoContext). After installing and running > the attached code in addition to the other changes you're good to go. > > Enjoy! > - Andreas Yes. I yesterday downloaded XCode and built the Mac VM, only to find that it throws a clear error (LargeNegativeInteger is not compact at 5, can't continue) to the console. I told this to Eliot, but forgot to say it in the lists. I apologize. Anyway, for some reason, the win vm you posted, instead of giving the error and exiting cleanly, it does an invalid access and is terminated. Maybe you want to check that. BTW, most console messages (i.e. stdout) will be missed in these days of graphical shells. An OS dialog would be better. Thank Eliot, you and Teleplace for this great gift! This is a major milestone in the history of Squeak. Cheers, Juan Vuletich |
In reply to this post by Eliot Miranda-2
Morning all, I've pushed a number of changes into the iOS platform tree to enable you to build a Macintosh Cocoa V5 Cog VM. Well at least one that runs a few million byte codes before crashing. This also requires changes to the Cog branch, but that's part of the re-integration process. I have also built it as a Stack VM for the iPhone, that runs many more million bytecodes before tossing walkbacks on an unaltered image. Just a bit of image tinkering I think is needed there, plus a change to let complex events flow up out of the VM into the image, but again part of the re-integration process. On 2010-06-20, at 1:11 PM, Eliot Miranda wrote:
-- =========================================================================== John M. McIntosh <[hidden email]> Twitter: squeaker68882 Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com =========================================================================== smime.p7s (3K) Download Attachment |
Awesome! Thanks :) - Bert - On 08.07.2010, at 03:49, John M McIntosh wrote:
|
Free forum by Nabble | Edit this page |