Pages

2. Setting up SSH password-less log in

1. Define a common user for all the machines with the same user name and make the home directory /mirror

madhawa@node0:~$ sudo useradd -d /mirror/mpiuser -m -s /bin/bash mpiuser
madhawa@node0:~$ sudo passwd mpiuser

This would prompt for a new password for the user id "mpiuser". Do the same thing to all the machines.

2. Make the mpiuser as the owner of the /mirror

madhawa@node0:~$ sudo chown mpiuser /mirror

3. Install the SSH server in all the machines.

madhawa@node0:~$ sudo apt-get install openssh-server

4. Setup the password-less log in.

login with the new user in su mode.

madhawa@node0:~$ su mpiuser

Generate DSA key pair for the mpiuser.

mpiuser@node0:~$ ssh-keygen -t dsa

This will prompt for a passphrase. Leave it empty. 

A folder called .ssh is created in /mirror/mpiuser which contains the key file. Add this key to the authorized set of keys by issuing the following commands.

mpiuser@node0:~$ cd .ssh
mpiuser@node0:~/.ssh$ cat id_dsa.pub >> authorized_keys
mpiuser@node0:~/.ssh$ chmod 644 authorized_keys 

To test the password-less login, issue the following command on the master node and if successful, this would return the host name of the nodes without asking for password or passphrase.

mpiuser@node0:~$ ssh node1 hostname

Note: Sometimes you may be prompted to enter password for once. But it won't be required again. 





1. Setting Up the NFS on the Computer Cluster

I have 3 machines, each of which has Ubuntu 12.04 32bit installed. I have named my machine as node0, node1, node2.

Note:  If you want to rename your machines in edit the /etc/hostname file:
madhawa@node0:~$ sudo nano /etc/hosts
and replace the current machine name with your preferred name.

So let's start the setting up.

1. Define the host names by editing the /etc/hosts file:


madhawa@node0:~$ sudo nano /etc/hosts

and put the following. Note that I have removed the line 127.0.1.1 node0

127.0.0.1 localhost

10.16.32.10 node0
10.16.32.11 node1
10.16.32.12 node2

2. Install NFS server on the master node. I take the node0 as the master.

madhawa@node0:~$ sudo apt-get install nfs-kernel-server

3. Make a new directory that is to be shared among all the nodes. My shared folder is /mirror. In order to share the edit the /etc/exports file:

madhawa@node0:~$ mkdir /mirror
madhawa@node0:~$ sudo nano /etc/exports

And put the following line to set the permissions for the nfs. 

/mirror *(rw,sync)

4. Restart the server 

madhawa@node0:~$ sudo service nfs-kernel-server restart

5. Install the NFS client programs on the other machines.

madhawa@node1:~$ sudo apt-get install nfs-common

6. Mount the shared folder on the other nodes.

madhawa@node1:~$ sudo mount node0:/mirror /mirror
madhawa@node2:~$ sudo mount node0:/mirror /mirror

Note: This is the folder that is used to put the shared files required for the distributed execution. NFS enables remote mount and access to the files in another machine.




Setting up a small MPI Cluster using MPICH on Linux (Ubuntu 12.04)

In the next few posts I am going to explain my experience on how to setup a MPI cluster with 3 Linux machines. I referred several online resources, extracted information and arranged them in the posts. 

Specifications:
OS : Ubuntu 12.04 desktop or server Version
MPI : MPICH2
SSH : OpenSSH
Compiler : gcc 4.6.3
NFS

This post comes in 4 parts which describes the 4  main steps and they are as follows.

  1. Set up Network File System(NFS)
  2. Set up SSH password-less log in
  3. Install Compilers
  4. Install MPICH
So let's start!
(I'm putting the list of the references at the end of the post and I thank their authors for the great work)

Introduction to GPU computing

For those who are interested in GPU Computing and HPC, this is a good basement!

Show the world we want a phone worth keeping!


Worth spending few minutes on this! Watch the video and show your support here!

Dijsktra’s Algorithm in Java

Dijkstra’s shortest path algorithm is used to find the shortest path in a positive weighted graph from a given source to all the other nodes. There are 3 main steps of the algorithm.
 Initialization of single source – Inserting elements into required data structures and initialization
Extract Minimum – Extracting the node with the minimum value.
Generally the vertices in the graph can be stored 3 data structures: 1. Linear Array 2. Binary Heap/Priority Queue 3. Fibonacci Heap. Depending on the data structure we use the run time complexity of the algorithm differs.
Decrease key -  includes relaxation.

Dijkstra.java

Vertex.java

Edge.java



High Performance Computing Hardware

In high performance computing, it is important to know the parallel computing hardware options available for programmers when programming a computer cluster.

Distributed Memory Computing

A multiprocessor system in which each processor has its own memory. Since the the memory is distributed, message passing should be done among the individual nodes. Based on a set of processes. MPI is one such distributed memory programming platform.
Read more..

Shared Memory Computing

A multiprocessor system in which processors shares a global random access memory across the system. Based on a set of threads runs on each processor sharing the globally available memory. OpenMP is one such shared memory programming platform.

Partitioned Global Address Space (PGAS)

A combination of both shared and distributed memory programming architectures. It provides an abstraction of a globally shared memory to application level tasks. Furthermore it divides the global address space into sections called "partitions" so that individual threads can access their corresponding partition which is analogous to a distributed memory. 


Changing the username in Ubuntu/ Linux


  1. Log in using your username and password (username to be changed)
  2. Set a password for the root. Following will prompt for the new password.
    sudo passwd root
  3. Log out.exit
  4. Log in using the root account. Give the new password.
  5. If the user account of which the username is to be changed is still in use log out from that.
    pkill -KILL -u username
  6. Change the username and the home folder to the new user name.
    usermod -l -d /home/ -m
  7. Change the group name to the new group name that you want.
    groupmod -n
  8. Can check the group names using this.
    groups
  9. Better lock the root account.
  10. Log out from root and log in using the new username
  11. Done!