int _mpi_init (char *mpi_type) { int retval = SLURM_SUCCESS; char *full_type = NULL; int got_default = 0; slurm_mutex_lock( &context_lock ); if ( g_context ) goto done; if (mpi_type == NULL) { mpi_type = slurm_get_mpi_default(); got_default = 1; } if (mpi_type == NULL) { error("No MPI default set."); retval = SLURM_ERROR; goto done; } setenvf (NULL, "SLURM_MPI_TYPE", "%s", mpi_type); full_type = xmalloc(sizeof(char) * (strlen(mpi_type)+5)); sprintf(full_type,"mpi/%s",mpi_type); g_context = _slurm_mpi_context_create(full_type); xfree(full_type); if ( g_context == NULL ) { error( "cannot create a context for %s", mpi_type); retval = SLURM_ERROR; goto done; } if ( _slurm_mpi_get_ops( g_context ) == NULL ) { error( "cannot resolve plugin operations for %s", mpi_type); _slurm_mpi_context_destroy( g_context ); g_context = NULL; retval = SLURM_ERROR; } done: if(got_default) xfree(mpi_type); slurm_mutex_unlock( &context_lock ); return retval; }
int _mpi_init (char *mpi_type) { int retval = SLURM_SUCCESS; char *plugin_type = "mpi"; char *type = NULL; int got_default = 0; if (init_run && g_context) return retval; slurm_mutex_lock( &context_lock ); if ( g_context ) goto done; if (mpi_type == NULL) { mpi_type = slurm_get_mpi_default(); got_default = 1; } if (mpi_type == NULL) { error("No MPI default set."); retval = SLURM_ERROR; goto done; } if (!strcmp(mpi_type, "list")) { char *plugin_dir; plugrack_t mpi_rack; mpi_rack = plugrack_create(); if (!mpi_rack) { error("Unable to create a plugin manager"); exit(0); } plugrack_set_major_type(mpi_rack, "mpi"); plugin_dir = slurm_get_plugin_dir(); plugrack_read_dir(mpi_rack, plugin_dir); plugrack_print_all_plugin(mpi_rack); exit(0); } setenvf(NULL, "SLURM_MPI_TYPE", "%s", mpi_type); type = xstrdup_printf("mpi/%s", mpi_type); g_context = plugin_context_create( plugin_type, type, (void **)&ops, syms, sizeof(syms)); if (!g_context) { error("cannot create %s context for %s", plugin_type, type); retval = SLURM_ERROR; goto done; } init_run = true; done: xfree(type); if (got_default) xfree(mpi_type); slurm_mutex_unlock( &context_lock ); return retval; }