My DCOM and Multi-CPU enabled Fractal Generator v2.43

Description

This is a fractal Generator. It uses separate modules (servers) for the calculation of a particular kind of fractal. These servers are started via COM/DCOM -- they can run on the same machine or on other machines in the network. The servers are independent of the client using them. More servers with different kind of fractals may be added later.

Contained files

fractal.exe
The client application to be used to display fractals.
mandelps.dll
A proxy DLL needed to marshal interface calls to an object residing inside a different process not necessarily on the same machine.
mandel.exe
A server application to calculate an ordinary mandelbrot set.
mandel4dim.exe
A server application to calculate a slightly changed mandelbrot set. It is using 4-dim hypercomplex numbers instead of 2-dim ordinary complex numbers.
mandel8dim.exe
A server application to calculate a slightly changed mandelbrot set. It is using 8-dim hypercomplex numbers instead of 2-dim ordinary complex numbers.
julia.exe
A server application to calculate a julia-set.
newton.exe
A server application to calculate a different kind of fractal resulting out of applying the Newton method to the nonlinear equation z^3 + 1 = 0.
expression.exe
A server application to calculate a of fractal whose equation can be entered.
register.bat
Call to register the provided servers and proxy DLLs.
unregister.bat
Call to un-register the provided servers and proxy DLLs.
readme.htm
This file.

normal Installation for single machine use

Of course one can also use the provided

register.bat

to do all this (except unpacking and copying).

Server installation -- enable others to exploit the unused CPU time of your machine

I tested this, using NT machines as servers and as clients. I did not test this using Windows9x.

To enable others to exploit the CPU power of your machine you have to perform the following additional tasks:

I'm sorry about all this clicking and selecting for every single server. If someone knows about a way on how to script the entire procedure, please let me know.

To use other machines, simply pass the names of these machines at the commandline to fractal.exe. As an example let's assume your network does contain 4 machines (including your own) called machine0, machine1, machine2 and machine3. Your machine is machine0. Then the commandline should look like this:

fractal.exe machine1 machine2 machine3

The servers are running with idle priority -- this means, that they only get CPU time if there is no process with normal priority which currently needs CPU time. Thus installing these servers and the usage of these servers by others does not degrade the responsiveness of your system. Most applications don't exploit idle priority, since it is erroneously considered as lowering performance. Since the servers are running with the very lowest priority in idle priority class, they even yield the CPU to processes started with "start /low" from the commandline. I think even screensaver run with higher priority and will block fractal servers.

If the one sitting in front of the machine is only using a well crafted editor, his machine is usually for more than 90% of the time idle.

The servers are not running all the time but only if someone is using them. Registration does not mean, that there is some server running all the time waiting until someone connects -- this task is done by DCOM for all DCOM applications. DCOM will startup the server is someone (with the matching permissions) tries to use them.

Uninstallation

Of couse one can also use the provided

unregister.bat

to do all this (except deleting).

exploitation of Multi-CPU machines

The servers are calling some system call to get informed about the number of CPUs on your machine. They will start as many threads for every client as there are CPUs on your system.

How to use the client application

There is a single popup menu which appears when clicking with the right mouse button into the window. It provides menu items for

Usage of Idle priority

The servers are performing their calculation with priority idle. This means, that they don't get any CPU time if there is a different process with higher priority (and higher means here normal priority) which currently consumes CPU time. Thus it may happen, that the fractal calculation is not advancing at all if you're running another application which consumes much CPU time (like a compiler or a simulator or another fractal generator). I consider such applications as not cooperative, especially if they even use normal priority in case of their window does not own the focus.

Bugs fixed

Parameters

Mandel Fractal Method

Iteration boundary

This is the termination boundary to the power of 2. As you know the formula for mandelbrot is like that:
zn+1 = zn^2 + z0, with z = x + i*y.
Iteration is terminated if zn^2 is larger than this boundary. Larger boundary means higher number of iterations are necessary.

max. number of iterations

Maximum number of iterations. May be up to 65536-1. Useful numbers are in the range of 100..1000.

Julia

Uses the same parameters like Mandel and additionally

cx and cy

Formula used is
zn+1 = zn^2 + k, with k = cx + i*cy

Mandel4Dim

Uses the same parameters like Mandel and additionally

f and c. f and c are used to determine the mapping of the two dimensional start values into the other two dimensions. The hypercomplex number used is

z = a + i*b + j*(c + i*d), with i*i = - 1, and j*j = -i

a0 = x0

b0 = y0

c0 = f*x0 + c

d0 = f*y0 + c

Mandel8Dim

Uses the same parameters like Mandel and additionally

f and c. f and c are used to determine the mapping of the two dimensional start values into the other 6 dimensions. The hypercomplex number used is

z = a + i*b + j*(c + i*d) + k*{e + i*f + j*(g + i*h)}, with i*i = - 1, j*j = -i and k*k = -j

a0 = x0

b0 = y0

e0 = g0 = c0 = f*x0 + c

d0 = f0 = h0 = f*y0 + c

Newton

A smaller iteration boundary means higher number of iterations are necessary.

Expression

Calculates an expression to be entered by the user. The default expression matches a more complex mandelbrot. The expression entered gets passed two arguments: x[0] is the current complex iteration value. x[1] is the initial complex start value matching the coordinates of the point to be calculated. Currently it is not possible to use an equation, which is made up of more than one assignment. Means, intermediate results are not possible yet.

The expression engine used here will be featured in a separate page on my home page. It provides the following features:

To be implemented:

About the hypercomplex numbers used

The hypercomplex number system used here is not a mathematically correct one. This is because of j*j == -i or k*k == -j does not create a new independent dimension, since the square root of -i (and the square root of the square root of -i) is well defined in the ordinary complex plane. But using this system does lead to interesting fractals and this is what we are looking for, isn't it?

Disclaimer

Use this software on your own risk! I cannot accept any responsibility for damages created directly or indirectly by the usage of this software.

Santa Clara, California, U.S.A, Sunday, February 27, 2000

Peter Foelsche