extern int pmi_kvs_put(kvs_comm_set_t *kvs_set_ptr) { int i, usec_timer; struct kvs_comm *kvs_ptr; static int pmi_kvs_no_dup_keys_set = 0; DEF_TIMERS; if (pmi_kvs_no_dup_keys_set == 0) { /* In MPI implementations, there will be no duplicate * keys put into the KVS usually. Hence the checking * for duplicate keys can be skipped. However if the * user wants to have duplicate keys he must set * this env variable. If a duplicate key is found * the previous value will be discarded. */ char *env = getenv("SLURM_PMI_KVS_DUP_KEYS"); if (env) pmi_kvs_no_dup_keys = 0; pmi_kvs_no_dup_keys_set = 1; } /* Merge new data with old. * NOTE: We just move pointers rather than copy data where * possible for improved performance */ START_TIMER; slurm_mutex_lock(&kvs_mutex); for (i=0; i<kvs_set_ptr->kvs_comm_recs; i++) { kvs_ptr = _find_kvs_by_name(kvs_set_ptr-> kvs_comm_ptr[i]->kvs_name); if (kvs_ptr) { _merge_named_kvs(kvs_ptr, kvs_set_ptr->kvs_comm_ptr[i]); } else { _move_kvs(kvs_set_ptr->kvs_comm_ptr[i]); kvs_set_ptr-> kvs_comm_ptr[i] = NULL; } } slurm_free_kvs_comm_set(kvs_set_ptr); _print_kvs(); kvs_updated = 1; slurm_mutex_unlock(&kvs_mutex); END_TIMER; usec_timer = DELTA_TIMER; min_time_kvs_put = MIN(min_time_kvs_put, usec_timer); max_time_kvs_put = MAX(max_time_kvs_put, usec_timer); tot_time_kvs_put += usec_timer; return SLURM_SUCCESS; }
extern int pmi_kvs_put(struct kvs_comm_set *kvs_set_ptr) { int i, usec_timer; struct kvs_comm *kvs_ptr; static int pmi_kvs_no_dup_keys_set = 0; DEF_TIMERS; if (pmi_kvs_no_dup_keys_set == 0) { char *env = getenv("SLURM_PMI_KVS_NO_DUP_KEYS"); if (env) pmi_kvs_no_dup_keys = 1; else pmi_kvs_no_dup_keys = 0; pmi_kvs_no_dup_keys_set = 1; } /* Merge new data with old. * NOTE: We just move pointers rather than copy data where * possible for improved performance */ START_TIMER; pthread_mutex_lock(&kvs_mutex); for (i=0; i<kvs_set_ptr->kvs_comm_recs; i++) { kvs_ptr = _find_kvs_by_name(kvs_set_ptr-> kvs_comm_ptr[i]->kvs_name); if (kvs_ptr) { _merge_named_kvs(kvs_ptr, kvs_set_ptr->kvs_comm_ptr[i]); } else { _move_kvs(kvs_set_ptr->kvs_comm_ptr[i]); kvs_set_ptr-> kvs_comm_ptr[i] = NULL; } } slurm_free_kvs_comm_set(kvs_set_ptr); _print_kvs(); kvs_updated = 1; pthread_mutex_unlock(&kvs_mutex); END_TIMER; usec_timer = DELTA_TIMER; min_time_kvs_put = MIN(min_time_kvs_put, usec_timer); max_time_kvs_put = MAX(max_time_kvs_put, usec_timer); tot_time_kvs_put += usec_timer; return SLURM_SUCCESS; }