Networking
From Ultrafractal Wiki
also see: Distributed Rendering
I find the idea of computers working together over the internet utterly amazing. I wonder if someone would explain how this works (in super simple terms). Diane
It's quite simple in concept, and like many things, fairly difficult to do well in practice. The master computer breaks up the fractal (or whatever the computer problem is) into very small pieces and sends a piece out to each of the machines doing the work. (Fractals are well-suited for this because each pixel is computed in isolation and can be its own job.) The "slave" computers do the work and send back the results. The master notes this and sends back another piece. In more sophisticated systems, the size/type of piece of the overall job is adjusted to the speed/power of the slave computer.
Kerry
***
Hi,
Just to add a touch of complexity to Kerry's explanation - it works well for most fractal formulas in UF but not those that need to compute the entire fractal in the global section - i.e. those that compute to an image buffer or image arrays. That means it doesn't work with the Apophysis compatible IFS formulas, or my Attractors formula or my latest "DLA Inspired" formula or other similar formulas. (Note that mmf4-Escape Time IFS and 3D IFS will work using networking since they don't use image arrays)
bye Dave
***
Hi Diane!
It's really pretty straightforward to do on your own LAN if you have a router and other PC's just sitting around at your house. Only the Ani edition has Network Render, though. That's the only reason I always get that edition. You just set up a home network in Windows and let your router assign IP addresses to them all. On your "slave" PC you go to C: Program Files/UF and run the "Server" executable that lives there - or put a shorcut on your desktop so you don't have to go digging for it all the time. Then, when the Server window opens, at the bottom it will tell you the IP address it is listening on (usually something like 192.168.1.100) after a short time that it takes the router to give it one. You go to File/Options/Security and give it a password so you don't get botted by some hacker. Then you go to File/Options/General and tell it what "Port" number to listen on. It defaults to "8691". I'm not sure if you have to change that if your "master" rig is using that port but you can just uncheck 'Use Default' and give it like "8692". ( To connect to other PC's over the 'net, you have to have their IP addresses and ports and also you and whomever is helping out in another city or down the street have to configure "port forwarding" permissions on your routers. THAT is a bit complicated but doable)
Then, you open UF on your main PC and open the "Network" sidebar window. Click the little "+" thingie at the top right and a window opens to add a connection to your slave PC. You enter the IP address that your slave PC was listening on when you set it up and the port number you gave it along with the same password you gave it so that it will accept communication from your main rig and close the window.
You'll then have an entry in UF's Network sidebar with an IP and port (like 192.168.1.101:8692). Click the funky icon to the left of that IP and your main PC running UF will connect to the slave. Start a render and there'll be a little blue arrow rather than two horizontal dashes where the funky icon was and at the bottom, it will tell you how long the slave has been calculating and how many pixels per second it is sending/contributing to the job being run by your main rig. Pretty cool beanz!
If you have more than one extra PC, set the others up exactly like the first slave except with different port numbers, enter their IP's (look to see what IP their Server windows say they are listening on) and ports into the Network sidebar on your main master rig, and you can have a real live "processor cluster". (I have 4 slaves, soon to be five when I upgrade my main guy to a quad-core and build a fifth one around my present 3.46GHz dual-core with parts I have around the house....plus my wife's Athlon dual-core helps occasionally if I'm in a REAL hurry...she really doesn't like that a whole lot becuse it slows down the game she's always playing :-)
I have my slave rigs connected over my LAN in an empty bedroom on the other side of the house. On onee of those four ('Farm 1") I have set up UF on so that, if I don't want to use my main rig - like while I'm fragging Skaarj in Unreal Tournament - I can have it be a master by itself and the other 3 slaves to it. The master rig is the only one you have to have UF actually open on. I control the whole mess from the other side of the house using "Remote Desktop", so all I have to do is go in there and hit the ower switch to turn them all on and everything else, including shutting down when they are done. (do Ctrl-Alt-End (not DEL because that will shut down your main rig - hate when that happens! lol- to open Task Manager on the slave while in Rmt Desktop to shut them down) For times when my "semi-autonomous" master rig is running a render without my main rig, I have it render to its "Shared Documents" folder. When they are done, I just go to My Network Places on my main rig, open the shared folder on the semi-master slave rig, (I call mine "Farm 1" thru "Farm 4") "cut" the rendered file and "paste" it into my Renders folder on my main PC where I can then open it in PS to sharpen. etc. With Remote Desktop, the desktop of whichever slave you've connected to shows up as your own and I just open UF on Farm 1, tell it to go talk to the other 3 guys and start the render. First, I have to copy the upr from my main rig to the semi-master slave's Shared folder with my main rig and then, after I connect with RM, move it to the pars folder in its UF so that it can find the file to render. I have different - fractal of course! - wallpapers for each slave with nifty text saying what their name is so I don't confuse them with each other or with my OWN desktop while I'm connected. I have also placed a shortcut of the UF Server executable in Documents and Settings/All Users/Start Menu/Programs/Startup on each of the slaves so that, when I power them up, Server opens immediately when XP launches and I don't have to connect to each one (tedious!) and turn the server program on. They immediately are listening for a UF Server connection automatically as soon as the rigs boot. Neat little setup and I don't even have to get out of my chair to do anything! (bazy lastard that I'm is! lol)
An extra added bonus: If you stay connected to your slave PC(s) while just making a new fractal on your main PC, they will also help in the calculations every time you make a change of a parameter or add a new layer even if you aren't doing a render to disk. Speeds things up a ton when you are fractalling.
Whew - what a long-winded answer! It's really not very complicated - I just wanted to try to mention everything I could think of about how to do this stufff and give ideas based on the stuff I have set up.
c-ya! Rick
***
Rick, Diane,
I'm not sure if you have to change that if your "master" rig is using that port but you can just uncheck 'Use Default' and give it like "8692".
If you're just setting up a local network of UF rendering computers you should not need to change the port number. There are only a few circumstances where you might need to change the port number:
1. You are running more than one copy of the UF server on the computer. Frankly, there are very few reasons to try to do this, since a single server can accommodate multiple connections.
2. You have several computers set up on a local network, and you want to make them visible to the outside world, and the entire local network appears to be only one IP address (using "NAT"), *and* the NAT device cannot reassign the port number when it passes the connection through from the outside. This last point is important; I don't know of any NAT device that allows port forwarding that *doesn't* allow you to reassign the port number.
3. You are trying to "hide" that UF server so that someone cannot tell you are running it. This is a bad idea, since anyone interested enough to pick at your computer to try to use your UF server could portscan your computer and find the UF server anyway.
If you don't know what these three things mean then you don't need to change the port number. :-)
***
The pc's would all have to be pretty near the same speed as it seems the operation might go to the speed of the slowest machine because the master would be waiting for it to send its bits while the other waited for new instructions.
I don't think this is true. I sometimes use my local network of 4 machines which vary greatly in speed. I think that when a machine is done rendering a piece, UF hands the machine a new piece even if other machines are not through.
Rob
***
This is true. However, a very slow machine can slow down the entire process if it is significantly slower than the others. If the main PC is slower than the networked \PCs, you will benefit greatly from networking. But, if one of the networked \PCs is so slow that the all the other slices are computed before the slow PC has computed its slice, then you are better off not using that PC. It can vary from image to to image, of course, and some circumstances are more drastic than others.
Ken...
I just built myself a "render farm" - or "bit bucket-brigade" or "pixel pail parsers" lol - of four 3GHz, dual-core rigs and have them connected to my main rig over my LAN. Pretty cool - I built them all for under $1000. They run a little warm, though, because they are Pentium D 930's (so whaddaya want for $100, mobo and all??? lol) but nothing that a half dozen fans per box couldn't handle. They're running "headless" - no monitor, no mouse, no keyboard. Just a motherboard, a CPU, 1Gb of RAM and some 40Gb laptop hard drives I got from work. I have one monitor in the room with them for times when the 4 of them work a render alone without the guidance of my main rig. I control everything from the other side of the house on my main machine using Remote Desktop so that's why I didn't need monitors, etc for them - sweet setup! Saved a ton of $$ by doing that, too.
Network rendering saves a whole lot of time. And one thing I'm not sure many are aware of: If you leave them connected over the LAN while you are just working on an image and not rendering to disk, they pitch in on the job of re-drawing the image everytime you make a change or move something and that REALLY helps - especially if you're juggling 300 layers! Sorry for all the rambling...lol c-ya!
Rick
