static int _setup_srun_socket(const mpi_plugin_client_info_t *job) { if (net_stream_listen(&tree_sock, (short int *)&tree_info.pmi_port) < 0) { error("mpi/pmi2: Failed to create tree socket"); return SLURM_ERROR; } debug("mpi/pmi2: srun pmi port: %hu", tree_info.pmi_port); return SLURM_SUCCESS; }
extern gmpi_state_t * gmpi_thr_create(const mpi_plugin_client_info_t *job, char ***env) { uint16_t port; pthread_attr_t attr; gmpi_state_t *st = NULL; st = gmpi_state_create(job); /* * It is possible for one to modify the mpirun command in * MPICH-GM distribution so that it calls srun, instead of * rsh, for remote process invocations. In that case, we * should not override envs nor open the master port. */ if (getenv("GMPI_PORT")) return st; if (net_stream_listen (&st->fd, &port) < 0) { error ("Unable to create GMPI listen port: %m"); gmpi_state_destroy(st); return NULL; } /* * Accept in a separate thread. */ slurm_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (pthread_create(&st->tid, &attr, &_gmpi_thr, (void *)st)) { slurm_attr_destroy(&attr); gmpi_state_destroy(st); return NULL; } slurm_attr_destroy(&attr); env_array_overwrite_fmt(env, "GMPI_PORT", "%hu", port); env_array_overwrite_fmt(env, "GMPI_MAGIC", "%u", job->jobid); env_array_overwrite_fmt(env, "GMPI_NP", "%d", job->step_layout->task_cnt); env_array_overwrite_fmt(env, "GMPI_SHMEM", "1"); /* FIXME for multi-board config. */ env_array_overwrite_fmt(env, "GMPI_BOARD", "-1"); /* For new MX version */ env_array_overwrite_fmt(env, "MXMPI_PORT", "%hu", port); env_array_overwrite_fmt(env, "MXMPI_MAGIC", "%u", job->jobid); env_array_overwrite_fmt(env, "MXMPI_NP", "%d", job->step_layout->task_cnt); /* FIXME for multi-board config. */ env_array_overwrite_fmt(env, "MXMPI_BOARD", "-1"); /* for MACOSX to override default malloc */ env_array_overwrite_fmt(env, "DYLD_FORCE_FLAT_NAMESPACE", "1"); debug("Started GMPI master thread (%lu)", (unsigned long) st->tid); return st; }