Hi,
My version of OpenMPI is 1.5.3.I have attached a simple toy code. Which is 
actually modification of example given on the web 
http://osl.iu.edu/research/ft/ompi-cr/examples.php .Mainly, i introduced some 
communication between processes and every process writes its separate 
checkpoint file.Here is my command line for running the job.                    
    >>    mpirun -np 48 -npernode 6 -bind-to-core -bycore -am ft-enable-cr 
--mca crs_self_prefix my_personal ./SELF_CR 5000
Also i have attached another file containing my MCA options from 'ompi_info'.
In this toy-code, problem is not too severe, so i used 48 or even 96 processes 
and many checkpoints to make problem appear. But i my actual code, perhaps due 
to more MPI calls, sometimes problem occur even within one node with only few 
(2-5) processes as well.
Hope to hear from you.Kind regards,Faisal Shahzad



> Date: Wed, 31 Aug 2011 11:35:55 -0400
> From: jjhur...@open-mpi.org
> To: us...@open-mpi.org
> Subject: Re: [OMPI users] Question regarding SELF-checkpointing
> 
> That seems like a bug to me.
> 
> What version of Open MPI are you using? How have you setup the C/R
> functionality (what MCA options do you have set, what command line
> options are you using)? Can you send a small reproducing application
> that we can test against?
> 
> That should help us focus in on the problem a bit.
> 
> -- Josh
> 
> On Wed, Aug 31, 2011 at 6:36 AM, Faisal Shahzad <itsfa...@hotmail.com> wrote:
> > Dear Group,
> > I have a mpi-program in which every process is communicating with its
> > neighbors. When SELF-checkpointing, every process writes to a separate file.
> > Problem is that sometimes after making a checkpoint, program does not
> > continue again. Having more number of processes makes this problem severe.
> > With just 1 process (no communication), SEFL-checkpointing works normally
> > with no problem.
> > I have tried different '--mca btl' parameters (openib,tcp,sm,self), but
> > problem persists.
> > I would very much appreciate your support regarding it.
> > Kind regards,
> > Faisal
> > _______________________________________________
> > users mailing list
> > us...@open-mpi.org
> > http://www.open-mpi.org/mailman/listinfo.cgi/users
> >
> 
> 
> 
> -- 
> Joshua Hursey
> Postdoctoral Research Associate
> Oak Ridge National Laboratory
> http://users.nccs.gov/~jjhursey
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users

                                          
#include <mpi.h>
#include <signal.h>
#include <string.h>

#include <stdio.h>
#include <stdlib.h>

#define LIMIT 50

/************************
 * Function Declarations
 ************************/
void signal_handler(int sig);

/* Default OPAL crs self callback functions */
int opal_crs_self_user_checkpoint(char **restart_cmd);
int opal_crs_self_user_continue(void);
int opal_crs_self_user_restart(void);

/* OPAL crs self callback functions */
int my_personal_checkpoint(char **restart_cmd);
int my_personal_continue(void);
int my_personal_restart(void);

/*******************
 * Global Variables and arrays
 *******************/
int myrank, numprocs;
double *a, *b, *c, *d;
int am_done = 1;
const int N=1000000;		// Defines size of arrays


int inr_loop_counter  = 0;
int out_loop_counter  = 0;
int current_step = 0;

char ckpt_file[128];

char restart_path[128] = "my-restart-path../SELF_CR";

int main(int argc, char** argv){
    	MPI_Init(&argc, &argv);
	int input_time;

	if( argc != 2 ) {
		input_time = 200;
        }
	else{ 
		input_time = atoi(argv[1]);
	}


	/* So we can exit cleanly */
	signal(SIGINT,  signal_handler);
	signal(SIGTERM, signal_handler);
// 	printf("Received Signal \n");

	MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
	MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
	MPI_Status status[4];
	MPI_Request request[4];
	

	a = (double *) malloc( N*sizeof(double) );
	b = (double *) malloc( N*sizeof(double) );
	c = (double *) malloc( N*sizeof(double) );
	d = (double *) malloc( N*sizeof(double) );
	
	int i=0;
	for(i=0; i<N ; ++i)
	{
		a[i] = 1.;
		b[i] = 2.;
		c[i] = 3.;
		d[i] = 4.;
	}

	// Neighbor's rank calculation
	int my_neigh_right, my_neigh_left;

	my_neigh_right = myrank+1;
	my_neigh_left = myrank-1;
	
	if(myrank==numprocs-1)			// for extreme last process
		my_neigh_right = 0;
	if(myrank==0)				// for first process
		my_neigh_left = numprocs-1;
	
	if(myrank==0)
		printf("Loop starting...\n");
	
// 	==========================================================
// 	======================KERNEL LOOP=========================   /  
	for( ; out_loop_counter < input_time ; ++out_loop_counter){
		if(myrank==0 && out_loop_counter%50==0){
			printf("Outer loop counter : %d\n", out_loop_counter);
		}

		for(inr_loop_counter = 0; inr_loop_counter < N ; ++inr_loop_counter)
		{
			a[inr_loop_counter] = b[inr_loop_counter]+c[inr_loop_counter]*d[inr_loop_counter];  // Some dummy calculation
			
		}
		
		// communication between neighboring processes
		
		MPI_Irecv(&b[0],10000, MPI_DOUBLE, my_neigh_left, 0, MPI_COMM_WORLD, &request[0]);
		MPI_Isend(&a[0],10000, MPI_DOUBLE, my_neigh_right, 0, MPI_COMM_WORLD, &request[1]);

		MPI_Isend(&c[0],10000, MPI_DOUBLE, my_neigh_left, 1, MPI_COMM_WORLD, &request[2]);
		MPI_Irecv(&d[0],10000, MPI_DOUBLE, my_neigh_right, 1, MPI_COMM_WORLD, &request[3]);
		MPI_Waitall(4, request, status);
		MPI_Barrier(MPI_COMM_WORLD);
		
	}
	

	free(a);free(b);free(c);free(d);
	MPI_Finalize();
	
	return 0;
}


void signal_handler(int sig) {
	printf("Received Signal %d\n", sig);
	am_done = 0;
}

/* OPAL crs self callbacks for checkpoint */
int opal_crs_self_user_checkpoint(char **restart_cmd) {
	printf("opal_crs_self_user_checkpoint callback...\n");
	my_personal_checkpoint(restart_cmd);
	return 0;
}

int opal_crs_self_user_continue(void) {
	printf("opal_crs_self_user_continue callback...\n");
	my_personal_continue();
	return 0;
}

int opal_crs_self_user_restart(void) {
	printf("opal_crs_self_user_restart callback...\n");
	my_personal_restart();
	return 0;
}

/* OPAL crs self callback for checkpoint */
int my_personal_checkpoint(char **restart_cmd) {
	FILE *fp;

	*restart_cmd = NULL;

	printf("my_personal_checkpoint callback...\n");
	
	strcpy(ckpt_file,"CP_file_");
	char temp_char[64];
	sprintf(temp_char, "%d", myrank);
	strcat(temp_char, ".ckpt");
	strcpy(ckpt_file, strcat(ckpt_file, temp_char));

	
	
	/*
	* Open our checkpoint file
	*/

	if( NULL == (fp = fopen(ckpt_file, "w")) ) {
	    fprintf(stderr, "Error: Unable to open file (%s)\n", ckpt_file);
	    return 0;
	}
	
	/*
	* Save the process state
	*/
	int i=0;
	for(i = 0; i< N ; ++i){
		fprintf(fp, "%lf\n", a[i]);
	}
	i =0;
	for(i = 0; i< N ; ++i){
		fprintf(fp, "%lf\n", b[i]);
	}
	i =0;
	/*
	* Close the checkpoint file
	*/
	fclose(fp);

	/*
	* Figure out the restart command
	*/
	asprintf(restart_cmd, "%s", strdup(restart_path));
	printf("my_personal_checkpoint callback finished...: %d\n",myrank);
	return 0;
}

int my_personal_continue() {
	printf("my_personal_continue callback...\n");
	/* Don't need to do anything here since we are in the
	*  state that we want to be in already.
	*/
	return 0;
}

int my_personal_restart() {

	printf("my_personal_restart callback...\n");
	
	return 0;
}
C bindings: yes
            C++ bindings: yes
      Fortran77 bindings: yes (all)
      Fortran90 bindings: yes
 Fortran90 bindings size: small
              C compiler: icc
     C compiler absolute: /apps/intel/Compiler/11.1/075/bin/intel64/icc
  C compiler family name: INTEL
      C compiler version: 1110.20101201
            C++ compiler: icpc
   C++ compiler absolute: /apps/intel/Compiler/11.1/075/bin/intel64/icpc
      Fortran77 compiler: ifort
  Fortran77 compiler abs: /apps/intel/Compiler/11.1/075/bin/intel64/ifort
      Fortran90 compiler: ifort
  Fortran90 compiler abs: /apps/intel/Compiler/11.1/075/bin/intel64/ifort
             C profiling: yes
           C++ profiling: yes
     Fortran77 profiling: yes
     Fortran90 profiling: yes
          C++ exceptions: no
          Thread support: posix (mpi: yes, progress: no)
           Sparse Groups: no
  Internal debug support: no
  MPI interface warnings: no
     MPI parameter check: runtime
Memory profiling support: no
Memory debugging support: no
         libltdl support: yes
   Heterogeneous support: no
 mpirun default --prefix: no
         MPI I/O support: yes
       MPI_WTIME support: gettimeofday
     Symbol vis. support: yes
          MPI extensions: affinity example
   FT Checkpoint support: yes (checkpoint thread: yes)
  MPI_MAX_PROCESSOR_NAME: 256
    MPI_MAX_ERROR_STRING: 256
     MPI_MAX_OBJECT_NAME: 64
        MPI_MAX_INFO_KEY: 36
        MPI_MAX_INFO_VAL: 256
       MPI_MAX_PORT_NAME: 1024
  MPI_MAX_DATAREP_STRING: 128
           MCA backtrace: execinfo (MCA v2.0, API v2.0, Component v1.5.3)
              MCA memory: linux (MCA v2.0, API v2.0, Component v1.5.3)
           MCA paffinity: hwloc (MCA v2.0, API v2.0, Component v1.5.3)
               MCA carto: auto_detect (MCA v2.0, API v2.0, Component v1.5.3)
               MCA carto: file (MCA v2.0, API v2.0, Component v1.5.3)
           MCA maffinity: first_use (MCA v2.0, API v2.0, Component v1.5.3)
               MCA timer: linux (MCA v2.0, API v2.0, Component v1.5.3)
         MCA installdirs: env (MCA v2.0, API v2.0, Component v1.5.3)
         MCA installdirs: config (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA crs: none (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA dpm: orte (MCA v2.0, API v2.0, Component v1.5.3)
              MCA pubsub: orte (MCA v2.0, API v2.0, Component v1.5.3)
           MCA allocator: basic (MCA v2.0, API v2.0, Component v1.5.3)
           MCA allocator: bucket (MCA v2.0, API v2.0, Component v1.5.3)
                MCA coll: basic (MCA v2.0, API v2.0, Component v1.5.3)
                MCA coll: hierarch (MCA v2.0, API v2.0, Component v1.5.3)
                MCA coll: inter (MCA v2.0, API v2.0, Component v1.5.3)
                MCA coll: self (MCA v2.0, API v2.0, Component v1.5.3)
                MCA coll: sm (MCA v2.0, API v2.0, Component v1.5.3)
                MCA coll: sync (MCA v2.0, API v2.0, Component v1.5.3)
                MCA coll: tuned (MCA v2.0, API v2.0, Component v1.5.3)
                  MCA io: romio (MCA v2.0, API v2.0, Component v1.5.3)
               MCA mpool: fake (MCA v2.0, API v2.0, Component v1.5.3)
               MCA mpool: rdma (MCA v2.0, API v2.0, Component v1.5.3)
               MCA mpool: sm (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA pml: bfo (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA pml: crcpw (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA pml: csum (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA pml: ob1 (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA pml: v (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA bml: r2 (MCA v2.0, API v2.0, Component v1.5.3)
              MCA rcache: vma (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA btl: ofud (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA btl: openib (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA btl: self (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA btl: sm (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA btl: tcp (MCA v2.0, API v2.0, Component v1.5.3)
                MCA topo: unity (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA osc: pt2pt (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA osc: rdma (MCA v2.0, API v2.0, Component v1.5.3)
                MCA crcp: bkmrk (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA iof: hnp (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA iof: orted (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA iof: tool (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA oob: tcp (MCA v2.0, API v2.0, Component v1.5.3)
                MCA odls: default (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ras: cm (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ras: slurm (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ras: tm (MCA v2.0, API v2.0, Component v1.5.3)
               MCA rmaps: load_balance (MCA v2.0, API v2.0, Component v1.5.3)
               MCA rmaps: rank_file (MCA v2.0, API v2.0, Component v1.5.3)
               MCA rmaps: resilient (MCA v2.0, API v2.0, Component v1.5.3)
               MCA rmaps: round_robin (MCA v2.0, API v2.0, Component v1.5.3)
               MCA rmaps: seq (MCA v2.0, API v2.0, Component v1.5.3)
               MCA rmaps: topo (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA rml: ftrm (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA rml: oob (MCA v2.0, API v2.0, Component v1.5.3)
              MCA routed: binomial (MCA v2.0, API v2.0, Component v1.5.3)
              MCA routed: cm (MCA v2.0, API v2.0, Component v1.5.3)
              MCA routed: direct (MCA v2.0, API v2.0, Component v1.5.3)
              MCA routed: linear (MCA v2.0, API v2.0, Component v1.5.3)
              MCA routed: radix (MCA v2.0, API v2.0, Component v1.5.3)
              MCA routed: slave (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA plm: rsh (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA plm: rshd (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA plm: slurm (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA plm: tm (MCA v2.0, API v2.0, Component v1.5.3)
               MCA snapc: full (MCA v2.0, API v2.0, Component v1.5.3)
               MCA filem: rsh (MCA v2.0, API v2.0, Component v1.5.3)
              MCA errmgr: default (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ess: env (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ess: hnp (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ess: singleton (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ess: slave (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ess: slurm (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ess: slurmd (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ess: tm (MCA v2.0, API v2.0, Component v1.5.3)
                 MCA ess: tool (MCA v2.0, API v2.0, Component v1.5.3)
             MCA grpcomm: bad (MCA v2.0, API v2.0, Component v1.5.3)
             MCA grpcomm: basic (MCA v2.0, API v2.0, Component v1.5.3)
             MCA grpcomm: hier (MCA v2.0, API v2.0, Component v1.5.3)
            MCA notifier: command (MCA v2.0, API v1.0, Component v1.5.3)
            MCA notifier: syslog (MCA v2.0, API v1.0, Component v1.5.3)

Reply via email to