Network functionality

Pyrit 0.2.3-dev (C) 2008, 2009 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3

The following cores seem available…
#1:  ‘CUDA-Device #1 ‘GeForce 8600M GT”
#2:  ‘Network-Core @192.168.56.3′
#3:  ‘CPU-Core (x86)’

Rev103 that was just committed to svn includes support for clustering multiple machines over the local network. This feature was often requested as it allows to use hardware much more effectively.

How it works:

  • Pyrit has a new command ‘serve‘ that starts a server on the current host. A server listens for connections on port 19935 (setup those firewalls…) and can use the local hardware to compute for other clients.
  • Clients can use multiple servers and each server can support multiple clients simultaneously.
  • This is not a distributed database! The clients transfer their workunits to the servers and the servers compute the results and send them back. Bandwidth is a problem: 10.000 PMKs/s require about 30kb/s from the client to the server and about 300kb/s from the server to the client. This makes internet-connections too slow for most of us…

How to use:

  • Get Pyrit-0.2.3-dev from trunk
  • On the servers, the machines with the fast hardware:
    • Start Pyrit with ‘pyrit serve‘.
    • The server uses all available (local!) hardware just like a pyrit-session would do…
    • Kill it with ctr+c when you are done. Beware that clients which are still waiting for results from that server will die…
  • On the client, the machine that hosts the database:
    • Edit ‘~/.pyrit/hosts‘. Add one IP/hostname per line for every server you have.
    • Check if the server is reachable by opening ‘http://%5BServer-IP%5D:19935/‘ in your web-browser.
    • Run ‘pyrit list_cores‘. It should list the new Network-Cores.
    • The servers do not have to be online when you start Pyrit. Inactive servers get ignored…
    • Use Pyrit like you would normally do. All functions (benchmark/batchprocess/passthrough) use the servers transparently and without further interaction.

I think the implementation is already quite reasonable; however you should expect some rough edges like unhandled exceptions/crashes caused by network timeouts and such…

No comments required

[root@localhost ~]# pyrit list_cores

Pyrit 0.2.3-dev (C) 2008, 2009 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3

The following cores seem available…
#1:  ‘CPU-Core (x86_64)’
#2:  ‘CUDA-Device #1 ‘GeForce GTX 295”
#3:  ‘CUDA-Device #2 ‘GeForce GTX 295”
#4:  ‘CUDA-Device #3 ‘GeForce GTX 295”
#5:  ‘CUDA-Device #4 ‘GeForce GTX 295”
#6:  ‘CUDA-Device #5 ‘GeForce GTX 295”
#7:  ‘CUDA-Device #6 ‘GeForce GTX 295”
#8:  ‘CUDA-Device #7 ‘GeForce GTX 295”
#9:  ‘CUDA-Device #8 ‘GeForce GTX 295”

[root@localhost ~]# pyrit benchmark
Pyrit 0.2.3-dev (C) 2008, 2009 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3

Running benchmark for at least 60 seconds…

CUDA-Device #1 ‘GeForce GTX 295′: 10517.60 PMKs/s, 97.90% occupancy
CUDA-Device #2 ‘GeForce GTX 295′: 10645.91 PMKs/s, 95.12% occupancy
CUDA-Device #3 ‘GeForce GTX 295′: 10532.52 PMKs/s, 92.92% occupancy
CUDA-Device #4 ‘GeForce GTX 295′: 10574.52 PMKs/s, 94.16% occupancy
CUDA-Device #5 ‘GeForce GTX 295′: 10580.90 PMKs/s, 94.10% occupancy
CUDA-Device #6 ‘GeForce GTX 295′: 10575.25 PMKs/s, 94.69% occupancy
CUDA-Device #7 ‘GeForce GTX 295′: 10656.41 PMKs/s, 98.21% occupancy
CUDA-Device #8 ‘GeForce GTX 295′: 10635.27 PMKs/s, 94.68% occupancy

Benchmark done. 84718.38 PMKs/s total.

IMAGE_055

[required] Those are four Dual-GPU GTX295 that get reported as eight devices [/required]

Follow

Get every new post delivered to your Inbox.