Merge pull request #7081 from msbrowning/pr/fixed-README
Removed text block from line 883 of README.
Этот коммит содержится в:
Коммит
65fd12feff
3
README
3
README
@ -874,9 +874,6 @@ Open MPI Extensions
|
||||
- affinity: Provides the OMPI_Affinity_str() a string indicating the
|
||||
resources which a process is bound. For more details, see its man
|
||||
page.
|
||||
- cr: Provides routines to access to checkpoint restart routines.
|
||||
See ompi/mpiext/cr/mpiext_cr_c.h for a listing of available
|
||||
functions.
|
||||
- cuda: When the library is compiled with CUDA-aware support, it
|
||||
provides two things. First, a macro
|
||||
MPIX_CUDA_AWARE_SUPPORT. Secondly, the function
|
||||
|
@ -1,21 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2004-2009 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2010-2012 Cisco Systems, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# This Makefile is not traversed during a normal "make all" in an OMPI
|
||||
# build. It *is* traversed during "make dist", however. So you can
|
||||
# put EXTRA_DIST targets in here.
|
||||
#
|
||||
# You can also use this as a convenience for building this MPI
|
||||
# extension (i.e., "make all" in this directory to invoke "make all"
|
||||
# in all the subdirectories).
|
||||
|
||||
SUBDIRS = c
|
@ -1,47 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
# University Research and Technology
|
||||
# Corporation. All rights reserved.
|
||||
# Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2018 Research Organization for Information Science
|
||||
# and Technology (RIST). All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# This file builds the C bindings for MPI extensions. It must be
|
||||
# present in all MPI extensions.
|
||||
|
||||
# We must set these #defines so that the inner OMPI MPI prototype
|
||||
# header files do the Right Thing.
|
||||
AM_CPPFLAGS = -DOMPI_PROFILE_LAYER=0 -DOMPI_COMPILING_FORTRAN_WRAPPERS=1
|
||||
|
||||
# Convenience libtool library that will be slurped up into libmpi.la.
|
||||
noinst_LTLIBRARIES = libmpiext_cr_c.la
|
||||
|
||||
# This is where the top-level header file (that is included in
|
||||
# <mpi-ext.h>) must be installed.
|
||||
ompidir = $(ompiincludedir)/mpiext
|
||||
|
||||
# This is the header file that is installed.
|
||||
ompi_HEADERS = mpiext_cr_c.h
|
||||
|
||||
# Sources for the convenience libtool library. Other than the one
|
||||
# header file, all source files in the extension have no file naming
|
||||
# conventions.
|
||||
libmpiext_cr_c_la_SOURCES = \
|
||||
$(ompi_HEADERS) \
|
||||
checkpoint.c \
|
||||
restart.c \
|
||||
migrate.c \
|
||||
inc_register_callback.c \
|
||||
quiesce_start.c \
|
||||
quiesce_end.c \
|
||||
quiesce_checkpoint.c \
|
||||
self_register_checkpoint.c \
|
||||
self_register_restart.c \
|
||||
self_register_continue.c
|
||||
libmpiext_cr_c_la_LDFLAGS = -module -avoid-version
|
@ -1,89 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "ompi/info/info.h"
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "orte/mca/snapc/snapc.h"
|
||||
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_Checkpoint";
|
||||
#define HANDLE_SIZE_MAX 256
|
||||
|
||||
int OMPI_CR_Checkpoint(char **handle, int *seq, MPI_Info *info)
|
||||
{
|
||||
int ret = MPI_SUCCESS;
|
||||
MPI_Comm comm = MPI_COMM_WORLD;
|
||||
orte_snapc_base_request_op_t *datum = NULL;
|
||||
int state = 0;
|
||||
int my_rank;
|
||||
|
||||
/* argument checking */
|
||||
if (MPI_PARAM_CHECK) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup the data structure for the operation
|
||||
*/
|
||||
datum = OBJ_NEW(orte_snapc_base_request_op_t);
|
||||
datum->event = ORTE_SNAPC_OP_CHECKPOINT;
|
||||
datum->is_active = true;
|
||||
|
||||
MPI_Comm_rank(comm, &my_rank);
|
||||
if( 0 == my_rank ) {
|
||||
datum->leader = OMPI_PROC_MY_NAME->vpid;
|
||||
} else {
|
||||
datum->leader = -1; /* Unknown from non-root ranks */
|
||||
}
|
||||
|
||||
/*
|
||||
* All processes must make this call before it can start
|
||||
*/
|
||||
MPI_Barrier(comm);
|
||||
|
||||
/*
|
||||
* Leader sends the request
|
||||
*/
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
ret = orte_snapc.request_op(datum);
|
||||
if( OMPI_SUCCESS != ret ) {
|
||||
OBJ_RELEASE(datum);
|
||||
OMPI_ERRHANDLER_INVOKE(comm, MPI_ERR_OTHER,
|
||||
FUNC_NAME);
|
||||
}
|
||||
OPAL_CR_EXIT_LIBRARY();
|
||||
|
||||
/*
|
||||
* Leader then sends out the commit message
|
||||
*/
|
||||
if( datum->leader == (int)OMPI_PROC_MY_NAME->vpid ) {
|
||||
*handle = strdup(datum->global_handle);
|
||||
*seq = datum->seq_num;
|
||||
state = 0;
|
||||
} else {
|
||||
*handle = (char*)malloc(sizeof(char)*HANDLE_SIZE_MAX);
|
||||
}
|
||||
|
||||
MPI_Bcast(&state, 1, MPI_INT, 0, comm);
|
||||
MPI_Bcast(seq, 1, MPI_INT, 0, comm);
|
||||
MPI_Bcast(*handle, HANDLE_SIZE_MAX, MPI_CHAR, 0, comm);
|
||||
|
||||
datum->is_active = false;
|
||||
OBJ_RELEASE(datum);
|
||||
|
||||
return ret;
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "opal/runtime/opal_cr.h"
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "ompi/errhandler/errhandler.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_INC_register_callback";
|
||||
|
||||
int OMPI_CR_INC_register_callback(OMPI_CR_INC_callback_event_t event,
|
||||
OMPI_CR_INC_callback_function function,
|
||||
OMPI_CR_INC_callback_function *prev_function)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if ( MPI_PARAM_CHECK ) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
|
||||
rc = opal_cr_user_inc_register_callback(event, function, prev_function);
|
||||
|
||||
OMPI_ERRHANDLER_RETURN(rc, MPI_COMM_WORLD, rc, FUNC_NAME);
|
||||
}
|
@ -1,122 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012-2018 Cisco Systems, Inc. All rights reserved
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "opal/util/string_copy.h"
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "ompi/info/info.h"
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "orte/mca/snapc/snapc.h"
|
||||
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_Migrate";
|
||||
|
||||
int OMPI_CR_Migrate(MPI_Comm comm, char *hostname, int rank, MPI_Info *info)
|
||||
{
|
||||
int ret = MPI_SUCCESS;
|
||||
orte_snapc_base_request_op_t *datum = NULL;
|
||||
int my_rank, my_size, i;
|
||||
char loc_hostname[MPI_MAX_PROCESSOR_NAME];
|
||||
int my_vpid;
|
||||
int info_flag;
|
||||
char info_value[6];
|
||||
int my_off_node = (int)false;
|
||||
|
||||
/* argument checking */
|
||||
if (MPI_PARAM_CHECK) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup the data structure for the operation
|
||||
*/
|
||||
datum = OBJ_NEW(orte_snapc_base_request_op_t);
|
||||
datum->event = ORTE_SNAPC_OP_MIGRATE;
|
||||
datum->is_active = true;
|
||||
|
||||
MPI_Comm_rank(comm, &my_rank);
|
||||
MPI_Comm_size(comm, &my_size);
|
||||
if( 0 == my_rank ) {
|
||||
datum->leader = OMPI_PROC_MY_NAME->vpid;
|
||||
} else {
|
||||
datum->leader = -1; /* Unknown from non-root ranks */
|
||||
}
|
||||
|
||||
/*
|
||||
* Gather all preferences to the root
|
||||
*/
|
||||
if( NULL == hostname ) {
|
||||
loc_hostname[0] = '\0';
|
||||
} else {
|
||||
opal_string_copy(loc_hostname, hostname, sizeof(loc_hostname));
|
||||
}
|
||||
my_vpid = (int) OMPI_PROC_MY_NAME->vpid;
|
||||
|
||||
if( 0 == my_rank ) {
|
||||
datum->mig_num = my_size;
|
||||
datum->mig_vpids = (int *) malloc(sizeof(int) * my_size);
|
||||
datum->mig_host_pref = (char (*)[OPAL_MAX_PROCESSOR_NAME]) malloc(sizeof(char) * my_size * MPI_MAX_PROCESSOR_NAME);
|
||||
datum->mig_vpid_pref = (int *) malloc(sizeof(int) * my_size);
|
||||
datum->mig_off_node = (int *) malloc(sizeof(int) * my_size);
|
||||
|
||||
for( i = 0; i < my_size; ++i ) {
|
||||
(datum->mig_vpids)[i] = 0;
|
||||
(datum->mig_host_pref)[i][0] = '\0';
|
||||
(datum->mig_vpid_pref)[i] = 0;
|
||||
(datum->mig_off_node)[i] = (int)false;
|
||||
}
|
||||
}
|
||||
|
||||
my_off_node = (int)false;
|
||||
if( NULL != info ) {
|
||||
MPI_Info_get(*info, "CR_OFF_NODE", 5, info_value, &info_flag);
|
||||
if( info_flag ) {
|
||||
if( 0 == strncmp(info_value, "true", strlen("true")) ) {
|
||||
my_off_node = (int)true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MPI_Gather(&my_vpid, 1, MPI_INT,
|
||||
(datum->mig_vpids), 1, MPI_INT, 0, comm);
|
||||
MPI_Gather(loc_hostname, MPI_MAX_PROCESSOR_NAME, MPI_CHAR,
|
||||
(datum->mig_host_pref), MPI_MAX_PROCESSOR_NAME, MPI_CHAR, 0, comm);
|
||||
MPI_Gather(&my_vpid, 1, MPI_INT,
|
||||
(datum->mig_vpid_pref), 1, MPI_INT, 0, comm);
|
||||
MPI_Gather(&my_off_node, 1, MPI_INT,
|
||||
(datum->mig_off_node), 1, MPI_INT, 0, comm);
|
||||
|
||||
/*
|
||||
* Leader sends the request
|
||||
*/
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
ret = orte_snapc.request_op(datum);
|
||||
if( OMPI_SUCCESS != ret ) {
|
||||
OMPI_ERRHANDLER_INVOKE(comm, MPI_ERR_OTHER,
|
||||
FUNC_NAME);
|
||||
}
|
||||
OPAL_CR_EXIT_LIBRARY();
|
||||
|
||||
datum->is_active = false;
|
||||
OBJ_RELEASE(datum);
|
||||
|
||||
/*
|
||||
* All processes must sync before leaving
|
||||
*/
|
||||
MPI_Barrier(comm);
|
||||
|
||||
return ret;
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*
|
||||
*/
|
||||
#include "opal/runtime/opal_cr.h"
|
||||
|
||||
/********************************
|
||||
* C/R Interfaces
|
||||
********************************/
|
||||
/*
|
||||
* Request a checkpoint
|
||||
*/
|
||||
OMPI_DECLSPEC int OMPI_CR_Checkpoint(char **handle, int *seq, MPI_Info *info);
|
||||
|
||||
/*
|
||||
* Request a restart
|
||||
*/
|
||||
OMPI_DECLSPEC int OMPI_CR_Restart(char *handle, int seq, MPI_Info *info);
|
||||
|
||||
|
||||
/********************************
|
||||
* Migration Interface
|
||||
********************************/
|
||||
/*
|
||||
* Request a migration
|
||||
*/
|
||||
OMPI_DECLSPEC int OMPI_CR_Migrate(MPI_Comm comm, char *hostname, int rank, MPI_Info *info);
|
||||
|
||||
|
||||
/********************************
|
||||
* INC Interfaces
|
||||
********************************/
|
||||
typedef opal_cr_user_inc_callback_event_t OMPI_CR_INC_callback_event_t;
|
||||
|
||||
typedef opal_cr_user_inc_callback_state_t OMPI_CR_INC_callback_state_t;
|
||||
|
||||
typedef int (*OMPI_CR_INC_callback_function)(OMPI_CR_INC_callback_event_t event,
|
||||
OMPI_CR_INC_callback_state_t state);
|
||||
|
||||
OMPI_DECLSPEC int OMPI_CR_INC_register_callback(OMPI_CR_INC_callback_event_t event,
|
||||
OMPI_CR_INC_callback_function function,
|
||||
OMPI_CR_INC_callback_function *prev_function);
|
||||
|
||||
|
||||
/********************************
|
||||
* SELF CRS Application Interfaces
|
||||
********************************/
|
||||
typedef int (*OMPI_CR_self_checkpoint_fn)(char **restart_cmd);
|
||||
typedef int (*OMPI_CR_self_restart_fn)(void);
|
||||
typedef int (*OMPI_CR_self_continue_fn)(void);
|
||||
|
||||
OMPI_DECLSPEC int OMPI_CR_self_register_checkpoint_callback(OMPI_CR_self_checkpoint_fn function);
|
||||
OMPI_DECLSPEC int OMPI_CR_self_register_restart_callback(OMPI_CR_self_restart_fn function);
|
||||
OMPI_DECLSPEC int OMPI_CR_self_register_continue_callback(OMPI_CR_self_continue_fn function);
|
||||
|
||||
|
||||
/********************************
|
||||
* Quiescence Interfaces
|
||||
********************************/
|
||||
/*
|
||||
* Start the Quiescent region.
|
||||
* Note: 'comm' required to be MPI_COMM_WORLD
|
||||
*/
|
||||
OMPI_DECLSPEC int OMPI_CR_Quiesce_start(MPI_Comm comm, MPI_Info *info);
|
||||
|
||||
/*
|
||||
* Request a checkpoint during a quiescent region
|
||||
* Note: 'comm' required to be MPI_COMM_WORLD
|
||||
*/
|
||||
OMPI_DECLSPEC int OMPI_CR_Quiesce_checkpoint(MPI_Comm comm, char **handle, int *seq, MPI_Info *info);
|
||||
|
||||
/*
|
||||
* End the Quiescent Region
|
||||
* Note: 'comm' required to be MPI_COMM_WORLD
|
||||
*/
|
||||
OMPI_DECLSPEC int OMPI_CR_Quiesce_end(MPI_Comm comm, MPI_Info *info);
|
@ -1,70 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "ompi/info/info.h"
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "orte/mca/snapc/snapc.h"
|
||||
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_Quiesce_checkpoint";
|
||||
|
||||
int OMPI_CR_Quiesce_checkpoint(MPI_Comm commP, char **handle, int *seq, MPI_Info *info)
|
||||
{
|
||||
int ret = MPI_SUCCESS;
|
||||
MPI_Comm comm = MPI_COMM_WORLD; /* Currently ignore provided comm */
|
||||
orte_snapc_base_request_op_t *datum = NULL;
|
||||
int my_rank;
|
||||
|
||||
/* argument checking */
|
||||
if (MPI_PARAM_CHECK) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup the data structure for the operation
|
||||
*/
|
||||
datum = OBJ_NEW(orte_snapc_base_request_op_t);
|
||||
datum->event = ORTE_SNAPC_OP_QUIESCE_CHECKPOINT;
|
||||
datum->is_active = true;
|
||||
|
||||
MPI_Comm_rank(comm, &my_rank);
|
||||
if( 0 == my_rank ) {
|
||||
datum->leader = OMPI_PROC_MY_NAME->vpid;
|
||||
} else {
|
||||
datum->leader = -1; /* Unknown from non-root ranks */
|
||||
}
|
||||
|
||||
/*
|
||||
* Since we are quiescent, then this is a local operation
|
||||
*/
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
ret = orte_snapc.request_op(datum);
|
||||
/*ret = ompi_crcp_base_quiesce_start(info);*/
|
||||
if( OMPI_SUCCESS != ret ) {
|
||||
OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_OTHER,
|
||||
FUNC_NAME);
|
||||
}
|
||||
OPAL_CR_EXIT_LIBRARY();
|
||||
|
||||
*handle = strdup(datum->global_handle);
|
||||
*seq = datum->seq_num;
|
||||
|
||||
datum->is_active = false;
|
||||
OBJ_RELEASE(datum);
|
||||
|
||||
return ret;
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "ompi/info/info.h"
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "orte/mca/snapc/snapc.h"
|
||||
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_Quiesce_end";
|
||||
|
||||
int OMPI_CR_Quiesce_end(MPI_Comm commP, MPI_Info *info)
|
||||
{
|
||||
int ret = MPI_SUCCESS;
|
||||
MPI_Comm comm = MPI_COMM_WORLD; /* Currently ignore provided comm */
|
||||
orte_snapc_base_request_op_t *datum = NULL;
|
||||
int my_rank;
|
||||
|
||||
/* argument checking */
|
||||
if (MPI_PARAM_CHECK) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup the data structure for the operation
|
||||
*/
|
||||
datum = OBJ_NEW(orte_snapc_base_request_op_t);
|
||||
datum->event = ORTE_SNAPC_OP_QUIESCE_END;
|
||||
datum->is_active = true;
|
||||
|
||||
MPI_Comm_rank(comm, &my_rank);
|
||||
if( 0 == my_rank ) {
|
||||
datum->leader = OMPI_PROC_MY_NAME->vpid;
|
||||
} else {
|
||||
datum->leader = -1; /* Unknown from non-root ranks */
|
||||
}
|
||||
|
||||
/*
|
||||
* Leader sends the request
|
||||
*/
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
ret = orte_snapc.request_op(datum);
|
||||
/*ret = ompi_crcp_base_quiesce_end(info);*/
|
||||
if( OMPI_SUCCESS != ret ) {
|
||||
OMPI_ERRHANDLER_INVOKE(comm, MPI_ERR_OTHER,
|
||||
FUNC_NAME);
|
||||
}
|
||||
OPAL_CR_EXIT_LIBRARY();
|
||||
|
||||
/*
|
||||
* All processes must make this call before it can complete
|
||||
*/
|
||||
MPI_Barrier(comm);
|
||||
|
||||
/*
|
||||
* (Old) info logic
|
||||
*/
|
||||
/*cur_datum.epoch = -1;*/
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,215 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2011 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2016-2017 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "ompi/info/info.h"
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "orte/mca/snapc/snapc.h"
|
||||
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_Quiesce_start";
|
||||
|
||||
int OMPI_CR_Quiesce_start(MPI_Comm commP, MPI_Info *info)
|
||||
{
|
||||
int ret = MPI_SUCCESS;
|
||||
MPI_Comm comm = MPI_COMM_WORLD; /* Currently ignore provided comm */
|
||||
orte_snapc_base_request_op_t *datum = NULL;
|
||||
int my_rank;
|
||||
|
||||
/* argument checking */
|
||||
if (MPI_PARAM_CHECK) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup the data structure for the operation
|
||||
*/
|
||||
datum = OBJ_NEW(orte_snapc_base_request_op_t);
|
||||
datum->event = ORTE_SNAPC_OP_QUIESCE_START;
|
||||
datum->is_active = true;
|
||||
|
||||
MPI_Comm_rank(comm, &my_rank);
|
||||
if( 0 == my_rank ) {
|
||||
datum->leader = OMPI_PROC_MY_NAME->vpid;
|
||||
} else {
|
||||
datum->leader = -1; /* Unknown from non-root ranks */
|
||||
}
|
||||
|
||||
/*
|
||||
* All processes must make this call before it can start
|
||||
*/
|
||||
MPI_Barrier(comm);
|
||||
|
||||
/*
|
||||
* Leader sends the request
|
||||
*/
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
ret = orte_snapc.request_op(datum);
|
||||
/*ret = ompi_crcp_base_quiesce_start(info);*/
|
||||
if( OMPI_SUCCESS != ret ) {
|
||||
OBJ_RELEASE(datum);
|
||||
OMPI_ERRHANDLER_INVOKE(comm, MPI_ERR_OTHER,
|
||||
FUNC_NAME);
|
||||
}
|
||||
|
||||
OPAL_CR_EXIT_LIBRARY();
|
||||
|
||||
datum->is_active = false;
|
||||
OBJ_RELEASE(datum);
|
||||
|
||||
/*
|
||||
* (Old) info logic
|
||||
*/
|
||||
/*opal_info_set((opal_info_t*)*info, "target", cur_datum.target_dir);*/
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****************
|
||||
* Local Functions
|
||||
******************/
|
||||
#if 0
|
||||
/* Info keys:
|
||||
*
|
||||
* - crs:
|
||||
* none = (Default) No CRS Service
|
||||
* default = Whatever CRS service MPI chooses
|
||||
* blcr = BLCR
|
||||
* self = app level callbacks
|
||||
*
|
||||
* - cmdline:
|
||||
* Command line to restart the process with.
|
||||
* If empty, the user must manually enter it
|
||||
*
|
||||
* - target:
|
||||
* Absolute path to the target directory.
|
||||
*
|
||||
* - handle:
|
||||
* first = Earliest checkpoint directory available
|
||||
* last = Most recent checkpoint directory available
|
||||
* [global:local] = handle provided by the MPI library
|
||||
*
|
||||
* - restarting:
|
||||
* 0 = not restarting
|
||||
* 1 = restarting
|
||||
*
|
||||
* - checkpointing:
|
||||
* 0 = No need to prepare for checkpointing
|
||||
* 1 = MPI should prepare for checkpointing
|
||||
*
|
||||
* - inflight:
|
||||
* default = message
|
||||
* message = Drain inflight messages at the message level
|
||||
* network = Drain inflight messages at the network level (if possible)
|
||||
*
|
||||
* - user_space_mem:
|
||||
* 0 = Memory does not need to be managed
|
||||
* 1 = Memory must be in user space (i.e., not on network card
|
||||
*
|
||||
*/
|
||||
static int extract_info_into_datum(opal_info_t *info, orte_snapc_base_quiesce_t *datum)
|
||||
{
|
||||
int info_flag = false;
|
||||
int max_crs_len = 32;
|
||||
bool info_bool = false;
|
||||
char *info_char = NULL;
|
||||
|
||||
info_char = (char *) malloc(sizeof(char) * (OPAL_PATH_MAX+1));
|
||||
|
||||
/*
|
||||
* Key: crs
|
||||
*/
|
||||
opal_info_get(info, "crs", max_crs_len, info_char, &info_flag);
|
||||
if( info_flag) {
|
||||
datum->crs_name = strdup(info_char);
|
||||
}
|
||||
|
||||
/*
|
||||
* Key: cmdline
|
||||
*/
|
||||
opal_info_get(info, "cmdline", OPAL_PATH_MAX, info_char, &info_flag);
|
||||
if( info_flag) {
|
||||
datum->cmdline = strdup(info_char);
|
||||
}
|
||||
|
||||
/*
|
||||
* Key: handle
|
||||
*/
|
||||
opal_info_get(info, "handle", OPAL_PATH_MAX, info_char, &info_flag);
|
||||
if( info_flag) {
|
||||
datum->handle = strdup(info_char);
|
||||
}
|
||||
|
||||
/*
|
||||
* Key: target
|
||||
*/
|
||||
opal_info_get(info, "target", OPAL_PATH_MAX, info_char, &info_flag);
|
||||
if( info_flag) {
|
||||
datum->target_dir = strdup(info_char);
|
||||
}
|
||||
|
||||
/*
|
||||
* Key: restarting
|
||||
*/
|
||||
opal_info_get_bool(info, "restarting", &info_bool, &info_flag);
|
||||
if( info_flag ) {
|
||||
datum->restarting = info_bool;
|
||||
} else {
|
||||
datum->restarting = false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Key: checkpointing
|
||||
*/
|
||||
opal_info_get_bool(info, "checkpointing", &info_bool, &info_flag);
|
||||
if( info_flag ) {
|
||||
datum->checkpointing = info_bool;
|
||||
} else {
|
||||
datum->checkpointing = false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Display all values
|
||||
*/
|
||||
OPAL_OUTPUT_VERBOSE((3, mca_crcp_bkmrk_component.super.output_handle,
|
||||
"crcp:bkmrk: %s extract_info: Info('crs' = '%s')",
|
||||
OMPI_NAME_PRINT(OMPI_PROC_MY_NAME),
|
||||
(NULL == datum->crs_name ? "Default (none)" : datum->crs_name)));
|
||||
OPAL_OUTPUT_VERBOSE((3, mca_crcp_bkmrk_component.super.output_handle,
|
||||
"crcp:bkmrk: %s extract_info: Info('cmdline' = '%s')",
|
||||
OMPI_NAME_PRINT(OMPI_PROC_MY_NAME),
|
||||
(NULL == datum->cmdline ? "Default ()" : datum->cmdline)));
|
||||
OPAL_OUTPUT_VERBOSE((3, mca_crcp_bkmrk_component.super.output_handle,
|
||||
"crcp:bkmrk: %s extract_info: Info('checkpointing' = '%c')",
|
||||
OMPI_NAME_PRINT(OMPI_PROC_MY_NAME),
|
||||
(datum->checkpointing ? 'T' : 'F')));
|
||||
OPAL_OUTPUT_VERBOSE((3, mca_crcp_bkmrk_component.super.output_handle,
|
||||
"crcp:bkmrk: %s extract_info: Info('restarting' = '%c')",
|
||||
OMPI_NAME_PRINT(OMPI_PROC_MY_NAME),
|
||||
(datum->restarting ? 'T' : 'F')));
|
||||
|
||||
if( NULL != info_char ) {
|
||||
free(info_char);
|
||||
info_char = NULL;
|
||||
}
|
||||
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
#endif
|
@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "ompi/info/info.h"
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "orte/mca/snapc/snapc.h"
|
||||
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_Restart";
|
||||
|
||||
int OMPI_CR_Restart(char *handle, int seq, MPI_Info *info)
|
||||
{
|
||||
int ret = MPI_SUCCESS;
|
||||
MPI_Comm comm = MPI_COMM_WORLD;
|
||||
orte_snapc_base_request_op_t *datum = NULL;
|
||||
|
||||
/* argument checking */
|
||||
if (MPI_PARAM_CHECK) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup the data structure for the operation
|
||||
*/
|
||||
datum = OBJ_NEW(orte_snapc_base_request_op_t);
|
||||
datum->event = ORTE_SNAPC_OP_RESTART;
|
||||
datum->is_active = true;
|
||||
|
||||
/*
|
||||
* Restart is not collective, so the caller is the leader
|
||||
*/
|
||||
datum->leader = OMPI_PROC_MY_NAME->vpid;
|
||||
datum->seq_num = seq;
|
||||
datum->global_handle = strdup(handle);
|
||||
|
||||
/*
|
||||
* Leader sends the request
|
||||
*/
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
ret = orte_snapc.request_op(datum);
|
||||
if( OMPI_SUCCESS != ret ) {
|
||||
OMPI_ERRHANDLER_INVOKE(comm, MPI_ERR_OTHER,
|
||||
FUNC_NAME);
|
||||
}
|
||||
OPAL_CR_EXIT_LIBRARY();
|
||||
|
||||
datum->is_active = false;
|
||||
OBJ_RELEASE(datum);
|
||||
|
||||
/********** If successful, should never reach this point (JJH) ******/
|
||||
|
||||
return ret;
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "opal/runtime/opal_cr.h"
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "ompi/errhandler/errhandler.h"
|
||||
#include "opal/mca/crs/crs.h"
|
||||
#include "opal/mca/crs/base/base.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_self_register_checkpoint_callback";
|
||||
|
||||
int OMPI_CR_self_register_checkpoint_callback(OMPI_CR_self_checkpoint_fn function)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if ( MPI_PARAM_CHECK ) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
|
||||
rc = opal_crs_base_self_register_checkpoint_callback(function);
|
||||
|
||||
OMPI_ERRHANDLER_RETURN(rc, MPI_COMM_WORLD, rc, FUNC_NAME);
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "opal/runtime/opal_cr.h"
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "ompi/errhandler/errhandler.h"
|
||||
#include "opal/mca/crs/crs.h"
|
||||
#include "opal/mca/crs/base/base.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_self_register_continue_callback";
|
||||
|
||||
int OMPI_CR_self_register_continue_callback(OMPI_CR_self_continue_fn function)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if ( MPI_PARAM_CHECK ) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
|
||||
rc = opal_crs_base_self_register_continue_callback(function);
|
||||
|
||||
OMPI_ERRHANDLER_RETURN(rc, MPI_COMM_WORLD, rc, FUNC_NAME);
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2012 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
#include "ompi_config.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ompi/mpi/c/bindings.h"
|
||||
#include "opal/runtime/opal_cr.h"
|
||||
#include "ompi/mpiext/cr/c/mpiext_cr_c.h"
|
||||
|
||||
#include "ompi/runtime/params.h"
|
||||
#include "ompi/communicator/communicator.h"
|
||||
#include "ompi/errhandler/errhandler.h"
|
||||
#include "opal/mca/crs/crs.h"
|
||||
#include "opal/mca/crs/base/base.h"
|
||||
|
||||
static const char FUNC_NAME[] = "OMPI_CR_self_register_restart_callback";
|
||||
|
||||
int OMPI_CR_self_register_restart_callback(OMPI_CR_self_restart_fn function)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if ( MPI_PARAM_CHECK ) {
|
||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||
}
|
||||
|
||||
OPAL_CR_ENTER_LIBRARY();
|
||||
|
||||
rc = opal_crs_base_self_register_restart_callback(function);
|
||||
|
||||
OMPI_ERRHANDLER_RETURN(rc, MPI_COMM_WORLD, rc, FUNC_NAME);
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# Copyright (c) 2004-2010 The Trustees of Indiana University.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2012-2015 Cisco Systems, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# OMPI_MPIEXT_cr_CONFIG([action-if-found], [action-if-not-found])
|
||||
# -----------------------------------------------------------
|
||||
AC_DEFUN([OMPI_MPIEXT_cr_CONFIG],[
|
||||
AC_CONFIG_FILES([ompi/mpiext/cr/Makefile])
|
||||
AC_CONFIG_FILES([ompi/mpiext/cr/c/Makefile])
|
||||
|
||||
OPAL_VAR_SCOPE_PUSH([ompi_mpi_ext_cr_happy])
|
||||
|
||||
# If we don't want FT, don't compile this extention
|
||||
AS_IF([test "$ENABLE_cr" = "1" || \
|
||||
test "$ENABLE_EXT_ALL" = "1"],
|
||||
[ompi_mpi_ext_cr_happy=1],
|
||||
[ompi_mpi_ext_cr_happy=0])
|
||||
|
||||
AS_IF([test "$ompi_mpi_ext_cr_happy" = "1" && \
|
||||
test "$opal_want_ft_cr" = "1"],
|
||||
[$1],
|
||||
[ # Error if the user specifically asked for this extension,
|
||||
# but we can't build it.
|
||||
AS_IF([test "$ENABLE_cr" = "1"],
|
||||
[AC_MSG_WARN([Requested "cr" MPI extension, but cannot build it])
|
||||
AC_MSG_WARN([because fault tolerance is not enabled.])
|
||||
AC_MSG_WARN([Try again with --enable-ft])
|
||||
AC_MSG_ERROR([Cannot continue])])
|
||||
$2])
|
||||
|
||||
OPAL_VAR_SCOPE_POP
|
||||
])
|
Загрузка…
Ссылка в новой задаче
Block a user