In response to the questions below. 1. Yes, it's doable -- but you have to lock *somewhere*. If you don't do a global lock with MASON, you're going to have to do some fine-grained lock on some subelement of MASON to make certain that MASON Steppables aren't scribbling at the same time that the repaint method is reading. Otherwise you're going to have a race condition. 2. It won't violate any MASON design principle. But there are two things to keep in consideration: A. You need to gather the repaint thread at some point, when the simulation is stopped. AsynchronousSteppable would do this; else you'll need to roll your own approach. B. Fine-grained locking means a lot more synchronized{ } calls, which can be expensive. Having a global lock on MASON to paint, then to do the model, allows MASON to largely run unsynchronized (except for the schedule, sigh). 3. Essentially no modification. I think the easiest way to do this is to copy the network first, and then you don't have to do any locking! You can do the copy in a Steppable stored in the GUIState's minischedule, and then fire off something to do drawing on the *copy* of the network in the background. Though you need to check to see that your GUI can accept a new copy -- it's done drawing its old copy -- before you shove a new one at it! Sean On Oct 10, 2006, at 12:48 PM, Maciej M. Latek wrote: > OK, now I see a clouded path to follow: use Asynchronous Steppable > just for > a certain time-consuming display and leave the rest GUI unchanged. > > Maciek > > > > -----Original Message----- > From: Maciej M. Latek [mailto:[log in to unmask]] > Sent: Tuesday, October 10, 2006 12:31 PM > To: 'MASON Multiagent Simulation Toolkit' > Subject: Make things more parallel > > Hi all, > > I've got a question concerning parallelization of visualization > inspired by > parallel version of Heatbugs (which works very nicely on a Core Duo > by the > way, one can really see the difference) and Mr. Ong's problem. > > My understanding is that, as the GUI thread repaints displays, the > SimState > thread is put on hold. When we consider really computationally > expensive GUI > tasks as laying out a graphs, this seems to be suboptimal solution. > I was > wondering if it would be possible to put the two thread on separate > processors, have the GUI thread probe the other one for information > and > afterwards to detach and free the SimState thread to go ahead while > GUI is > doing its job. After GUI is done, the process would repeat. > > I realize that in general I would loose synchronization, but if I'm > laying > something out let's say each 50 time-steps and still have to wait > few second > for the simulation to resume, this path would provide me with much > smoother > and faster performance. > > The questions are: > > 1) Is it doable? > 2) Would it violate some important MASON design principle? > 3) How much modification to MASON core would one have to introduce > to arrive > at such a solution? > > Regards > > Maciek Latek > > > >