======
About
======
Archive for research into noise-resistant algorithms.

============
Contributors
============
Andrew Siegel
Stephen Siegel
Adam Hammouda

===================
Useful Make Targets
===================
all-2d:
	Builds 2D heat-diffusion code both with and without synthetic noise:
	Output:
		-- 2dnb  - diffusion code, non-blocking communication, "classic algo."
		-- 2dnbni - ditto, without synthetic noise 
		-- 2djit - diffusion code, non-blocking communication, "resilient algo."
		-- 2djitni - ditto, without synthetic noise 

paper: 
       Calls about and builds and runs the set of experiments used for the
       accompanying paper.

===================
Compiler directives
===================
 
-DDEBUG          Enables a number of introspecting print statements
-NOINTERRUPTS    Turns off the synthetic noise generated by the iutils lib

-----------------------
- 2D Config File Format
-----------------------
bs = 0			    /* Batch step or id.  Can be useful for identifying output 
     			       for a series of tests. */
nx = 10			    /* Number of discrete points including endpoints */
ny = 10			    /* Ditto for dimension 2. Only for 2D code */
k = 0.3  		    /* D*dt/(dx*dx) */
nsteps = 2		    /* number of time steps */
wstep = 2		    /* Write to stddout algorithm state this many time steps */


===========================
Contributing To The Library
===========================
... has 3 steps for this repo, because the interrupter has its own tracking environment
So now, you'll need to run:
$ git clone <remote-repo>
$ git submodule init
$ git submodule update

If changes are later committed to the submodule by someone else and pushed to the 
shared remote,
pulling now has 2 steps:
Type:
$ git pull
$ git submodule update

For your own local changes to a submodule, your commits should follow 3 steps if 
you want to avoid headaches, and keep your local changes in the submodule synced 
up with the superproject.  If you don't do things in the following manner for 
some reason, be sure to read up on the gotchas that you will encounter: 
(http://git-scm.com/book/en/Git-Tools-Submodules)

    $ cd submodule-file
    # Make some changes
1.) $ git commit -m "Made changes to my submodule" 
2.) $ git push origin master
    $ cd ..
3.) $ git submodule update 
    $ git commit -m "Submodule was updated"

=============
Chimera Notes
=============
8 nodes have 128GB of memory
56 nodes have 64GB
48 cores/node

Primary data storage shouldn't exceed this on a per node basis
Ex:
*Data arrays for t and t-1 are stored for each execution of diffusion code.
*We store  nx elements for t and t-1, each element being a float where s
 sizeof(float) = 4 you need to ensure that

(nx/core)*(2 data arrays)*(4 bytes)*(X cores) < 64GB (for most cases, but at least)
      	   	      		 	      < 128GB

-----------------------------
- Interacting with git remote
-----------------------------
Need to activate your ssh-agent every time on chimera
$ exec ssh-agent bash
$ ssh-add ~/.ssh/id_rsa