After writing my proposal first draft I received feedback from Steven, a member of my class. Although I hope to address the issues he brought up in the next version of my proposal, I wanted to answer them here for the time being.
Hey, sounds like a cool idea. Sounds like it might be quite a difficult project to undertake considering the need for multiple computers to be running the same simulation.
Although multiple computers will be used for the simulation, bear in mind that I can run both a server and several client nodes on one machine during implementation and to perform limited tests. I will need to make use of several computers to properly test the application, especially when it comes to networking and synchronisation issues, however hopefully this can be done in the evening, at home, or when the labs are less busy.
Will you start from one computer and then work you up by having more join the simulation?
Partially. Obviously my aim would be to start with the simplest working solution possible, and build from there in several steps:
- Experiment with multi-threading techniques within a single application.
- Experiment with networking between several machines.
- Combine these approaches to create a very simple client-server framework for distributing tasks.
- Design and build a simple basis for the simulation on top of this – get characters being processed on multiple machines.
- Expand on the simulation and improve the underlying architecture.
Or will there be a minimum to start with and also maybe a maximum?
The number of machines which will be useful for the simulation will depend on how complicated the processing required is – for example how many entities are created. If the project is successful the simulation should run, albeit slowly, on one machine and faster as the work is distributed over multiple machines, limited by Amdahl’s law. I doubt I will achieve this ideal and the research question can still be answered even if the simulation runs slower in a distributed situation.
I take it the actions performed will just be general tasks such as moving place to place, interacting with other characters or objects, etc?
I am still deciding, to some extent, what tasks would be performed. It is important that more than one task or is handled as this creates a different type of simulation from performing an identical process on each piece of data (character).
My initial plan is to have the character choose a point in a simple 2D city to aim to go to, and then have them navigate there. Next, collisions with other data (characters) could be considered, greatly increasing the complexity of the situation. Finally, the characters could perform simple interactions with items in the world or other characters; However, I think it is unlikely I will have time to implement this option.
Will these action just be randomly assigned to any computer as long as they are free to do so?
This is a major part of what I will be investigating. Tasks will most likely be assigned to nodes spatially – in terms of an area of a 2D map, although other methods will be tested. I would especially like to try partitioning the world based on the density of characters in an area in order to try and create even workloads for different machines.
Or will certain task that may need more processing power be sent to the computer with the best processing power?
This will really depend on the hardware I have available. Ideally, I would like to measure each node’s networking and processing performance and base the amount of work distributed on this. If it is possible to use my laptop on the uni network then there will be more opportunities here than if I am working with identical lab machines. It might also be possible to simulate different hardware using virtual machines.
Thanks again for the questions!